C#中的字符串比较更快

问题描述 投票:3回答:3

我有一个比较两个文件的程序。我运行了visual studio分析,发现我的比较时间很长。比较这两个字符串有更快的方法吗? (我不能使用并行foreach,因为它可能会导致错误。)现在我正在使用并发字典,但我对其他选项持开放态度。 :)

var metapath = new ConcurrentDictionary<string, string>();
foreach(var me in metapath)
{
 if (line.StartsWith(me.Key.ToString()))
 {...}
}
c# string performance
3个回答
5
投票

首先,从ToString()放下me.Key.ToString()

接下来,使用序数字符串比较(假设这不影响正确性):

line.StartsWith(me.Key, StringComparison.Ordinal);

这是有益的,因为标准字符串比较遵循各种相同的Unicode规则。例如,标准化和非标准化序列必须被视为相等。 Ordinal只是比较原始字符数据,忽略了Unicode相等规则。关于这个here,或者here(声称它更快但没有引用任何数字)有更多细节。

最后,描述代码。你会感到惊讶,但大多数时候,缓慢的部分根本不是你想象的那样。例如,它可能是您向字典添加内容的部分。


1
投票

如果你准确地比较字符串,String.Equals非常好:

String.Equals(line, me.Key)

你见过这个:What is the fastest (built-in) comparison for string-types in C#


0
投票

目前尚不清楚“比较”究竟是什么意思,但如果你不是指“排序”,即你想要检查剽窃或其他什么,那么首先对行进行散列并比较散列呢?

这取决于您的数据集的大小是否有任何好处。大小都是高度主观的。

© www.soinside.com 2019 - 2024. All rights reserved.