代码之家  ›  专栏  ›  技术社区  ›  Muhammad Akhtar

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

  •  7
  • Muhammad Akhtar  · 技术社区  · 15 年前

    我们能确定一个操作是否有足够的内存可用吗?如果是,那怎么办? 谢谢

    5 回复  |  直到 15 年前
        1
  •  6
  •   Darin Dimitrov    15 年前

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

    所以,把注意力放在编写高质量的代码上,而不是这个。

        2
  •  4
  •   Community Mohan Dere    9 年前

    this , this this ,但基本上您只需使用性能计数器并执行以下操作:

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

        3
  •  2
  •   Shiraz Bhaiji    15 年前

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

    但是假设你检查内存,下一行你开始你的操作,在这两行之间运行另一个进程开始消耗内存。然后您将面临内存不足异常的风险。

        4
  •  2
  •   Zain Ali    14 年前

    一个可能的解决方法是使用 MemoryFailPoint Class 并检查内存不足异常

        5
  •  2
  •   z-boss    14 年前


    假设您知道该操作需要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.
    }