2010-10-03 40 views

回答

5

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

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

4

为了检查可用的内存,我建议在看thisthisthis,但基本上所有你需要做的是使用性能计数器,并做到这一点:

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

如果你不” t知道操作需要多少内存,但检查可用内存不会对您有所帮助。

2

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

但是说你检查内存,下一行开始你的操作,在这两行之间的时间运行另一个进程开始吃内存。然后你将冒险得到一个内存不足的例外。

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. 
} 
相关问题