确定操作所需的足够内存是否可用

7

我们能否确定一个操作所需的充足内存是否可用?如果可以,那么如何确定呢? 谢谢。


+1个不错的问题。如果您区分物理内存和虚拟内存会更有帮助... - James Westgate
5个回答

6

不行,你绝对不能这样做,因为你事先不知道操作将消耗多少内存。如果你确切地知道操作将消耗多少内存,你可以查询可用的系统内存并进行近似计算,但不要依赖它。请记住,垃圾回收是相当不确定的,可能随时会出现问题,破坏你的近似值。你随时可能会遇到OutOfMemoryException

所以,专注于编写高质量的代码而不是这个。


4
为了检查可用内存,我建议您查看这个这个这个。基本上,您只需要使用性能计数器并执行以下操作即可:
PerformanceCounter pc = new PerformanceCounter("Memory","Available Bytes");
long availableMemory = Convert.ToInt64(pc.NextValue());
Console.WriteLine("Available Memory: {0}", availableMemory);

如果您不知道操作需要多少内存,那么检查可用内存是无济于事的。

2

是的,你可以。
假设你知道该操作需要100MB。

System.Runtime.MemoryFailPoint memFailPoint = null;
int memUsageInMB = 100;
bool isEnoughMemory = false;

try
{
    // Check for available memory.
    memFailPoint = new MemoryFailPoint(memUsageInMB);
    isEnoughMemory = true;
}
catch (InsufficientMemoryException e)
{
    // MemoryFailPoint threw an exception.
    Console.WriteLine("Expected InsufficientMemoryException thrown.  Message: " + e.Message);
}

if (isEnoughMemory)
{
    // Perform the operation.
}
else
{
    // Show error message.
}

2

如果您满足最低要求并使用Banang的代码,则可以检查是否不足。

但是,假设您检查内存,下一行开始操作,在这两行之间的时间内运行另一个占用内存的进程。那么,您将冒着出现内存不足异常的风险。


2

一个可能的解决方案是使用MemoryFailPoint类,并检查是否出现InsufficientMemoryException异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接