【发布时间】:2014-09-30 14:45:03
【问题描述】:
我在创建数组时收到SystemOutOfMemoryException。然而我的数组does not 的length 超过了Int32.MaxValue。
这是代码(请不要判断代码,它不是我的代码至少 7 岁)
Dim myFileToUpload As New IO.FileInfo(IO.Path.Combine(m_Path, filename))
Dim myFileStream As IO.FileStream
Try
myFileStream = myFileToUpload.OpenRead
Dim bytes As Long = myFileStream.Length //(Length is roughly 308 million)
If bytes > 0 Then
Dim data(bytes - 1) As Byte // OutOfMemoryException is caught here
myFileStream.Read(data, 0, bytes)
objInfo.content = data
End If
Catch ex As Exception
Throw ex
Finally
myFileStream.Close()
End Try
根据这个问题“SO Max Size of .Net Arrays”和这个问题“Maximum lenght of an array”,最大长度是2,147,483,647 elements Or Int32.MaxValue,而maximum size是2 GB
所以我的总数 length of my array is well within the limits(3.08 亿 my size is way smaller 然后显示 2 GB(文件大小为 298 mb)。
问题:
所以我的问题是,关于数组还有什么可能导致MemoryOutOfMemoryException?
注意:对于那些想知道服务器仍然有一些 10gb 可用内存空间的人
注意 2: 在dude's advice 之后,我在几次运行中监控了 GDI 对象的数量。进程本身永远不会超过 1500 个对象的计数。
【问题讨论】:
-
一个
OutOfMemoryException与数组长度无关。 -
@TimSchmelter 完全正确
-
发生在该特定行的原因是什么?
-
您的应用程序中的
data是什么? -
@dude 将尝试监控 GDI 对象的数量。我会在这里发布结果。