确定操作的足够内存的可用性

时间:2010-10-03 10:02:18

标签: c# asp.net memory

我们可以确定操作的足够内存空间吗?如果是,那该怎么办? 感谢

5 个答案:

答案 0 :(得分:6)

不,你绝对不能这样做,因为你事先并不知道操作将消耗多少内存。无论如何,如果你确切地知道操作将消耗多少内存,你可以查询可用的系统内存并进行近似,但不要依赖它。请记住,垃圾收集是非常不确定的,可能会随时搞砸你的近似值。您可以随时获得OutOfMemoryException

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

答案 1 :(得分:4)

为了检查可用内存,我建议您查看thisthisthis,但基本上您只需要使用性能计数器并执行此操作:

PerformanceCounter pc = new PerformanceCounter("Memory","Available Bytes");
long availableMemory = Convert.ToInt64(pc.NextValue());
Console.WriteLine("Available Memory: {0}", availableMemory);

但是,如果您不知道操作需要多少内存,那么检查可用内存对您没有帮助。

答案 2 :(得分:2)

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

但是说你检查内存,下一行你开始你的操作,在这两行之间的时间运行另一个进程启动吃内存。然后,您将面临内存不足的风险。

答案 3 :(得分:2)

可能的解决方法是使用MemoryFailPoint Class并检查InsufficientMemoryException

答案 4 :(得分:2)

是的,你可以。
假设您知道该操作需要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.
}