簡體   English   中英

.net垃圾收集和托管資源

[英].net Garbage Collection and managed resources

來自原始數據類型(int,char等)的內存是在它們離開作用域后立即釋放,還是添加到垃圾收集中以供以后發布?

考慮:

For x as integer=0 to 1000
dim y as integer
Next

如果這不會將垃圾收集器中的1000個整數添加到以后清理,它如何處理字符串對象? 這會創建1000個字符串以便以后清理嗎?

For x as integer=0 to 1000
dim y as string=""
Next

如何只包含int,string等...數據類型的結構?

僅包含托管資源的類?

好的,只有兩個答案,已經有錯誤信息...

  • 字符串不是基本類型
  • 字符串不是值類型
  • 值類型值並不總是在堆棧上創建 - 它取決於變量的位置。 如果它是類的一部分,它將與該對象的其余數據一起存儲在堆上。
  • 如果它們被捕獲,甚至局部變量也可以在堆上結束(例如,在匿名函數和迭代器塊中)
  • 諸如“”之類的字符串文字被實習 - 它們總是解析為相同的字符串。 該循環實際上不會創建任何字符串。

有關更多信息,請參閱我的文章, 了解.NET內存中的內容 您可能還想考慮它是否重要

原始數據類型(字符串除外)是值類型,在堆棧而不是堆上創建。 當它們超出范圍時,它們會從堆棧中彈出; 他們不是垃圾收集。

字符串是引用類型,在堆上分配,並且是垃圾回收。 .NET使用String Interning對字符串的內存管理進行一些優化。 (即你在內存中可能只有一個字符串“”的實例..NET可以這樣做,因為字符串是不可變的)

已經給出了兩個答案,除了本文之外我沒有太多可以添加的內容 ,它很好地描述了垃圾收集在.Net中的工作原理。

暫無
暫無

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

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