我想知道这些信息以减少我的代码大小,所以我不会浪费时间来优化将由编译器或JIT完成的事情.
例如:
如果我们假设编译器内联调用属性的get函数,那么我不必将返回值保存在局部变量中以避免函数调用.
我想推荐一个描述正在发生的事情的好参考?
您可能想看看这些文章:
JIT优化 - (Sasha Goldshtein - CodeProject)
Jit优化:内联我(David Notario)
Jit优化:内联II(David Notario)
说实话,你不应该过分担心这种微观细节.让编译器/ JIT'er为你担心,它比你在几乎所有情况下都要好.不要挂断过早优化.专注于让你的代码工作,然后担心以后的优化:(a)它运行得不够快,(b)你有"大小"问题.
如果您担心性能,请运行探查器.然后改变代码.有可能你将永远不会百万年在正确的时间里正确地猜测.你可以改变0.02%的时间,并留下造成62%负担的方法.你也可能让它变得更糟.没有探查者和证据,你是盲人.
您不能假设 JIT将内联属性getter.它可能会或可能不会有很多原因; 方法体的大小,虚拟,值与引用类型,体系结构,附加的调试器等.
"吊装"仍然占有一席之地,如果在紧密循环中反复调用代码,仍然可以节省成本.例如:
var count = list.Count; for(int i = 0 ; i < count ; i++) {...}
(忘记上面的for
vs foreach
辩论 - 这是一个正交的讨论).在上面,"提升机"将有助于提高性能.但只是真的让人感到困惑 - 对于数组而言,它是相反的,并且不提升它更有效:
for(int i = 0 ; i < arr.Length ; i++) {...}
JIT识别出这一点并删除边界检查(因为数组是固定大小的).