我有一个问题。据我所知,.net内存异常可以在以下3个场景中引发
通常,当托管堆碎片化或没有足够的空间来容纳对象时,它会被引发。我的问题 如果托管堆不足,那么创建OutOfMemoryException对象在哪里? 它是否在托管堆上创建? .Net框架如何确保堆上始终有足够的空间来创建OutOfMemoryException对象?
请帮忙。我可能会误解某些东西。
答案 0 :(得分:3)
.NET
框架中的堆是由.NET
框架本身托管,因此它为提出此类异常提供了必要的空间。例如,StackOverflow
也是如此。
实际上,这两个异常都不可能被客户端处理,或者当你在这种情况下应用时(例如OutOfMemory
异常)处理它们是危险的。仍然有应用程序可以处理它并尝试安全"客户在某种程度上,但结果并不能保证,你只是尽力而为。
答案 1 :(得分:1)
当您的应用程序启动时,运行时会预先创建这些异常并将它们存储在静态列表中。如果需要抛出异常,则从该列表中检索并抛出异常。 OutOfMemoryException
和StackOverflowException
会发生这种情况,可能还有一些其他可能会在以后创建问题的关键异常。
答案 2 :(得分:0)
.Net Runtime在每个过程中为自己保留一些空间。这将有助于框架抛出像OutOfMemory这样的关键异常。
您可能还想阅读下面的.Net内存管理文章
http://www.codeproject.com/Articles/483475/Memory-Limits-in-a-NET-Process
Is there a memory limit for a single .NET process
他们有很多细节和更多参考资料供你追求