相关疑难解决方法(0)

如何实现像.NET的ConcurrentBag <T>这样的类?

我发现自己ConcurrentBag<T>对即将推出的.NET 4.0框架中的类的存在非常感兴趣:

当订购无关紧要时,袋子可用于存放物品,与套装不同,袋子支持重复.

我的问题是:这个想法如何实施?大多数集合我熟悉基本量(引擎盖下)某种形式的阵列,其中为了不得"的事情,"但有一个订单(这就是为什么,尽管它并不需要,枚举几乎总是要经过一个不变的集合,可以是List,Queue,Stack,等以相同的顺序).

如果我不得不猜测,我可能会建议在内部它可能是一个Dictionary<T, LinkedList<T>>; 但实际上这似乎是非常可疑的,因为将任何类型T用作关键都没有意义.

我期待/希望的是,这实际上是一个已经在某处被"弄清楚"的既定对象类型,并且知道这种已建立类型的人可以告诉我它.这对我来说太不寻常了 - 其中一个概念在现实生活中很容易理解,但很难转化为可用的类作为开发人员 - 这就是为什么我对可能性感到好奇.

编辑:

一些响应者建议a Bag可以是内部哈希表的一种形式.这也是我最初的想法,但我预见到这个想法有两个问题:

  1. 当您没有针对相关类型的合适哈希码函数时,哈希表并不是那么有用.
  2. 简单地跟踪对象在集合中的"计数"与存储对象不同.

正如Meta-Knight建议的那样,也许一个例子可以使这更清楚:

public class ExpensiveObject() {
    private ExpensiveObject() {
        // very intense operations happening in here
    }

    public ExpensiveObject CreateExpensiveObject() {
        return new ExpensiveObject();
    }
}

static void Main() {
    var expensiveObjects = new ConcurrentBag<ExpensiveObject>();

    for (int i = 0; i < 5; i++) {
        expensiveObjects.Add(ExpensiveObject.CreateExpensiveObject()); …
Run Code Online (Sandbox Code Playgroud)

.net language-agnostic collections bag

12
推荐指数
1
解决办法
3010
查看次数

DataTable的线程安全性

我曾经读过这个答案ADO.NET DataTable/DataRow Thread Safety,并且无法理解一些东西.特别是我无法理解[2]文章.我需要使用什么样的包装?谁能举个例子?

另外我无法理解作者的意思是谈论级联锁和完全锁定.请举例.

c# datatable ado.net multithreading

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