代码之家  ›  专栏  ›  技术社区  ›  Lydon Ch

实习字符串列表减少内存使用

  •  -1
  • Lydon Ch  · 技术社区  · 1 年前

    以下内容 interned List,为什么我的List内存消耗量在8MB时仍然很高?

    我可以看到列表中的所有字符串都有相同的地址。

    这就是C#列表的工作原理吗?

    dotMemory

    int maxCount = 1_000_000;
    
    var list1 = new List<string>(maxCount);
    
    string val = "input1.country == \"india\" AND input1.loyaltyFactor <= 2 AND input1.totalPurchasesToDate >= 5000 AND input2.totalOrders > 2 AND input3.noOfVisitsPerMonth > 2";
    for (var ix = 0; ix < maxCount; ix++)
    {
        list1.Add(string.Intern(val));
    }
    var totalMemory = GC.GetTotalMemory(false);
    Console.WriteLine(totalMemory/1024 + "KB");
    
    Console.ReadKey();
    Console.Write(list1[0]);
    
    1 回复  |  直到 1 年前
        1
  •  4
  •   PMF    1 年前

    您的列表中有1000000个条目。即使所有条目都相同 列表 它本身仍然需要空间。8MB正好是1000000乘以8,因为引用类型(如字符串)列表中的每个条目在64位CPU上使用8个字节。