作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到了 SystemOutOfMemoryException
创建数组时。然而length
我的阵列 does not
超过 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
2,147,483,647 elements Or Int32.MaxValue
和
maximum size
是
2 GB
length of my array is well within the limits
(3.08 亿 < 20 亿)以及
my size is way smaller
然后显示 2 GB(文件大小为 298 mb)。
MemoryOutOfMemoryException
?
最佳答案
字节数组是序列中的字节。这意味着您必须分配如此多的内存,因为您的数组长度在一个块中。如果您的内存碎片比系统大,即使您有 X GB 的可用内存,系统也无法分配内存。
例如,在我的机器上,我不能在一个数组中分配超过 908 000 000 个字节,但是如果它存储在更多数组中,我可以毫无问题地分配 100 * 90 800 000:
// alocation in one array
byte[] toBigArray = new byte[908000000]; //doesn't work (6 zeroes after 908)
// allocation in more arrays
byte[][] a=new byte[100][];
for (int i = 0 ; i<a.Length;i++) // it works even there is 10x more memory needed than before
{
a[0] = new byte[90800000]; // (5 zeroes after 908)
}
关于.net - 创建数组时出现 SystemOutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181156/
我收到了 SystemOutOfMemoryException创建数组时。然而length我的阵列 does not超过 Int32.MaxValue . 这是代码(请不要判断代码,它不是我的代码至少
Summary 这个问题是为了构建一个简单的电子表格 API,同时保持它对那些熟悉 Excel 的人的用户友好的愿望的后续。 综上所述,这个问题与以下两个有关: 1. How to implement
我是一名优秀的程序员,十分优秀!