首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 內存管理深度解析(二):值類型與引用類型賦值語義、GC 基礎

     編輯:關於C語言

棧與堆交互演示


public MyInt AddFive(int pValue)
{
    MyInt result = new MyInt(); // 堆分配對象
    result.Val = pValue + 5;
    return result; // 返回引用
}
// 執行結束:棧幀銷毀,堆對象存活,引用返回給調用者

值類型賦值 = 拷貝數據


int x = 3;
int y = x; // y 獲得獨立副本 3
y = 4;     // x 仍為 3

引用類型賦值 = 拷貝引用


class MyInt { public int Val; }
MyInt x = new MyInt { Val = 3 };
MyInt y = x; // y 指向同一堆對象
y.Val = 4;   // x.Val 變為 4!

GC 基礎觸發條件

  • 托管堆內存不足(Gen 0 分配指針超過閾值)。
  • 手動調用 GC.Collect()。
  • 系統內存壓力大。

GC 步驟:暫停所有線程 → 標記可達對象 → 壓縮堆 → 更新引用 → 恢復線程。效率影響巨大,故需編寫高性能代碼減少 GC 頻率。

高性能編碼原則

  1. 操作引用類型時操作的是引用(指針),非對象本身。
  2. 值類型直接操作數據,無間接開銷。
  3. 減少不必要的堆分配:優先 struct、對象池、ArrayPool、StringBuilder。
  4. 及時釋放非托管資源(IDisposable/using)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved