代码之家  ›  专栏  ›  技术社区  ›  Hari Menon

提高C#码效率的途径[闭式]

  •  5
  • Hari Menon  · 技术社区  · 14 年前

    像我们大多数人一样,我非常喜欢提高代码的效率。以至于我宁愿选择快速执行脏代码,而不是更优雅或干净,但速度较慢的代码。

    幸运的是,对于我们所有人来说,在大多数情况下,更快、更高效的解决方案也是更干净、最优雅的解决方案。我以前只是一个编程爱好者,但现在我进入了全职开发,刚开始从事C和web开发。我一直在读一些关于这些主题的好书,但遗憾的是,这些书很少涉及到更好的方面。比如说,两个做同样事情的代码中哪一个运行得更快。这种知识主要来自经验。我请求所有的程序员在这里分享这些知识。

    在这里,我将从我遇到的这两篇博文开始。这正是我在这篇文章中要找的东西:

    注意:如果这个网站上已经有这种东西,一定要告诉我。我搜索了一下,但没找到,令人惊讶的是。也请张贴任何你知道的书,涵盖这些东西。

    附言:如果你从一些博客文章或者我们都能访问的在线资源中了解到一些东西,那么最好是把链接自己发布出来。

    9 回复  |  直到 14 年前
        1
  •  3
  •   DanP    14 年前

    与.net相关的性能信息的一个很好的资源是 Rico Mariani's Blog

        2
  •  16
  •   Brian R. Bondy    14 年前

    您应该做一些事情,比如使用泛型而不是对象来避免装箱/拆箱,还可以提高代码安全性,但是优化代码的最佳方法是使用探查器来确定代码的哪些部分比较慢。有许多优秀的.NET代码探查器可用,它们可以帮助确定程序中的瓶颈。

    一个好的探查器会告诉你一个函数执行了多少次,一个函数的平均运行时间是多少,一个函数的峰值运行时间是多少,一个函数的总运行时间是多少,一些探查器甚至会为您绘制图形,这样您就可以直观地看到程序的哪些部分是最大的瓶颈,并且可以深入到子函数调用。

    如果不分析,您很可能会错误地判断程序的哪个部分是慢的。

    一个伟大的和免费的.NET探查器的例子是 EQATEC Profiler .

        3
  •  8
  •   chrischu    14 年前

    关于这个问题最重要的一点是:不要过早地优化!

    在编写第一个版本的代码时考虑优化,这大部分是浪费时间和精力。

        4
  •  5
  •   Will A    14 年前

    “我宁愿选择快速执行脏代码,而不是更优雅或干净,但速度较慢的代码。”

    如果我正在为游戏编写像素渲染器,也许我会考虑这样做——但是,例如,当响应用户单击按钮时,我总是倾向于使用较慢、优雅的方法,而不是快速和肮脏的方法(除非缓慢>几秒钟后,我可能会重新考虑)。

    我必须同意其他职位-个人资料,以确定你的慢点,然后处理这些。从一开始就编写最佳的代码比它的价值要麻烦得多,你通常会发现你认为慢的地方很好,而真正慢的地方会让你大吃一惊。

        5
  •  2
  •   Community CDub    7 年前
        6
  •  2
  •   Community CDub    7 年前

    有很多诀窍,但如果这是你认为你需要的,你需要重新开始。在任何语言中,性能的秘密不在于编码技术,而在于 找到要优化的内容 .

    打个比方,如果你是一名警探,你想把强盗关进监狱,你的生意的核心不是不同类型的监狱。是关于 找到劫匪

    我依赖于一种纯手工的分析方法。 This is an example 找到一系列要优化的点,结果是 .

    如果在现有应用程序上执行此操作,则很可能会发现性能低下的主要原因是数据结构设计过于夸张,从而导致过度的通知式一致性维护,其特点是调用树过于繁杂。你需要在调用树中找到那些花费很大并且可以删减的调用。

    这样做之后,您可能会意识到,一种使用最少的数据结构和抽象来设计软件的方法一开始会运行得更快。

        7
  •  0
  •   Charlie Salts    14 年前

    如果您已经分析了您的代码,并且发现它缺乏快速性,那么您有时可以使用一些微优化。这里有一个 short list .

    微优化是明智的——就像《哈利波特》里的镜子:如果你不小心的话,你会把所有的时间都花在那里,没有得到很多回报的话,你就什么也做不了。

    StringBuilder和异常抛出的例子都是很好的——这些都是我经常犯的错误,有时还会添加一些 发现 东西。在这种情况下,我使用哈希表(或字典)缓存频繁访问的对象。

        8
  •  0
  •   Avram    14 年前


    最优化的方法是避免运行时代码中的所有if-else,将它们全部放在初始化时。

        9
  •  0
  •   Hari Menon    14 年前

    http://www.techgalaxy.net/Docs/Dev/5ways.htm 有一些很好的观点。。。今天才发现的。