小编Tac*_*chy的帖子

为什么ConcurrentBag <T>在.Net(4.0)中这么慢?我做错了吗?

在我开始一个项目之前,我编写了一个简单的测试来比较来自(System.Collections.Concurrent)的ConcurrentBag相对于锁定和列表的性能.我非常惊讶ConcurrentBag比使用简单的List锁定慢10倍.据我所知,当读写器是同一个线程时,ConcurrentBag效果最好.但是,我没想到它的性能会比传统的锁更糟糕.

我已经运行了一个测试,其中有两个Parallel for循环写入和读取列表/包.然而,写入本身显示了巨大的差异:

private static void ConcurrentBagTest()
   {
        int collSize = 10000000;
        Stopwatch stopWatch = new Stopwatch();
        ConcurrentBag<int> bag1 = new ConcurrentBag<int>();

        stopWatch.Start();


        Parallel.For(0, collSize, delegate(int i)
        {
            bag1.Add(i);
        });


        stopWatch.Stop();
        Console.WriteLine("Elapsed Time = {0}", 
                          stopWatch.Elapsed.TotalSeconds);
 }
Run Code Online (Sandbox Code Playgroud)

在我的盒子上,这需要3-4秒才能运行,相比之下这段代码的0.5-0.9秒:

       private static void LockCollTest()
       {
        int collSize = 10000000;
        object list1_lock=new object();
        List<int> lst1 = new List<int>(collSize);

        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();


        Parallel.For(0, collSize, delegate(int i)
            {
                lock(list1_lock)
                {
                    lst1.Add(i);
                }
            });

        stopWatch.Stop();
        Console.WriteLine("Elapsed = {0}", 
                          stopWatch.Elapsed.TotalSeconds);
       }
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,进行并发读写并不能帮助并发包测试.我做错了什么还是这个数据结构真的很慢?

[编辑] - …

.net c# concurrency locking concurrent-collections

42
推荐指数
5
解决办法
3万
查看次数

为什么不(申请或[真假])在Clojure工作?

根据我对apply的理解,它解压缩列表并将元素转换为函数的参数.

我看到(apply + [1 2 3])按预期工作,即:它相当于(+ 1 2 3).

为什么(apply或[true false])无效?是不是等同于(或真假)?

clojure apply

20
推荐指数
2
解决办法
2058
查看次数

在Clojure中编写需要指针/引用的数据结构?

我一直在Clojure上玩玩具数据库,想要实现一个B + Tree.当我开始考虑它时,我意识到可能没有办法像Clojure中的其他节点那样使用指针/引用.对于像BST或许多其他树结构这样的东西并不重要,因为你需要的只是存储一个Node的孩子.但是我在B +树中做什么,我需要能够引用Node的兄弟?

在寻找解决方案时,我在Google网上论坛中发布了一篇关于如何在Clojure中实现双向链接列表的帖子,因为在Clojure中还有其他方法可以做.

我怎么办B +树呢?

clojure data-structures

6
推荐指数
1
解决办法
1974
查看次数

在模板中调用函数会导致 Angular2+ 中的性能问题吗?

Angular 的变更检测实现我还是比较习惯的,不清楚在模板中调用函数是否会导致性能问题。

例如,执行以下操作是否更糟:

<mat-tab-group>
  <mat-tab label="First"> {{ getFirstTab() }} </mat-tab>
  <mat-tab label="Second"> {{ getSecondTab() }} </mat-tab>
</mat-tab-group>
Run Code Online (Sandbox Code Playgroud)

比做:

<mat-tab-group>
  <mat-tab label="First"> {{ firstTabContent }}</mat-tab>
  <mat-tab label="Second"> {{ secondTabContent }}</mat-tab>
</mat-tab-group>
Run Code Online (Sandbox Code Playgroud)

关于什么:

<button *ngIf="shouldShowButton()" .... >   
Run Code Online (Sandbox Code Playgroud)

angular2-template angular

2
推荐指数
1
解决办法
642
查看次数