我需要在 C# WinForms 中声明连续超过 20000 个项目的方阵。
我读到 32 位中 2GB .Net 对象大小限制,以及 64 位操作系统中的相同情况。
据我了解,唯一的答案是使用不安全的代码或使用 C++ 编译器构建的单独的库。
这个问题对我来说是值得的,因为 ushort[20000,20000] 比 2GB 小,但实际上我什至无法分配 700MB 的内存。我的限制是 650MB,我不明白为什么 - 我有 32 位 WinXP,内存为 3GB。
我尝试使用 Marshal.AllocHGlobal(700
我只发现很多人说使用不安全的代码,但我找不到如何在堆中声明 2-dim 数组的示例(任何堆栈都无法保存如此大量的数据)以及如何使用指针来使用它。
unsafe{} 括号内是纯 C++ 代码吗?
附言。请不要问为什么我需要这么大的数组......但如果你愿意 - 我需要分析文本(例如书籍)并找到很多索引。所以答案是 - 单词之间关系的矩阵
编辑:有人可以提供一个小在不安全代码中使用指针处理矩阵的示例。我知道在 32 位下不可能分配更多空间,但我花了很多时间在谷歌上搜索这样的例子,但什么也没找到
为什么需要巨大的二维阵列?例如,您可以使用锯齿状数组来模拟 -ushort[][]
- almost一样快,并且您不会达到相同的单个对象限制。当然,您仍然需要bucket-o-RAM,因此隐含x64...
ushort[][] arr = new ushort[size][];
for(int i = 0 ; i < size ; i++) {
arr[i] = new ushort[size];
}
除此之外,您可能还想看看稀疏数组、eta 向量以及所有这些爵士乐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)