gpt4 book ai didi

c# - .Net 中 Hashtable 对象使用的内存

转载 作者:行者123 更新时间:2023-11-30 22:17:47 25 4
gpt4 key购买 nike

我们有一个 Web 应用程序,它使用 HttpRuntime Cache 来存储经常使用的数据库数据。代码片段是:

public static void Add(string cacheName, Hashtable cacheValue)
{
System.Web.HttpRuntime.Cache.Add(cacheName, cacheValue, null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, null);
}

这里有一个哈希表对象从数据库接收数据并添加到 HttpRuntime 缓存中。如何通过代码找出这个哈希表对象占用的内存.....谢谢。

最佳答案

无法获取托管对象的大小,它因实现而异。

有关详细信息,请参阅此链接:Size of a managed object

对于不准确的估计,您可以尝试在 HashTable 初始化之前和填充数据之后使用 GC.GetTotalMemory(false):

        Console.Write("How many entries would you like to store in the Hashtable?:");

int hashTableEntries;
int.TryParse(Console.ReadLine(), out hashTableEntries);

var memBeforeHashInit = GC.GetTotalMemory(true);

var hashTable = new Hashtable();

for (int i = 0; i < hashTableEntries; i++)
hashTable.Add(i, i);

var memAfterHashInit = GC.GetTotalMemory(false);

var diff = memAfterHashInit - memBeforeHashInit;

Console.WriteLine("Memory used since startup: {0} bytes" +
"\r\n" +
"Hashtable entries: {1}" +
"\r\n" +
"Press any key to exit", diff, hashTableEntries);
Console.ReadLine();

看起来,一旦 Hashtable 被初始化,就会在内存中分配 8192 字节,它似乎还为其 64 个元素分配内存,每个元素 128 字节。一旦将第 65 个元素添加到哈希表,它就会为另外 64 个元素保留另外 8192 个字节。

它可能在另一个系统上有所不同,由 CLR 决定 :)

关于c# - .Net 中 Hashtable 对象使用的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com