64位VB.NET分配> 2GB的RAM(.NET错误?)

我有一个64位的VB.NET应用程序,并希望分配一个> 2GB的缓冲区。

在下面的代码中,“new”和“ReDim”都抛出“OverflowException”。

当这些函数只接受带符号的32位值时,如何分配> 2GB的缓冲区?

(这可能在C#中?)

编辑 – 我正在运行带有4GB RAM的WinXP 64。

昏暗宽度As Long = 19005
昏暗高度As Long = 32768

 Dim buffer()By Byte = New Byte((width * height * 4) -  1){}

昏暗的大小As Long =(width * height * 4) -  1
 ReDim缓冲区(大小)

显然,即使在64位操作系统上运行的64位.net应用程序,也不可能分配超过2GB的空间。

我发现这非常令人失望,完全不考虑64位应用程序和操作系统的用途。 我正在处理巨大的图像,并希望能够同时处理RAM中的原始字节。 现在我必须实现分页算法来将块限制为2GB。

嘿,微软,你在即将发布的.NET版本中解决了这个问题吗? 是的,我说修复。 那是因为它破了。 当你做这样愚蠢的事情时,你怎么期望64位应用程序起飞。 (你能告诉我我很生气 。)谢谢你的倾听。

链接

http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx

我认为UnmanagedMemoryStream可以满足您的需求。 用于UnmanagedMemoryStream的MSDN doc

我认为在垃圾收集环境中分配大量内存是一个坏主意,因为大多数垃圾收集器都针对小型和短期对象进行了优化。 因此,对于非常大的对象,使用原始内存通常是更好,更高性能的解决方案。

以下工作[理论上](C#语法):

Array.CreateInstance(typeof(int[]), 0L); 

编辑:创建一个具有固定大小的1GB数组分配数组的类型。 您可以通过class次在Item属性中重新编制索引。

您可能必须使用内存映射文件,请查看MapViewOfFile函数。