我有一个第三方库和一个简单的基准测试,这是我自己写的,用来测试这个库的性能。第三方库是C++/CLI .NET库,那里的大多数代码都是非托管的。这个库是为.NET Framework2.0组装的。我的基准测试是托管的C#代码,它给库增加了很少的开销,只对方法进行了简单的调用,订阅了事件处理程序,关闭/打开连接等。库在多个工作线程中执行一些操作,它还处理套接字。
奇怪的是,当我用VS2005进行基准测试时,当我用VS2008做同样的测试时,我得到了不同的性能值(VS2008好10% )。
如果我的所有代码只使用.NET 2.0的特性,没有使用3.5中的语言/特性或库,那么性能提升的原因是什么呢?我的基准测试项目只引用System.dll和第三方dll,而基准测试代码在VS2005和VS2008项目中完全相同?
发布于 2009-07-17 13:30:26
即使你只使用2.0的功能(语言?库?),可能是3.5JIT简单地优化了代码,或者一些库更优化了。
换句话说:虽然2.0函数的接口保持向后比较相同,但实现不一定是这种情况。我假设GC (它的锁定也在不断地调整)
很难弄清楚到底是什么导致了这种差异。它可以像一些原始函数(如memmove,在mem中搜索字节/字)一样简单,并针对更新的cpu进行优化。
https://stackoverflow.com/questions/1143235
复制相似问题