我们可以确定操作的足够内存空间吗?如果是,那该怎么办? 感谢
答案 0 :(得分:6)
不,你绝对不能这样做,因为你事先并不知道操作将消耗多少内存。无论如何,如果你确切地知道操作将消耗多少内存,你可以查询可用的系统内存并进行近似,但不要依赖它。请记住,垃圾收集是非常不确定的,可能会随时搞砸你的近似值。您可以随时获得OutOfMemoryException。
所以专注于编写质量代码而不是这个。
答案 1 :(得分:4)
为了检查可用内存,我建议您查看this,this,this,但基本上您只需要使用性能计数器并执行此操作:
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.
}