C# 如何预测失忆?

C# 如何预测失忆?,c#,out-of-memory,C#,Out Of Memory,在我的C#程序中,我执行各种消耗内存的操作。根据当前可用的内存量和各种非恒定情况,程序会在不同阶段失败,并出现OutOfMemoryException 我想在某个时候停止处理,因为在不久的将来,程序或多或少会因为OOM而失败 然而,这方面没有固定的阈值;其他用户可能有更多(或更少)的内存,另一个操作系统有其特定的内存等等 我不想只是检查软件消耗超过500MB,因为这可能是太高或太低的限制 在.NET中是否有可靠的方法来预测即将到来的OOM?MemoryFailPoint应该做您想做的事情 到目前

在我的C#程序中,我执行各种消耗内存的操作。根据当前可用的内存量和各种非恒定情况,程序会在不同阶段失败,并出现OutOfMemoryException

我想在某个时候停止处理,因为在不久的将来,程序或多或少会因为OOM而失败

然而,这方面没有固定的阈值;其他用户可能有更多(或更少)的内存,另一个操作系统有其特定的内存等等

我不想只是检查软件消耗超过500MB,因为这可能是太高或太低的限制


在.NET中是否有可靠的方法来预测即将到来的OOM?

MemoryFailPoint应该做您想做的事情


到目前为止,我观察到的许多OOM异常都是由于使用内存泄漏或第三方组件编写的应用程序不正确造成的。考虑使用一个数据结构<强>优化< /强>操作。< /P>
检测OOM非常困难,因为存在随机抛出的对象。也许您可以使用MemoryFailPoint和性能计数器(可用内存)来确保有足够的可用内存。

排序的答案是,这可能不是最好的解决方案-而不是预测内存将耗尽的时间并尝试采取措施,您可能应该尝试减少应用程序的内存消耗,或者等到抛出异常后再清理

每当.Net运行时无法分配刚刚请求的内存时,就会引发内存不足异常-这可能是因为计算机的物理内存不足,交换文件被禁用(或者计算机的磁盘空间不足),也可能是因为进程的虚拟内存空间过于分散,无法分配所需的内存块(处理大型对象时可能会发生这种情况)。预测这将是相当困难的


在开始使用大量内存的操作之前,可以使用该类检查是否有一定数量的内存可用,但是该类不能保证在操作期间内存仍然可用,因此应用程序仍可能因OOM异常而失败。虽然该类在某些情况下有助于减少OOM异常(进而避免损坏应用程序状态),但它可能不是解决问题的“灵丹妙药”。

我想说,您应该在出现问题之前跟踪内存泄漏。听起来您有一个可以而且应该修复的问题,而不是逃避。建议的dupe有一个非常相似的标题,但有一个完全不同的主题。这不是内存泄漏,这在对多个图像执行一些图像密集型操作时是正常的。减少内存消耗是一个明显的建议,但不幸的是,考虑到正在解决的任务,这相当困难。感谢MemoryFailPoint的建议。减少内存消耗是一个显而易见的建议,但不幸的是,考虑到要解决的任务,这相当困难。感谢MemoryFailPoint的建议。