首頁 >後端開發 >C++ >C# 中的 ValueTuple 與 Tuple:主要性能和設計差異是什麼?

C# 中的 ValueTuple 與 Tuple:主要性能和設計差異是什麼?

DDD
DDD原創
2024-12-31 06:50:101052瀏覽

ValueTuple vs. Tuple in C#: What are the Key Performance and Design Differences?

比較 System.ValueTuple 和 System.Tuple

在研究反編譯的 C# 7 函式庫時,可能會遇到 ValueTuple 泛型的使用。了解 ValueTuples 的用途及其相對於傳統元組的優勢至關重要。

主要差異:

  • 值型別與引用型別: ValueTuples 是值型別(結構),而Tuple 則是引用型態(類)。值類型在堆疊上分配數據,減少GC壓力。
  • 可變性:ValueTuples是可變的,而Tuples是不可變的。這種差異會影響物​​件相等性。
  • 欄位存取: ValueTuples 透過欄位(例如 Item1)公開其元素,而 Tuple 使用屬性。

ValueTuples 的基本原理:

ValueTuples 簡介在C# 7 中,是出於效能考量:

  • 無分配懲罰:作為值類型,ValueTuples 避免GC開銷。

自動相等: 結構固有的最佳化平等,使ValueTuples 高效

語法便利:

該語言引入了語法糖來簡化元組的處理,使它們的使用更加直觀。
public (int sum, int count) DoStuff(IEnumerable<int> values) 
{
    var res = (sum: 0, count: 0);
    foreach (var value in values) 
    { 
        res.sum += value; 
        res.count++; 
    }
    return res;
}

var result = DoStuff(Enumerable.Range(0, 10));
Console.WriteLine($&quot;Sum: {result.sum}, Count: {result.count}&quot;);
範例:

ValueTuple<int, int> valueTuple = DoStuff(Enumerable.Range(0, 10));
Console.WriteLine(string.Format(&quot;Sum: {0}, Count: {1})&quot;, valueTuple.Item1, valueTuple.Item2));
示範的用法和好處ValueTuples:

使用分解:

或使用新變數:

編譯器實作:

編譯器產生在內部利用 ValueTuple 欄位的程式碼,同時提供命名參數存取以便直覺使用。 結論:ValueTuples 由於其值類型性質、可變性和語法糖而比傳統元組具有顯著的性能和便利性優勢.

以上是C# 中的 ValueTuple 與 Tuple:主要性能和設計差異是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn