为什么我会间歇性 System.OutOfMemoryException?

Why do I get intermittent System.OutOfMemoryException?

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

我只是 运行进行测试,查看内存中字符串的限制。我的 Main.vb 全部内容如下:

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

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

"Out of memory" 可以在

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

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

  3. 您有足够的空闲内存,但是堆 fragmented 并且任何一个地方都没有足够的空间来分配连续的内存。

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

这些是主要原因。更多细节可以在 documentation for OutOfMemoryException.

中找到