欧美性猛交xxx嘿人猛交_又色又爽又高潮免费观看_精品国产一区二区三区久久影院_青娱乐极品视觉盛宴国产视频

技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

[C#技巧]指定List集合??容量,速度提升2倍

作者:admin    時間:2023-5-6 17:2:58    瀏覽:

本文將通過示例,對比有無指定List集合??容量的情況下,其程序運行速度的快慢,這是一個有意思的測試。

代碼如下:

[Benchmark]
public void NonFixedCapacityTest()
{
    var items = new List<decimal>();
    for (int i = 0; i < 1000000; i++)
    {
        items.Add(i);
    }
}

[Benchmark]
public void FixedCapacityTest()
{
    const int capacity = 1000000;
    var items = new List<decimal>(capacity);
    for (int i = 0; i < capacity; i++)
    {
        items.Add(i);
    }
}

這兩種方法完成相同的任務——使用foreach循環填充整數集合。唯一的區別是在FixedCapacityTest方法中構造函數被初始化為某個數字。這個簡單的技巧使其運行速度是NonFixedCapacityTest的2倍。

 

因為它的List<T>的實現方式是將元素存儲在數組中,數組是固定大小的數據結構。當開發人員List<T>在未指定其容量的情況下進行實例化時,將分配一個默認容量數組。當數組已滿時,將分配一個新的更大的數組,并將舊數組中的值復制到新數組中。

提前指定容量可以消除分配、復制和舊數組垃圾回收的開銷。指定集合的??容量應該是開發人員的默認選擇,如果他們事先知道有多少項目將被添加到集合中。

容量設置不僅適用于 List 集合,還適用于其他集合,例如Dictionary<TKey, TValue>HashSet<T>等等。

有時結構(struct)比類(class)速度快得多

開發人員通常可能需要分配一個數組或List<T>在內存中存儲數萬個對象。這個任務可以使用類或結構來解決。

public class PointClass
{
    public int X { get; set; }
    public int Y { get; set; }
}

public struct PointStruct
{
    public int X { get; set; }
    public int Y { get; set; }
}

[Benchmark]
public void ListOfObjectsTest()
{
    const int length = 1000000;

    var items = new List<PointClass>(length);

    for (int i = 0; i < length; i++)
    {
        items.Add(new PointClass() { X = i, Y = i });
    }
}

[Benchmark]
public void ListOfStructsTest()
{
    const int length = 1000000;

    var items = new List<PointStruct>(length);

    for (int i = 0; i < length; i++)
    {
        items.Add(new PointStruct() { X = i, Y = i});
    }
}

可以看到, ListOfObjectTestListOfStructsTest之間的唯一區別是第一個測試創建類的實例PointClass,而第二個測試創建結構的實例PointStruct。運行結果是使用結構的代碼比使用類的代碼運行速度快 15 倍。

 

存在如此大的時間差異是因為在類的情況下,CLR 必須將一百萬個對象分配到托管堆并將它們的引用存儲回集合List<T>。在結構的情況下,將有唯一的對象分配到托管堆中,它是集合List<T>的實例 ,一百萬個結構將嵌入到該單個集合實例中。

相關文章

標簽: CSharp  asp.net  List方法  代碼性能  優化  
x