我有一个比较两个文件的程序。我运行了visual studio分析,发现我的比较时间很长。比较这两个字符串有更快的方法吗? (我不能使用并行foreach,因为它可能会导致错误。)现在我正在使用并发字典,但我对其他选项持开放态度。 :)
var metapath = new ConcurrentDictionary<string, string>();
foreach(var me in metapath)
{
if (line.StartsWith(me.Key.ToString()))
{...}
}
答案 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)
目前尚不清楚“比较”究竟是什么意思,但如果你不是指“排序”,即你想检查剽窃或其他什么,那么首先对行进行散列并比较散列呢?
这取决于您的数据集的大小是否有任何好处。大小都是高度主观的。