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