【发布时间】:2011-04-20 10:38:14
【问题描述】:
我们能否确定用于操作的足够内存的可用性?如果是,那怎么可能? 谢谢
【问题讨论】:
-
+1 好问题。但是,如果您区分物理内存和虚拟内存会有所帮助...
我们能否确定用于操作的足够内存的可用性?如果是,那怎么可能? 谢谢
【问题讨论】:
是的,你可以。
假设您知道该操作需要 100 MB。
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.
}
【讨论】:
可能的解决方法是使用MemoryFailPoint Class 并检查 InsufficientMemoryException
【讨论】:
如果您有最低要求并使用 Banang 的代码,您可以检查是否不够。
但是说你检查内存,下一行你开始你的操作,在这两行之间运行另一个进程开始吃内存。然后,您将面临内存不足异常的风险。
【讨论】:
不,您绝对不能这样做,因为您事先不知道该操作将消耗多少内存。如果您确切知道操作将消耗多少内存,您可以查询可用的系统内存并做出近似值,但不要依赖它。请记住,垃圾收集是非常不确定的,并且可能随时会打乱您的近似值。您可以随时收到OutOfMemoryException。
所以专注于编写高质量的代码而不是这个。
【讨论】: