C# 列表的合理大小<;参考类型>;记性

C# 列表的合理大小<;参考类型>;记性,c#,list,memory,size,buffer,C#,List,Memory,Size,Buffer,我知道在C#中,列表的大小有限制(如前所述) 假设我的硬件允许,如果我只是让我的列表在内存中增长并从那里使用它,显然只要它不超过它的容量,这会是一件坏事吗?我觉得这样做有点淘气。我希望我的机器能在RAM中运行几次 如果没有,什么是合理的大小来限制我的列表,然后推送到数据库?我的用例将包括异步(并且线程安全地)将引用类型附加到列表中,以及根据它们的属性(例如基于时间的)查询(使用Linq)一组数据。该列表基本上是一个时间序列(即带有时间戳的数据对象)。我希望能够对数据进行流式分析(如移动平均),以

我知道在C#中,列表的大小有限制(如前所述)

假设我的硬件允许,如果我只是让我的列表在内存中增长并从那里使用它,显然只要它不超过它的容量,这会是一件坏事吗?我觉得这样做有点淘气。我希望我的机器能在RAM中运行几次

如果没有,什么是合理的大小来限制我的列表,然后推送到数据库?我的用例将包括异步(并且线程安全地)将引用类型附加到列表中,以及根据它们的属性(例如基于时间的)查询(使用Linq)一组数据。该列表基本上是一个时间序列(即带有时间戳的数据对象)。我希望能够对数据进行流式分析(如移动平均),以及基于时间的查找,这可能会返回整个列表

假设我的列表中最大的类对象(即引用类型)约为300-500万

更新:


作为参考,我之前已经将作为JSON附加到列表的对象写入文本文件(每行1个JSON)。8658项的.txt文件大小仅为1570KB。将其外推到5m对象接近1GB。

在.NET中对
列表的大小没有限制(除了您提供的链接中描述的硬限制)。除此之外,列表将在内存中增长,直到内存耗尽并抛出
OutOfMemoryException
。这比达到硬编码限制的可能性更大

不从集合中删除对象是C#代码中内存泄漏的原因之一。尤其是当集合是静态的时,这将确保它在卸载AppDomain之前一直有效


我建议您跟踪对象,并在不需要时尽快将其删除。

在具有16gb ram的机器上,50万个项目大小的列表可能是可以接受的,而在具有512mb ram的系统上则完全不可用。你的用例是什么?啊哈,我希望有500万个对象作为上限来定义一个列表的功能(我相信它可以支持这样大小的项目计数),假设你引用的每个对象(和图形)只有微不足道的512字节,如果你有500万,那么已经是2.4gb了。如果您的对象非常复杂(千字节或更多),那么您的系统可能会疯狂地交换,或者您可能会得到一个
OutOfMemoryException
。我刚刚更新了我的问题,使您的注释更相关:)这听起来像是XY问题。在32位的应用程序中,几乎总是会在达到列表大小的硬上限之前用完(未分段的)内存。在64位应用程序中,情况正好相反,在达到单个对象的极限之前,几乎不可能耗尽未分段的虚拟内存。