作者:手机用户2602897765 | 来源:互联网 | 2023-05-17 17:10
好的,我想出了什么,但我想知道这是最有效的方式.我需要为ram内存问题做这件事.
HashSet hsLinks = new HashSet();
List lstSortList = new List();
// fill hashset with millions of records
while (true)
{
string srLastitem = "";
foreach (var item in hsLinks)
{
srLastitem = item;
break;
}
lstSortList.Add(srLastitem);
hsLinks.Remove(srLastitem);
if (hsLinks.Count == 0)
break;
}
c#.net 4.5.2 wpf应用程序
1> i3arnon..:
看来你正试图将物品从中移动HashSet
到List
.如果是这种情况,只需将所有内容移动一次List.AddRange
并使用HashSet.Clear
以清空HashSet
:
lstSortList.AddRange(hsLinks);
hsLinks.Clear();
如果(如Vajura建议的那样)你担心要保留2份参考文献*,你可以改为移动批次而不是单个项目:
const int batchSize = 1000;
var batch = new string[batchSize];
do
{
var batchIndex = 0;
foreach (var link in hsLinks.Take(batchSize))
{
batch[batchIndex] = link;
batchIndex++;
}
if (batchIndex
使用适当大小的批次来解决内存问题.
*注意:参考大小为4或8字节(分别为32位和64位).当你将字符串(它们是.Net中的引用类型)添加到列表中时,你没有复制它们,只有引用(这些引用几乎可以忽略不计).
@Vajura不,`string`不是.Net中的结构.