簡體   English   中英

“避免在編譯器熱路徑中分配” Roslyn 編碼約定

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM