C#中的字符串比较更快

时间:2012-03-23 21:55:36

标签: c# string performance

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

var metapath = new ConcurrentDictionary<string, string>();
foreach(var me in metapath)
{
 if (line.StartsWith(me.Key.ToString()))
 {...}
}

3 个答案:

答案 0 :(得分:5)

首先,从ToString()中删除me.Key.ToString()

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

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

这是有益的,因为标准字符串比较遵循各种相同的Unicode规则。例如,标准化和非标准化序列必须被视为相等。 Ordinal只是比较原始字符数据,忽略Unicode相等规则。有关此here的详细信息,或here(声称速度较快但未引用任何数字)。

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

答案 1 :(得分:1)

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

String.Equals(line, me.Key)

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

答案 2 :(得分:0)

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

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