气相色谱。与 TaskManager 报告相比,GetTotalMemory(false) 返回的内存非常少

GC.GetTotalMemory(false) returns very less memory in comparison with TaskManager reports

提问人:Usman 提问时间:9/13/2023 更新时间:9/13/2023 访问量:21

问:

我正在编写一个 ExternalMergeSort 算法,用于对非常大的文件进行排序(即可能是 20、50 GB 甚至 100 GB / 的文本文件)。

出于这个原因,我需要将文件拆分为等效的块,然后需要根据外部合并排序算法合并它们。这应该根据主机RAM以有效的方式对文件进行排序。

因此,这就是为什么我要动态查询可用空间并将其中的一部分分配给内部排序。

我正在使用,然后使用它返回的一半。GC.GetTotalMemory(false)

首先,这是一个好方法吗?否则,还有什么更有效的方法呢?

其次:它只是返回几个字节,而不是我从任务管理器中看到的字节。任务管理器清楚地表明我有 6.5 GB 的可用空间,而上述方法仅返回非常非常低,而且我需要一半。1855904

所以我不明白这个方法返回的数字。此方法是否返回可用内存或 C# 中其他一些可用的合法方法,这些方法返回 TaskManager 显示的内容?

我错过了什么吗? 注意:我可以有 100 GB 或 50 GB 的文件,我需要以平衡的方式选择最合适和最佳的文件拆分机制。这可能还包括 5 GB 或 10 GB 的小文件。

C# 排序 IO MergeSort

评论

0赞 Rand Random 9/13/2023
您的应用程序是 64 位还是 32 位?- 你正在寻找的似乎是 |learn.microsoft.com/en-us/dotnet/api/......|learn.microsoft.com/en-us/dotnet/api/......GC.GetGCMemoryInfo().TotalAvailableMemoryBytes
0赞 Usman 9/13/2023
我认为它提供了全部可用而不是免费可用。我需要免费可用。但是,我可以从 PerformanceCounter 对象中看到一些东西。但是在这种情况下,我需要添加 PerformaceCounter 库
0赞 Usman 9/13/2023
此外,我的应用程序当然是 64 位。

答: 暂无答案