为什么我会间歇性 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" 可以在
时发生
您确实没有足够的内存,例如您请求的字符串将消耗一万亿字节。我认为您现在还不能购买具有 TB 级 RAM 的服务器。实际上,我相信 CLR 无论如何都会将大对象限制为 2 GB。
您有足够的内存,但其中一些正在被其他进程使用,或者您进程中的其他对象正在使用,因此没有足够的可用内存。
您有足够的空闲内存,但是堆 fragmented 并且任何一个地方都没有足够的空间来分配连续的内存。
您超出了硬性系统限制(例如,分配超过其最大大小的 StringBuilder)。
这些是主要原因。更多细节可以在 documentation for 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" 可以在
时发生您确实没有足够的内存,例如您请求的字符串将消耗一万亿字节。我认为您现在还不能购买具有 TB 级 RAM 的服务器。实际上,我相信 CLR 无论如何都会将大对象限制为 2 GB。
您有足够的内存,但其中一些正在被其他进程使用,或者您进程中的其他对象正在使用,因此没有足够的可用内存。
您有足够的空闲内存,但是堆 fragmented 并且任何一个地方都没有足够的空间来分配连续的内存。
您超出了硬性系统限制(例如,分配超过其最大大小的 StringBuilder)。
这些是主要原因。更多细节可以在 documentation for OutOfMemoryException.
中找到