C# C语言中更快的字符串比较#

C# C语言中更快的字符串比较#,c#,string,performance,C#,String,Performance,我有一个比较两个文件的程序。我运行了VisualStudio分析,发现我的比较时间很长。有没有比这更快的方法来比较两个字符串?(我不能使用parallel foreach,因为它可能会导致错误。)现在我使用的是并发字典,但我对其他选项持开放态度。:) var metapath=new concurrentdirectionary(); foreach(元路径中的变量me) { if(line.StartsWith(me.Key.ToString())) {...} } 首先,从me.Key.To

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

var metapath=new concurrentdirectionary();
foreach(元路径中的变量me)
{
if(line.StartsWith(me.Key.ToString()))
{...}
}

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

接下来,使用序号字符串比较(前提是这不会影响正确性):

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


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

如果您精确比较字符串,String.Equals非常好:

String.Equals(line, me.Key)

你看到了吗:

不清楚你所说的“比较”到底是什么意思,但如果你不是指“排序”,也就是说,你想检查是否有剽窃或其他行为,那么先对行进行散列,然后比较散列,怎么样


这将取决于数据集的大小,以确定是否有任何好处。“大”和“小”是非常主观的术语。

比较时间有多大,是不是说?你需要基于行的方法吗?从你的问题来看,这并不完全明显。是否只想比较整个文件是否相等,还是单个文本文件的行?@BoltClock well me.key.tostring有8个字符长,行数介于200-1000之间,整个过程大约需要42秒comparisions@romkyns是的,我认为它应该是基于线的声音,类似于这个问题:你能解释一下为什么这是有益的吗?对不起,我不是在比较只有前8个字符
line.StartsWith(me.Key, StringComparison.Ordinal);
String.Equals(line, me.Key)