热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何以最有效的方式迭代和删除hashset中的元素

如何解决《如何以最有效的方式迭代和删除hashset中的元素》经验,为你挑选了1个好方法。

好的,我想出了什么,但我想知道这是最有效的方式.我需要为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..:

看来你正试图将物品从中移动HashSetList.如果是这种情况,只需将所有内容移动一次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中的结构.
推荐阅读
author-avatar
手机用户2602897765
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有