是否有更新版本的“编写更快的托管代码:知道什么是成本”?

时间:2009-04-05 18:40:37

标签: .net performance clr

MSDN "Writing Faster Managed Code: Know What Things Cost"非常好,但它是在2003年为CLR v1编写的。这个地方有更新版本吗?

3 个答案:

答案 0 :(得分:18)

没有。我从来没有对它进行更新,但我认为采用适当的盐,一般的建议和文章中的大多数经验法则今天仍然很好。

(也就是说,今天重复实验以了解原始时代如何变化,生成的代码如何变化以及微处理器如何变化将会很有趣。)

大多数原语的相对开销不会有太大变化,但有些开销会发生巨大变化。例如,非静态委托调用的平庸性能得到了显着提高(在.NET 2.0中,如果我没记错的话)。我不愿意认为今天的从业者会不顾一切地避免委托调用,因为我在2003年报告它非常昂贵。

从.NET 1.1开始,我希望许多已编译的代码序列已经改变;会有新的JIT编译器优化(在微基准测试中不会很好地显示); JIT'd和NGEN代码的不同组合(我的文章没有探讨NGEN);多年来,像垃圾收集器这样的关键子系统一直在不断调整。

我重申了关于内存系统效应可能会淹没任何数量的单个托管代码原语操作的成本的警示性建议 - 并再次注意到很多内容已发生变化。例如,03-04中的大量CLR性能工作进入了NGEN系统组件的更好的工作集行为(例如最小化脏私有页面)。

当然,本文的主题是必须谨慎而谨慎地衡量代码的性能,而且这个主题是永恒的。

顺便说一句,我一直想做一篇关于前几百个最常用的.NET BCL方法的预期/典型时间和空间成本的后续文章,并展示一些警示故事中的一些恐怖我们发现有关.NET性能的故事。这导致了一些非常有趣的思考,如何描述真实从业者在野外实际使用的类库/框架的实证表现......

感谢您阅读,感谢您持续的兴趣。

P.S。我看到Vance Morrison随后在这个主题上写了一篇很棒的MSDN系列文章 - 如果你喜欢我的文章,你会喜欢这些:

http://msdn.microsoft.com/en-us/magazine/cc500596.aspx

http://msdn.microsoft.com/en-us/magazine/cc507639.aspx

答案 1 :(得分:2)

我不这么认为,我不认为更新版本会有那么大的不同。

时间数据会有所不同,因为测试机可能更新更快,但测试之间的关系几乎相同。

这篇文章是关于托管代码中常见操作的低级别影响,自编写artice以来,这种影响并未发生太大变化。该框架的新版本增加了许多功能,但它都建立在自C#1.0以来可用的原语之上。

答案 2 :(得分:1)

我不知道有哪一个取代了这本书,但CLR via C#书将为您提供有关CLR如何工作以及消耗大量时间和资源的深层和相关知识。