【发布时间】:2012-11-11 19:59:13
【问题描述】:
我决定在排序测试中比较速度 C++ std::vector 和 C# List。 所以我用 2 700 000 个相同的字符串填充它们并测量排序时间。
看起来像这样:
C++:
std::vector<std::string> CPPList;
std::ifstream file("words-back.txt");
std::string word;
while(std::getline(file, word))
{
CPPList.push_back(word);
}
file.close();
Profiler profiler;
profiler.Start();
std::sort(CPPList.begin(),CPPList.end ());
profiler.Stop();
C#:
string[] lista = File.ReadAllLines("words-back.txt").ToArray();
List<string> CSList = new List<string>();
foreach (string element in lista)
{
CSList.Add(element);
}
Stopwatch timer = Stopwatch.StartNew();
CSList.Sort( );
timer.Stop();
结果让我大吃一惊,我不得不问你发生了什么事。 C++ 需要 0.7 秒,而 C# 需要 25 秒。我确实输出了带有排序字符串的文件,以确保排序正确完成并且正确。
我的问题是:为什么 C# 比 C++ 长这么多。
对不起,在我吃一个零之前,这个文件中的字符串不是 270 000 而是 2 700 000,
【问题讨论】:
-
C++ 比 C# 快?这很奇怪......
-
请出示您的实际完整代码。您是否也在测量 JIT 时间?
-
问题是什么?
-
我使用
Guid.NewGuid().ToString()生成了一个包含 270,000 个字符串的列表。在调试版本中,对它们进行排序平均需要 1.2 秒。您的结果似乎根本不准确。 -
@BenTrofatter 如果您不知道 JIT 是如何工作的,请不要发布任何有关 C# 的 cmets。谢谢。
标签: c# c++ list vector compare