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

时间:2010-10-17 22:33:47

标签: c# .net performance

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

  

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

我在stackoverflow中查找了类似的问题,我在ADO.NetNetworkingStreams中找到了一些关于性能最佳做法的问题,但没有找到关于性能最佳做法的问题。 C#(语言)

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

  

运行时优化性能   32位整数类型(Int32和   UInt32),所以使用这些类型   计数器和其他频繁访问   积分变量。

10 个答案:

答案 0 :(得分:13)

简单地说:个人资料。

每个应用都不同。如果是你app中的瓶颈,花点时间减少一些代码以使其“更有效”是没有意义的。此外 - 如果您没有数字来支持更改,您甚至可能会使事情更糟

在大多数情况下,IO是关键点,所以考虑IO是一个明智的选择。同上DB访问。但除此之外:衡量它。

答案 1 :(得分:11)

  1. 字符串为Immutable
  2. 了解using声明。
  3. 了解Boxing以及Generics如何提供帮助。
  4. 了解Garbage Collector的工作原理。
  5. Parallel programming在.Net 4.0
  6. 了解File IO如何影响效果。
  7. Eric Lippert谈论了很多优化问题。我会读他的blog 我也会查看Jon Skeet的blog

答案 2 :(得分:3)

答案 3 :(得分:2)

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

答案 4 :(得分:1)

不仅仅是在C#中,而是在任何鼓励你创建大量数据结构类的OO语言中,可能需要一些性能调优和分析经验来学习这一点,但保持简单不仅仅是一个广场。

必须尽量减少所拥有的类的数量,最大限度地减少数据的冗余,特别是尽量减少通知式更新的使用,以尽量保持数据的一致性。

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

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

答案 5 :(得分:0)

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

例如,使用List而不是ArrayList。通用集合不仅类型安全,而且当您将它们与值类型一起使用时,它们也比非泛型集合更快。

答案 6 :(得分:0)

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

  1. String.Format / StringBuilder用于字符串操作,因为字符串是不可变的。
  2. 继承IDisposable以编写自己的代码以处理对象,以便删除非托管内存引用,并且在仅使用托管内存时也不实现IDisposable。
  3. 不要将本地引用设置为null,因为它是自动完成的。
  4. 投掷时不要创建新的例外。使用throw than throw ex
  5. 将大对象作为WeakReference放置,使其立即可用于GC。 http://www.abhisheksur.com/2010/07/garbage-collection-algorithm-with-use.html
  6. 避免拳击/拆箱。使用泛型。
  7. 等。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

如果您订阅了来自对象“B”的对象“A”上的事件,请确保在“B”更改之前取消订阅“A”中的“B”事件,否则,“B”可能永远不会获得GC “d。

答案 9 :(得分:0)

在执行大量操作时尽可能避免字符串操作(lookups,.Contains(“blah”)等)。在可能的情况下删除这些操作时,我发现了显着的性能增强。