我有一个问题。据我所知,在.net中内存不足的异常可在下列3个方案中提出.Net中创建的内存不足异常对象在哪里?
- 拳击
- 创建阵列
- 创建对象
通常的它时引发托管堆碎片化或没有足够空间容纳对象。我的问题如果没有足够的托管堆,那么OutOfMemoryException对象是在哪里创建的?它不是在托管堆上创建的? .Net框架如何确保堆中总是有足够的空间来创建OutOfMemoryException对象?
请帮忙。我可能会误解某些东西。
我有一个问题。据我所知,在.net中内存不足的异常可在下列3个方案中提出.Net中创建的内存不足异常对象在哪里?
通常的它时引发托管堆碎片化或没有足够空间容纳对象。我的问题如果没有足够的托管堆,那么OutOfMemoryException对象是在哪里创建的?它不是在托管堆上创建的? .Net框架如何确保堆中总是有足够的空间来创建OutOfMemoryException对象?
请帮忙。我可能会误解某些东西。
堆在.NET
框架通过.NET
框架本身管理,所以保持必要的空间用于提高这些例外。例如,对于StackOverflow
也是如此。
事实上这些异常都无法通过潜在客户进行处理,或者是危险来处理它们,当你的应用程序在这样的条件下(在OutOfMemory
例外的情况下)。还有一些应用程序可以处理它,并以某种方式尝试“安全”的客户端,但其结果并不能保证,只是尽力而为。
当您的应用程序启动时,运行时会预先创建这些例外并将它们存储在一个静态列表中。如果需要抛出异常,则从此列表中检索并抛出。这种情况发生在OutOfMemoryException
和StackOverflowException
以及其他几个可能会在稍后创建问题的重要例外情况中。
.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
他们有很多的细节和更多的参考资料,为您追求
Delphi只是在应用程序启动时分配它。 – CodesInChaos
http://www.codeproject.com/Articles/483475/Memory-Limits-in-a-NET-Process将帮助你理解.Net中的内存分配 – Dhawalk