|
1
5
除此之外-你可能想看看稀疏数组,eta向量,以及所有这些。 |
|
|
2
4
在32位窗口中,即使2Gb分配也无法接近的原因是,CLR中的数组是在连续内存中布局的。在32位Windows中,地址空间非常有限,在进程的虚拟地址空间中找不到像2Gb这样的漏洞。您的实验表明,可用地址空间的最大区域是650Mb。移动到64位Windows至少应该允许您使用完整的2Gb分配。 请注意,32位Windows上的虚拟地址空间限制与计算机中的物理内存量无关,以3Gb为例。相反,限制是由CPU用来寻址内存地址的位数引起的。32位Windows使用32位来访问每个内存地址,这使得总的可寻址内存空间为4gb。默认情况下,Windows为自己保留2Gb,并为当前运行的进程提供2Gb,因此您可以看到为什么CLR找不到2Gb分配。通过一些技巧,您可以更改操作系统/用户分配,使Windows只为自己保留1Gb,并为正在运行的进程提供3Gb,这可能会有所帮助。然而,在64位窗口中,分配给每个进程的可寻址内存会跳到8 TB,因此在这里,CLR几乎肯定能够为阵列使用全部2Gb分配。 |
|
|
3
2
即使正确设置索引,在我的电脑上创建超过4亿条记录所需的时间也只有1个小时,这对我来说并不重要。 然后我运行算法来处理那个矩阵(需要两次才能连接同一个表!)在它工作了半个多小时后,它甚至没有迈出一步。 从那以后,我明白了唯一的方法就是找到一种只在内存中使用这种矩阵的方法,然后再回到C。 我创建了试验应用程序来测试内存分配过程,并使用不同的结构来确定分配过程在何处停止。 650MB 在32位WinXP下。 700兆。 我使用了锯齿状数组[],而不是单个2维数组[],结果如下: 在发布模式下编译为32位app-WinXP 32位3GB phys。记忆- 1.45GB --我用来测试的应用程序的来源附在这篇文章后面。 我在这里找不到如何附加源文件,所以只需描述设计部分,并把这里的手册代码。 创建WinForms应用程序。 使用默认名称设置控件: 在.cs文件中添加下一个代码并运行。
这个问题为我解决了。伙计们,先谢谢你们! |
|
|
5
0
对于OutOfMemoryException,请阅读以下线程(特别是nobugz和Brian Rasmussen的回答):
|
|
|
6
0
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |