如何创建一个拥有超过3亿个数据的数组
本文关键字:3亿 数组 拥有超过 数据 何创建 创建 一个 | 更新日期: 2023-09-27 17:49:49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace testes
{
class Program
{
static void Main(string[] args)
{
Int64[] a = new Int64[300000000];
a[0] = 10;
}
}
}
运行这段代码后,我收到一个System。OutOfMemoryException,但是我的电脑有8g的内存。你能帮帮我吗?
我是c#的初学者。我已经将编译目标cpu更改为x64,认为这样就足够了。谢谢Luc
http://msdn.microsoft.com/en-us/library/ms241064(v=vs.110).aspx
默认情况下,当您在64位Windows操作系统上运行64位托管应用程序时,您可以创建一个不超过2gb的对象。然而,在。net Framework 4.5中,你可以增加这个限制。有关更多信息,请参见gcAllowVeryLargeObjects元素。
拆分你的数组或把它放在你的配置:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
您的第一个错误是将数据类型设置为Int64
。整数越多,占用的空间就越少。
第二,你甚至不能存储3亿个字符。这个太大了。当你想操作如此庞大的数据时,你有两个选择:
- 您可以创建数据库并对其进行操作。
- 您可以将数据写入文本文件并读取整数
这两种方法都有点复杂,特别是您需要特殊的方法来访问文本文件中的随机整数。例如,你必须写一个方法来迭代所有的行,直到你得到你想要的整数等等。
我给你的建议是"使用数据库"。
Edit:您的物理内存与分配给编译器的内存不同。另外,3亿个64位数据对于一个块来说太大了。