我有一个 ArrayList,其中存储了 100,000 多个数字。每个数字的长度为 10 位或更小。程序本身有数据输入,它循环通过用户输入来查看他们的任何数字是否已经在使用if ArrayList.Contains(userinput)
.
看起来,当拥有这种大小的 ArrayList 时,会使用大量内存。是否有更快的方法来运行它,例如数据库或If TextFile.Contains(Line)
?
您应该使用 aList<T>
来避免装箱并节省内存。
使用 aHashSet<T>
会快得多,但会比 a 使用更多的内存List<T>
。
根据您的具体情况,数据库可能是最好的。
另一种解决方案可能是将100.000+
元素数组按排序顺序排列并用于BinarySearch
查找感兴趣的元素。
Mush 会更快Contains
,而且您不需要分配字典,因此不会消耗额外的内存。
所有这些东西都是衡量的主题,以便在您的具体场景中为您选择正确的选择。
一旦您有并发读/写场景,请考虑使用System.Collections.Concurrent.ConcurrentDictionary<,>
. 它应该提供更好的性能,因为它不需要锁定它的操作。但是,如果操作比简单的添加/获取/删除更复杂,那么您仍然需要锁并且 aHashSet<>
应该更快(正如 SLaks 所建议的那样)。