問題為刪除!?
01-09
不要再回答!
謝邀!雖然都已經離開.Net team了, 但還是回答一下吧。jit inline有一套自己的經驗演算法,很久沒碰jit了基本都忘記了。不過這幾種肯定不會被inline的,
- Methods marked with MethodImplOptions.NoInlining
- Methods larger than 32 bytes of IL
- Virtual methods
- Methods that take a large value type as a parameter
- Methods on MarshalByRef classes
- Methods with complicated flowgraphs
- Methods meeting other, more exotic criteria
參考 Aggressive Inlining in the CLR 4.5 JIT(雖然是4.5,但inline標準這種不會有太大的變化)
可能會,規則和不少東西相關,例如方法體積。.NET 4.5另外有[AggresiveInlining]標記。具體可以dump個內存下來看看那些小方法有沒有被JITed。假如沒有被JITed說明被內聯了,否則看下大方法的ASM,就可以看出來到底有沒有內聯。
但是,你確定你的程序性能到了需要考慮這個的地步么?一般來說我是不信的。一、任何沒有測試基準就進行性能優化或猜測的行為,都是耍流氓二、任何重複代碼都是要重構的。消除重複代碼並沒有引起代碼膨脹,不需要考慮副作用
推薦閱讀:
※知乎是否存在「易於獲得贊同」的答案風格?
※知乎回答中一些匿名用戶會說出自己行業或者自己公司的某些重要內幕,這樣是否構成「泄露商業機密」?
※為什麼我回答得很好但是沒人贊?
※微博官方運營轉發知乎回答且不註明原出處是否構成侵權?
※回答問題被萬人點贊是什麼體驗?然後被摺疊呢?
TAG:知乎回答 |