Har*_*non 5 c# optimization performance complexity-theory
像我们大多数人一样,我是提高代码效率的忠实粉丝.这么多,我宁愿选择快速执行的脏代码而不是更优雅或更干净但更慢的东西.
对我们所有人来说幸运的是,在大多数情况下,更快更有效的解决方案也是更清洁,最优雅的解决方案.我曾经只是编程的一个讨厌者,但我现在正在进行全职开发,刚开始使用C#和Web开发.我一直在阅读一些关于这些主题的好书,但遗憾的是,书籍很少涉及更精细的方面.比方说,执行相同操作的两个代码中的哪一个会运行得更快.这种知识主要来自经验.我要求所有程序员在这里分享任何这样的知识.
在这里,我将从我遇到的这两篇博文开始.这正是我在这篇文章中寻找的东西:
PS:如果这个东西已经存在于这个网站的某个地方,请告诉我.我惊讶地搜索但找不到.另外,请发布您知道的任何涵盖此类内容的书籍.
PPS:如果您从某些博客文章或我们都可以访问的某些在线资源中了解某些内容,那么最好发布链接本身imo.
Bri*_*ndy 16
您应该做一些事情,比如使用泛型而不是对象来避免装箱/拆箱并提高代码安全性,但优化代码的最佳方法是使用分析器来确定代码的哪些部分很慢.有许多可用于.NET代码的优秀分析器,它们可以帮助确定程序中的瓶颈.
通常,您不应该关注提高代码效率的小方法,而是在完成编码时,然后对其进行分析以找出瓶颈.
一个好的分析器会告诉你统计数据,例如函数执行了多少次,函数的平均运行时间,函数的峰值运行时间,函数的总运行时间等等.一些分析器甚至会为你绘制图形,这样你就可以直观地看到程序的哪些部分是最大的瓶颈,你可以深入研究子函数调用.
如果没有分析,你很可能会错误地认为程序的哪一部分很慢.
用于.NET的优秀和免费分析器的一个例子是EQATEC Profiler.
关于这个问题,最重要的一点是:不要过早优化!
只有一个优化时间,即存在当前工作实施无法满足的性能限制时.然后你应该拿出一个分析器,检查代码的哪些部分很慢,以及如何解决它们.
在编写第一个版本时考虑优化主要是浪费时间和精力.
"我宁愿选择快速执行的脏代码,而不是那些可能更优雅或更干净,但更慢的东西."
如果我正在为游戏编写一个像素渲染器,也许我会考虑这样做 - 但是,当回应用户点击某个按钮时,我总是喜欢慢速,优雅的方法而不是快速和肮脏(除非缓慢>几秒钟,我可能会重新考虑).
我必须同意其他帖子 - 个人资料,以确定你的慢点在哪里,然后处理这些.从一开始就编写最佳代码比它的价值更麻烦,你通常会发现你认为慢的东西会很好,真正的慢速区域会给你带来惊喜.