为什么我得到间歇性系统.内存不足异常



为什么相同的代码有时会运行,有时会给我一个异常?

我只是在运行一个测试,查看内存中字符串的限制。我的整个主要.vb内容如下:

Module Main
Sub Main()
    teststring()
End Sub
Sub teststring()
    Dim strC As String
    strC = New String("C"c, 588060752)
End Sub
End Module

有时会运行良好(通常但并不总是在我一分钟左右没有运行它时),而其他时候会失败并出现异常。

"内存不足"可能发生在以下情况下

  1. 实际上没有足够的内存,例如,您请求了一个将消耗一万亿字节的字符串。 我认为您不能购买具有TB级RAM的服务器,现在还不能。 实际上,我相信 CLR 无论如何都将大型对象限制为 2 GB。

  2. 您有足够的内存,但其中一些内存正由其他进程或进程中的其他对象使用,因此没有足够的可用内存。

  3. 您有足够的可用内存,但堆是碎片的,并且任何一个位置都没有足够的空间来分配连续内存。

  4. 您超出了硬系统限制(例如,分配的 StringBuilder 超出了其最大大小)。

这些是重要原因。 更多细节可以在 OutOfMemoryException 的文档中找到。

最新更新