【发布时间】:2011-01-29 05:48:24
【问题描述】:
如今,优化似乎是一门失传的艺术。不是所有程序员都从他们的代码中榨取每一盎司的效率吗?经常在雪地里行走 5 英里时这样做?
本着找回失传艺术的精神,您知道哪些关于通过简单(或可能是复杂)更改来优化 C#/.NET 代码的技巧?由于这是一个如此广泛的事情,这取决于一个人试图完成的事情,它有助于为您的提示提供上下文。例如:
- 将多个字符串连接在一起时,请改用
StringBuilder。有关这方面的注意事项,请参阅底部的链接。 - 使用
string.Compare比较两个字符串,而不是像string1.ToLower() == string2.ToLower()这样的操作
目前的普遍共识似乎是衡量是关键。这种错失了重点:测量并不能告诉你哪里出了问题,或者如果你遇到瓶颈该怎么办。我曾经遇到过字符串连接瓶颈,不知道该怎么办,所以这些技巧很有用。
我发布此内容的目的是为常见瓶颈留出空间,以及如何在遇到瓶颈之前避免它们。它甚至不一定是任何人都应该盲目遵循的即插即用代码,而是更多地了解应该至少在某种程度上考虑性能,并且需要注意一些常见的陷阱。
我可以看到,了解提示为何有用以及应在何处应用它可能很有用。对于StringBuilder 提示,我在here on Jon Skeet's site 找到了我很久以前所做的帮助。
【问题讨论】:
-
在优化和可读性之间走一条线也很重要。
-
“少数字符串”; number 不是问题 - 问题在于它们是在单个复合串联语句中,还是在多个语句中。
-
StringBuilder 通常比 + 运算符慢。 C# 编译器自动将重复的 + 转换为 String.Concat 的适当重载。
-
当 CLR 运行时优化 IL 时,您将不得不与 CLR 抗争,而您试图在编译时做同样的事情 - 拔河。在过去的美好时光里,你优化了机器的指令,机器默默地运行它们。
标签: c# .net optimization