1

我有一个 3rd 方库和一个简单的基准测试,我自己编写来测试这个库的性能。第 3 方库是 C++/CLI .NET 库,大多数代码都是非托管的。该库是为 .NET Framework 2.0 组装的。我的基准测试是托管的 C# 代码,它给库增加的开销很小,只对方法的简单调用、对事件处理程序的订阅、关闭/打开连接等。库在多个工作线程中执行一些操作,它还处理套接字。

奇怪的事情——当我用 VS 2005 通过基准测试编译时,当我用 VS 2008 做同样的事情时——我得到了不同的性能值(VS 2008 好 10%)。

如果我的所有代码仅使用 .NET 2.0 功能,不使用 3.5 的语言/功能或库,会导致性能提高的原因。我的基准测试项目只引用了 System.dll 和 3rd 方 dll,而基准测试代码在 VS2005 和 VS2008 项目中是完全一样的吗?

4

1 回答 1

2

即使您只使用 2.0 功能(语言?库?),也可能是 3.5 JIT 只是简单地优化了代码,或者某些库更加优化。

换句话说:虽然 2.0 函数的接口保持相同的向后兼容,但实现不一定是这种情况。我假设 GC(并且它的锁定也在不断调整)

很难弄清楚究竟是什么导致了这种差异。它可以像一些原始函数(如 memmove,在 mem 中搜索字节/单词)一样简单,针对更新的 cpu 进行优化。

于 2009-07-17T13:30:25.923 回答