我知道可以添加到List中的项目数量有限制(基本上是int.MaxValue),但在日常场景中使用的合理数量是多少--100k,500k,100万?
我正在使用DataReader并一次向List添加一个字符串,然后将这些元素作为批处理。我希望通过使批量过大来确保我不会过多地限制内存限制。
答案 0 :(得分:6)
另一种方法是返回IEnumerable(不是List)并使用yield
关键字。这不会消耗列表的额外内存。
public IEnumerable<string> MyBigList(DataReader reader)
{
while (reader.Read())
{
yield return (string) reader["SomeField"];
}
}
在过去,这被称为共同例程,在C#中它被称为迭代器。有关迭代器和yield
的详细信息,请参阅MSDN。
处理字符串
foreach (var s in MyBigList(reader))
{
// do something with s
}
答案 1 :(得分:1)
这取决于。
字符串数量大小背后的主要思想是默认情况下每个字符占用2个字节的内存。
一些注意事项:
List
,那么它将呈指数级增长。 O(N)
操作。您可能希望根据您的问题更改已使用的集合类型或使用数据库。 List
。 在大多数情况下,&#34; List
项目的合理数量是多少?#34;问题不像
那样重要
&#34;这是否合理使用List
?&#34; 。
内存中动态大小的普通集合(即List
)在不同的使用场景中可能有用或无用,我们无法知道哪一个是您的情况(特别是没有您的代码)。 / p>