代码之家  ›  专栏  ›  技术社区  ›  Homam

C中最重要的优化性能最佳实践是什么#

  •  12
  • Homam  · 技术社区  · 16 年前

    当我读书的时候 this tutorial 我注意到以下关于在C中使用结构的性能提示:

    除非你需要参考类型 语义,一个更小的类 超过16个字节可能更有效 由系统作为结构处理。

    我在StackOverflow中寻找了类似的问题,我发现了一些关于性能最佳实践的问题。 ADO.Net , Networking , Streams ,但不是关于 C(语言)中的性能最佳实践 .

    我想添加另一个关于使用整数类型的提示:

    运行时优化性能 32位整数类型(Int32和 uint32),因此使用这些类型 计数器和其他经常访问的 积分变量。

    10 回复  |  直到 8 年前
        1
  •  11
  •   kemiller2002    16 年前
    1. 字符串是 Immutable .
    2. 理解 using 语句。
    3. 理解 Boxing 以及如何 Generics 帮助。
    4. 了解 Garbage Collector 作品。
    5. Parallel programming 在.NET 4中
    6. 了解如何 File IO 影响性能。

    埃里克·利珀特谈了很多关于优化的问题。我会读他的 blog .
    我去看看乔恩·斯基特的 blog 也。

        2
  •  13
  •   Marc Gravell    16 年前

    简单:简介。

    每个应用程序都是不同的。花时间减少一些代码使其“更有效率”,如果是这样,那就没有意义了。 不 应用程序中的瓶颈。还有-你甚至可能在制造东西 更糟的 如果您没有支持更改的数字。

    在大多数情况下,IO是一个关键点,因此考虑IO是一个很简单的事情。同上,数据库访问。但除此之外:测量它。

        3
  •  3
  •   HTTP 410    16 年前
        4
  •  2
  •   Paul Creasey    16 年前

    在非特殊情况下不要使用例外。

        5
  •  1
  •   Mike Dunlavey    16 年前

    不仅是在C语言中,而且在任何鼓励您创建大量数据结构类的OO语言中,可能需要一些性能调整和分析经验来了解这一点,但是 保持简单 不仅仅是一个陈词滥调。

    必须尽量减少类的数量,尽量减少数据的冗余,尤其是尽量减少使用通知样式更新来保持数据的一致性。

    如果数据结构的不同组件需要保持一致,那么最好能够容忍暂时的不一致,而不是通过通知来保持一致。

    数据结构中存在的许多复杂问题都源于一种模糊但普遍存在的希望,即提高数据结构的“效率”,例如交叉链接数据结构,以便通知可以实现即时更新。这不仅使代码变得非常复杂,导致错误,而且当您进行性能调整时,您会发现,正是这些结构可能是最大的性能杀手。

        6
  •  0
  •   Carlos Muñoz Boom    16 年前

    避免在循环中装箱和拆箱。

    例如,而不是arraylist使用list。当您将泛型集合与值类型一起使用时,它们不仅是类型安全的,而且速度也比非泛型快。

        7
  •  0
  •   Doug R    16 年前

    在许多应用程序中,尤其是Web应用程序,应用程序的大部分时间都花在数据库上。(这不是C特定的)使用分析工具来确保没有长时间运行的DB查询,选择好的索引,并在适当的情况下使用预加载来减少必须进行的数据库请求的数量。这可能是您能做的最大的一件事,以提高使用数据库、C或其他应用程序的性能。

        8
  •  0
  •   Hugo    16 年前

    如果您从对象“B”订阅了对象“A”上的事件,请确保在“B”更改之前取消订阅“A”中的“B”事件,否则,“B”可能永远无法获得GC'D。

        9
  •  0
  •   mike    16 年前

    在执行大量操作时,尽可能避免字符串操作(查找,.contains(“blah”)等)。在尽可能删除这些操作时,我发现了显著的性能增强。

        10
  •  0
  •   abhishek    8 年前

    我可以列举很多性能优化:

    1. string.format/stringbuilder用于字符串操作,因为字符串是不可变的。
    2. 继承IDisposable以编写自己的代码来处理对象,以便删除非托管内存引用,并且在仅使用托管内存时不实现IDisposable。
    3. 不要将本地引用设置为空,因为它是自动完成的。
    4. 抛出时不要创建新的异常。使用throw than throw ex
    5. 将大对象作为weakreference,这样GC就可以立即使用它。 http://www.abhisheksur.com/2010/07/garbage-collection-algorithm-with-use.html
    6. 避免装箱/拆箱。使用泛型。

    等。

    推荐文章