首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# - ConcurrentBag与List的性能比较

C# - ConcurrentBag与List的性能比较
EN

Stack Overflow用户
提问于 2016-02-16 02:30:27
回答 3查看 10.8K关注 0票数 7

前言:我之所以问这个问题,是因为我没有一个环境(足够大的数据集+计算能力)来以可靠的方式测试它。

问:给定一个加载了数十亿项的Concurrent Bag,由单个线程访问/使用,它的性能是否类似于列表(换句话说,https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110%29.aspx)?Concurrent Bag上的枚举,其性能是否高于List<T>上的枚举

EN

Stack Overflow用户

发布于 2019-07-27 00:37:24

但是,如果需要删除项,ConcurrentBag的速度要比列表快得多

代码语言:javascript
运行
复制
void Main()
{
    ConcurrentBag<int> bag = new ConcurrentBag<int>();
    ConcurrentStack<int> stack = new ConcurrentStack<int>();
    ConcurrentQueue<int> q = new ConcurrentQueue<int>();
    List<int> list = new List<int>();

    Stopwatch sw = new Stopwatch();
    int count = 100000;
    sw.Start();
    for (int i = 0; i < count; i++)
    {
        bag.Add(i);
    }
    for (int i = 0; i< count; i++)
    {
        bag.TryTake(out _);
    }
    sw.Elapsed.Dump("BAG");
    sw.Start();
    for (int i = 0; i < count; i++)
    {
        stack.Push(i);
    }
    for (int i = 0; i < count; i++)
    {
        stack.TryPop(out _);
    }
    sw.Elapsed.Dump("Stack");
    sw.Start();
    for (int i = 0; i < count; i++)
    {
        q.Enqueue(i);
    }
    for (int i = 0; i < count; i++)
    {
        q.TryDequeue(out _);
    }
    sw.Elapsed.Dump("Q");
    sw.Start();
    for (int i = 0; i < count; i++)
    {
        list.Add(i);
    }
    for (int i = 0; i < count; i++)
    {
        list.RemoveAt(0);
    }
    sw.Elapsed.Dump("list remove at 0");
    sw.Start();
    for (int i = 0; i < count; i++)
    {
        list.Add(i);
    }
    for (int i = 0; i < count; i++)
    {
        list.RemoveAt(list.Count -1);
    }
    sw.Elapsed.Dump("list remove at end");
}

结果:

BAG 00:00:00.0144421

堆栈 00:00:00.0341379

Q 00:00:00.0400114

在0 00:00:00.6188329删除列表

在end 00:00:00.6202170删除列表

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35416565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档