1

我有一个 ArrayList,其中存储了 100,000 多个数字。每个数字的长度为 10 位或更小。程序本身有数据输入,它循环通过用户输入来查看他们的任何数字是否已经在使用if ArrayList.Contains(userinput).

看起来,当拥有这种大小的 ArrayList 时,会使用大量内存。是否有更快的方法来运行它,例如数据库或If TextFile.Contains(Line)

4

3 回答 3

7

您应该使用 aList<T>来避免装箱并节省内存。
使用 aHashSet<T>会快得多,但会比 a 使用更多的内存List<T>

根据您的具体情况,数据库可能是最好的。

于 2012-04-18T15:47:34.177 回答
4

另一种解决方案可能是将100.000+元素数组按排序顺序排列并用于BinarySearch查找感兴趣的元素。

Mush 会更快Contains,而且您不需要分配字典,因此不会消耗额外的内存。

所有这些东西都是衡量的主题,以便在您的具体场景中为您选择正确的选择。

于 2012-04-18T15:51:13.393 回答
0

一旦您有并发读/写场景,请考虑使用System.Collections.Concurrent.ConcurrentDictionary<,>. 它应该提供更好的性能,因为它不需要锁定它的操作。但是,如果操作比简单的添加/获取/删除更复杂,那么您仍然需要锁并且 aHashSet<>应该更快(正如 SLaks 所建议的那样)。

于 2012-04-18T16:56:12.963 回答