Ati*_*tik 4 c# arrays size biginteger
public double[] result = new double[ ??? ];
Run Code Online (Sandbox Code Playgroud)
我存储的结果和结果的总数大于2,147,483,647,即max int32.
我尝试过biginteger,ulong等,但他们都给了我错误.
如何扩展可以存储> 50,147,483,647结果(双)的数组的大小?
谢谢...
Cor*_*rey 11
2,147,483,648 doubles 的数组将占用16GB的内存.对某些人来说,这不是什么大不了的事.我有服务器,如果我分配一些这些数组,甚至不会打扰页面文件.这并不意味着它是个好主意.
当您处理大量数据时,您应该考虑最小化该过程对内存的影响.有几种方法可以解决这个问题,具体取决于您使用数据的方式.
如果您的数组是稀疏填充的 - 许多默认/空值以及实际有效/有用数据的百分比很小 - 那么稀疏数组可以大大减少内存需求.您可以编写各种实现来针对不同的分发概要进行优化:随机分布,分组值,任意连续组等.
适用于任何类型的包含数据,包括复杂类.有一些开销,所以当填充百分比很高时,实际上可能比裸阵列更糟糕.当然,您仍然会使用内存来存储您的实际数据.
将数据存储在磁盘上,FileStream为文件创建读/写,并将其封装在一个包装器中,使您可以像访问内存数组一样访问文件的内容.最简单的实现将为您提供从文件顺序读取的合理用途.随机读取和写入可能会降低您的速度,但您可以在后台执行一些缓冲以帮助缓解速度问题.
此方法适用于具有静态大小的任何类型,包括可以复制到文件中的一系列字节的结构.不适用于像字符串这样的动态大小的数据.
如果您需要处理动态大小的记录,稀疏数据等,那么您可以设计一种可以优雅地处理它的文件格式.然后,数据库可能是更好的选择.
与其他文件选项相同,但使用不同的机制来访问数据.有关System.IO.MemoryMappedFile如何使用.NET中的内存映射文件的详细信息,请参阅.
根据数据的性质,将其存储在数据库中可能对您有用.对于大量的doubles,这不太可能是一个很好的选择.在数据库中读取/写入数据的开销加上存储开销 - 每行至少需要一个行标识,对于大型记录集可能是一个BIG_INT(8字节整数),将数据的大小加倍球棒.添加索引,行存储等开销,您可以非常轻松地增加数据的大小.
数据库非常适合存储和操作复杂数据.这就是他们的目的.如果你有可变宽度的数据 - 字符串之类 - 那么数据库可能是你最好的选择之一.另一方面,它们通常不是处理大量非常简单数据的最佳解决方案.
无论您选择哪种方式,都可以创建一个IList<T>封装数据的兼容类.这让你写的没有任何需要知道代码如何存储数据,它只是什么是.
| 归档时间: |
|
| 查看次数: |
13700 次 |
| 最近记录: |