[英]“Avoid allocations in compiler hot paths” Roslyn Coding Conventions
我一直在閱讀 .NET 編譯器平台(“Roslyn”)的貢獻代碼部分,並且遇到了編碼約定的指南。 我了解大多數編碼約定以及他們為什么會要求它。 但我不明白他們的意思是:
避免在編譯器熱路徑中分配:
避免使用 LINQ。
避免在沒有結構枚舉器的集合上使用 foreach。
什么是“編譯器熱路徑”? 為什么我應該避免使用 LINQ 並避免對沒有結構枚舉器的集合執行 foreach?
編譯器熱路徑是編譯器中的代碼執行路徑,其中花費了大部分執行時間,並且可能會非常頻繁地執行。
在這些代碼路徑中避免(堆)分配的原因是分配可能會觸發垃圾收集,這可能會導致突然的、極端的性能下降。 這些顯然應該在非常常用的代碼路徑中避免。
Linq 和foreach
被挑出來是因為它們會隱式分配內存——除非你的GetEnumerator
返回一個struct
,這不會導致堆分配。
“熱路徑”是對性能最關鍵的代碼路徑。 它是每秒執行數百萬或數十億次的代碼片段,占據了大部分執行時間。
在我閱讀時,其他兩個只是可能導致隱式分配的情況的示例,因此應避免在代碼的性能關鍵部分中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.