C#Dictionary Loop Enhancment

Tot*_*oto 4 c# performance dictionary

我有一本约有一百万件物品的字典.我不断循环抛出词典:

    public void DoAllJobs()
    {
            foreach (KeyValuePair<uint, BusinessObject> p in _dictionnary)
            {
                if(p.Value.MustDoJob)
                    p.Value.DoJob();
            }
    }
Run Code Online (Sandbox Code Playgroud)

执行有点长,大约600毫秒,我想要deacrese它.这是约束:

  1. MustDoJob值大多数在两次调用DoAllJobs()之间保持不变
  2. MustDoJob值的60-70%== false
  3. MustDoJob有时会改变20万对.
  4. 某些p.Value.DoJob()无法同时计算(COM对象调用)
  5. 在这里,我不需要_dictionnary对象的关键部分,但我确实需要它在其他地方

我想做以下事情:

  • 并行化,但由于4,我不确定是否有效.
  • 从1和2开始对词典进行排序(并且停止想要找到第一个MustDoJob == false)但是我想知道3.会导致什么

我没有实现任何先前的想法,因为它可能是很多工作,我想先调查其他选项.所以...任何想法?

Rob*_*obV 5

我建议你的业务对象可以引发一个事件来指示当它MustDoJob变为true 时它需要做一个工作,你可以订阅该事件并在简单列表中存储对这些对象的引用,然后处理该列表的内容DoAllJobs()调用方法时