我可以向List添加多少个值?
例如:
List<string> Item = runtime data
Run Code Online (Sandbox Code Playgroud)
数据的大小不固定.它可能是10 000或超过1 000 000.我用谷歌搜索但没有找到确切的答案.
我正在测试.Net中的集合有多大.从技术上讲,任何集合对象都可以增长到物理内存的大小.
然后,我测试的服务器,它具有16GB内存下面的代码,运行Windows 2003 Server和Visual Studio 2008,我测试两个F#和C#代码,看了看任务管理器运行时.我可以看到,在增加2GB内存之后,该程序因内存不足异常而崩溃.我确实在属性页面中将目标平台设置为x64.
open System.Collections.Generic
let d = new Dictionary<int, int>()
for i=1 to 1000000000 do
d.Add(i,i)
Run Code Online (Sandbox Code Playgroud)
我对C5集合库进行了相同的测试.结果是C5中的字典可能耗尽整个内存.代码使用C5:
let d = C5.HashDictionary<int, int> ()
for i=1 to 1000000000 do
d.Add(i,i)
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?
是否存在可以存储在List中的元素的限制?或者你可以保持添加元素直到你内存不足?
我正在编写.NET在Windows Server 2016上运行的应用程序,这些应用程序会对大量文件的大量内容执行http操作.这可以大大加快下载过程,因为您可以并行下载它们.不幸的是,一旦下载它们,将它们全部重新组合在一起需要相当长的时间.
有2-4k个文件需要组合.这将运行的服务器有很多内存,靠近800GB.我认为使用MemoryStreams存储下载的部分直到它们可以顺序写入磁盘是有意义的,但我只能2.5GB在出现System.OutOfMemoryException错误之前消耗大约内存.服务器有数百GB可用,我无法弄清楚如何使用它们.
我一直在研究一些与字节数组的最大大小相关的问题(此处和此处),并一直在处理一些数组并得到一些我不太理解的结果。我的代码如下:
byte[] myByteArr;
byte[] myByteArr2 = new byte[671084476];
for (int i = 1; i < 2; i++)
{
myByteArr = new byte[671084476];
}
Run Code Online (Sandbox Code Playgroud)
这将编译并在执行时它将'System.OutOfMemoryException'在 的初始化时抛出一个异常myByteArr。如果我将 for 循环中的 2 更改为 1 或者我注释掉其中一个初始化(或myByteArr2)myByteArr,它将运行正常。
另外,byte[] myByteArr = new byte[Int32.MaxValue - 56];抛出相同的异常。
为什么编译 32 位时会出现这种情况?不是在2GB限制之内吗?
FileStream fs = File.OpenRead(fullFilePath);
try
{
Console.WriteLine("Read file size is : " + fs.Length);
byte[] bytes = new byte[fs.Length]; //// **error this line**
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
fs.Close();
return bytes;
}
finally
{
fs.Close();
}
Run Code Online (Sandbox Code Playgroud)
read file size 2,885,760 KB.是错误//
**Arithmetic operation resulted in an overflow.**