当前位置:  开发笔记 > 编程语言 > 正文

在什么级别C#编译器或JIT优化应用程序代码?

如何解决《在什么级别C#编译器或JIT优化应用程序代码?》经验,为你挑选了2个好方法。

我想知道这些信息以减少我的代码大小,所以我不会浪费时间来优化将由编译器或JIT完成的事情.

例如:

如果我们假设编译器内联调用属性的get函数,那么我不必将返回值保存在局部变量中以避免函数调用.

我想推荐一个描述正在发生的事情的好参考?



1> Kev..:

您可能想看看这些文章:

JIT优化 - (Sasha Goldshtein - CodeProject)
Jit优化:内联我(David Notario)
Jit优化:内联II(David Notario)

说实话,你不应该过分担心这种微观细节.让编译器/ JIT'er为你担心,它比你在几乎所有情况下都要好.不要挂断过早优化.专注于让你的代码工作,然后担心以后的优化:(a)它运行得不够快,(b)你有"大小"问题.



2> Marc Gravell..:

如果您担心性能,请运行探查器.然后改变代码.有可能你将永远不会百万年在正确的时间里正确地猜测.你可以改变0.02%的时间,并留下造成62%负担的方法.你也可能让它变得更糟.没有探查者和证据,你是盲人.


您不能假设 JIT将内联属性getter.它可能会或可能不会有很多原因; 方法体的大小,虚拟,值与引用类型,体系结构,附加的调试器等.

"吊装"仍然占有一席之地,如果在紧密循环中反复调用代码,仍然可以节省成本.例如:

var count = list.Count;
for(int i = 0 ; i < count ; i++) {...}

(忘记上面的forvs foreach辩论 - 这是一个正交的讨论).在上面,"提升机"将有助于提高性能.但只是真的让人感到困惑 - 对于数组而言,它是相反的,并且提升它更有效:

for(int i = 0 ; i < arr.Length ; i++) {...}

JIT识别出这一点并删除边界检查(因为数组是固定大小的).


我的观点是*no*reference将真正帮助你.**分析器**将.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有