在.Net中创建的内存不足异常对象在哪里?

时间:2014-03-28 12:57:40

标签: c# memory-management garbage-collection

我有一个问题。据我所知,.net内存异常可以在以下3个场景中引发

  1. 拳击
  2. 创建数组
  3. 创建对象
  4. 通常,当托管堆碎片化或没有足够的空间来容纳对象时,它会被引发。我的问题 如果托管堆不足,那么创建OutOfMemoryException对象在哪里? 它是否在托管堆上创建? .Net框架如何确保堆上始终有足够的空间来创建OutOfMemoryException对象?

    请帮忙。我可能会误解某些东西。

3 个答案:

答案 0 :(得分:3)

.NET框架中的堆是由.NET框架本身托管,因此它为提出此类异常提供了必要的空间。例如,StackOverflow也是如此。

实际上,这两个异常都不可能被客户端处理,或者当你在这种情况下应用时(例如OutOfMemory异常)处理它们是危险的。仍然有应用程序可以处理它并尝试安全"客户在某种程度上,但结果并不能保证,你只是尽力而为。

答案 1 :(得分:1)

当您的应用程序启动时,运行时会预先创建这些异常并将它们存储在静态列表中。如果需要抛出异常,则从该列表中检索并抛出异常。 OutOfMemoryExceptionStackOverflowException会发生这种情况,可能还有一些其他可能会在以后创建问题的关键异常。

答案 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

他们有很多细节和更多参考资料供你追求