首先,代码可读性超出了这个问题的窗口。我全都是为了代码可读性,但速度首先来到这里。
毫无疑问,当您的代码绝对没有必须在.Net框架中尽可能快地运行时,可以进行哪些优化?我知道编译器有标志来优化它,我肯定看到了它们的改进......但是如果这还不够好呢?什么是一些尝试和真正的技术,可以缩小到完成一个过程所需的最少时钟周期?
答案 0 :(得分:2)
由于.NET可执行文件以IL格式分发,并且JIT在第一次执行代码块时编译,因此在源代码编译时可以执行的优化次数有限。首先,您不知道当时您的源代码正在编译为IL在运行时代码将运行的CPU架构 - 32位还是64位x86?臂?其他
为了避免在第一次调用函数并且JIT编译器启动时遇到延迟,您应该考虑使用NGEN编译器将托管程序集中的IL代码“预编译”为本机机器代码。本机代码将缓存在本地硬盘上。
虽然NGEN有可能对生成的本地机器代码进行比JIT可以做的更多时间密集的代码分析和优化,但是上次检查NGEN时,除了JIT编译器之外没有执行任何优化。
在1.0 .NET版本中,NGEN代码实际上可能会受到轻微的性能损失,因为模块外的所有调用都经过间接跳转,而JIT编译器会编码调用站点中的实际目标地址。我相信这个NGEN间接已经在.NET 2.0及更高版本的平台中删除了。
答案 1 :(得分:2)
没有银弹;为了让你的程序运行得更快,你需要对其进行分析以找出瓶颈。
每个应用都不同。如果您对您的程序花费大量时间进行JIT编译感到满意,那么仅值得进行编译。
答案 2 :(得分:2)
我通常编写可读性和可维护性代码,然后在找到它们后重构以消除瓶颈。如果你实际上没有找到并发现瓶颈,那么所有的优化都为时过早。你可能会在没有任何实际好处的情况下使代码难以理解。
答案 3 :(得分:1)
关闭异常(即不要使用它们)
关闭装订检查
使用分析器查找瓶颈
修改强>: 另请阅读本文撰写的这篇文章,http://www.sumyan.nl/2010/06/08/multidimensional-array-performance/这是一个非常具体的优化,也是依赖于平台的,但鲜为人知,非常有用。