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

时间:2017-01-23 21:53:46

标签: .net string out-of-memory

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

我正在运行测试,查看内存中字符串的限制。我的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

它有时会运行得很好(通常但并非总是在我一分钟左右没有运行它),而其他时间会因异常而失败。

1 个答案:

答案 0 :(得分:2)

时可能会出现“内存不足”
  1. 你实际上没有足够的内存,例如你请求了一个消耗万亿字节的字符串。我认为你不能购买带有太字节RAM的服务器。实际上,我认为CLR无论如何都将大对象限制为2 GB。

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

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

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

  5. 这些是很重要的原因。更多细节可以在documentation for OutOfMemoryException中找到。