【发布时间】:2016-01-30 23:26:42
【问题描述】:
顺便说一句,我想看看 C# for 循环的速度与 C++ for 循环的速度相比如何。我的测试是简单地迭代一个 for 循环 100000 次,100000 次,然后平均结果。
这是我的 C# 实现:
static void Main(string[] args) {
var numberOfMeasurements = 100000;
var numberOfLoops = 100000;
var measurements = new List < long > ();
var stopwatch = new Stopwatch();
for (var i = 0; i < numberOfMeasurements; i++) {
stopwatch.Start();
for (int j = 0; j < numberOfLoops; j++) {}
measurements.Add(stopwatch.ElapsedMilliseconds);
}
Console.WriteLine("Average runtime = " + measurements.Average() + " ms.");
Console.Read();
}
结果:Average runtime = 10301.92929 ms.
这是我的 C++ 实现:
void TestA()
{
auto numberOfMeasurements = 100000;
auto numberOfLoops = 100000;
std::vector<long> measurements;
for (size_t i = 0; i < numberOfMeasurements; i++)
{
auto start = clock();
for (size_t j = 0; j < numberOfLoops; j++){}
auto duration = start - clock();
measurements.push_back(duration);
}
long avg = std::accumulate(measurements.begin(), measurements.end(), 0.0) / measurements.size();
std::cout << "TestB: Time taken in milliseconds: " << avg << std::endl;
}
int main()
{
TestA();
return 0;
}
结果:TestA: Time taken in milliseconds: 0
当我查看measurements 中的内容时,我注意到它被零填充了......那么,它是什么,这里有什么问题?是clock吗?是否有更好/正确的方法来测量 for 循环?
【问题讨论】:
-
循环可能被优化掉了,因为它是空的。
-
显然,C++ 比 C# 快得多。
-
在循环中放置一个计数器,在你停止时钟后打印计数器的值。
-
@Galik 将被每个理智的编译器优化为
counter = numberOfLoops;。
标签: c# c++ performance for-loop