我有一个处理大量数据的应用程序,我想可能会有时会抛出OutOfMemoryException
异常(半年来,我没有遇到过任何异常,但我只是想了解一下)。根据我的调查,发生这种异常后,我无法继续执行我的程序。
有没有什么好的模式来处理这样的异常,特别是与IDisposable
类一起使用的情况?
我有一个处理大量数据的应用程序,我想可能会有时会抛出OutOfMemoryException
异常(半年来,我没有遇到过任何异常,但我只是想了解一下)。根据我的调查,发生这种异常后,我无法继续执行我的程序。
有没有什么好的模式来处理这样的异常,特别是与IDisposable
类一起使用的情况?
没有好的模式,OOM是一个可随时发生的令人讨厌的异常。这使它几乎成为异步异常。处理它的唯一机会是当您的代码被结构化为同时分配大量内存时。因此,您将有一些机会回退并撤销程序状态,就好像什么都没有发生过。
您需要设计您的程序,使其永远不需要分配超过所有可用虚拟内存的一半,即32位机器上的1 GB。龙生活在那个数量之外,您的程序将在分配90 MB或更少的内存时失败,即使还有500 MB未使用的虚拟内存。这是由地址空间碎片化引起的问题。如果您经常跨越此阈值,则需要切换到64位操作系统。