我正在编写一个性能关键程序,我在我更熟悉的C#或Visual C ++之间犹豫不决。我已经运行了几个特定于我需要使用的操作的基准测试,结果让我困惑: (这些测试的参考是C ++ Win32 build)
参考 C#32:慢50%, C#64:慢4%
按价值 C#32:慢21%, C#64:快1%
使用相同的编译器选项(针对速度进行了优化),在Visual C ++中构建for x64比构建为Win32慢20-30倍。
我惊讶于64位C#编译器与32位C#编译器的性能相比。为什么在Visual C ++中不会发生同样的情况? 64位编译器是否未针对64位进行优化?
在基准测试中,我传递了一个对象,该对象具有多个重叠的结构作为属性。 该基准包括一系列50个重叠的if语句,用于测试结构中包含的布尔值。也没有涉及很长的类型。 如果需要,我可以发布代码,但我想也许这只是我不了解编译器的东西。
编辑:使用/ MT编译C ++ Win32以获得最佳性能。我尝试用/ MD编译x64,性能只有6倍慢。 我还记得当我在一年前在VS2013中对类似的代码运行相同的测试时,x64和Win32版本的执行方式与我记忆中相同...
答案 0 :(得分:0)
解决了,我实际上犯了一个愚蠢的错误,认为bool在C ++中默认初始化为false,因为它是C#...
在C ++中,32位应用程序现在具有与64位应用程序相同的性能,即使两者目前都比C#差得多;我的代码可能有些不好!