【问题标题】:Determining the availability of sufficient memory for an operation确定用于操作的足够内存的可用性
【发布时间】:2011-04-20 10:38:14
【问题描述】:

我们能否确定用于操作的足够内存的可用性?如果是,那怎么可能? 谢谢

【问题讨论】:

  • +1 好问题。但是,如果您区分物理内存和虚拟内存会有所帮助...

标签: c# asp.net memory


【解决方案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.
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        不,您绝对不能这样做,因为您事先不知道该操作将消耗多少内存。如果您确切知道操作将消耗多少内存,您可以查询可用的系统内存并做出近似值,但不要依赖它。请记住,垃圾收集是非常不确定的,并且可能随时会打乱您的近似值。您可以随时收到OutOfMemoryException

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-12
            • 1970-01-01
            • 2013-12-26
            • 1970-01-01
            • 2010-12-07
            相关资源
            最近更新 更多