簡體   English   中英

如果 StreamWriter 變量在 if 語句中初始化並作為參數傳遞給 Console.SetOut(),它是否會過早地進行 GC?

[英]if a StreamWriter variable is initialized inside an if statement and passed as an argument to Console.SetOut(), can it get GC'ed too soon?

我試圖決定這個 StreamWriter 變量是否應該在 if 語句中聲明為字段、本地或本地。 我擔心的是,在我將它傳遞給 Console.SetOut() 並繼續執行 if 語句之后,將不再有對該對象的引用,並且它會收集垃圾。

我是不是想得太多了,還是假設 Console 類將在我的應用程序的整個執行過程中引用它是否安全?

在我將它傳遞給 Console.SetOut() 並繼續執行 if 語句之后,將不再有對該對象的引用

該假設是不正確的:將有一個對對象的引用,即Console的私有字段。 所以,不用擔心你的流編寫器會被垃圾回收。

GC 計數 將跟蹤引用,即使它們已在應用程序中傳遞。 如果您無法再訪問它們,GC 應該只收集對象。

具體來說, Console.SetOut保持對傳遞給它的TextWriter的內部引用。

是的,你想多了……GC 永遠不會收集你可能使用的任何東西。 算了……你(應該)有更重要的事情要擔心……

我建議您遵循的有關 GC 的唯一規則是,如果一個類實現了 IDisposable,您必須調用 .Dispose() 或將其包裝在“使用”中。 就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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