我试图通过让一个线程写入链接列表和另一个线程处理链接列表来加快速度。在.net中将线程优先级从低到高更改为:
由于某种原因,如果写入链接列表的方法将其设置为一个任务,并且从链接列表中读取一个低优先级的线程的方法,程序会以更快的速度完成。换句话说,我experiense fastests结果时做:
Task.Factory.StartNew(AddItems);
new Thread(startProcessingItems) { Priority = ThreadPriority.Lowest }.Start();
while(completed==false)
Thread.Sleep(0);
也许是因为第一个任务是做的比其他线程,这就是为什么一切作为一个整体将更快地完成,如果我设定的第二种方法低优先级这么多的工作。
反正现在我的问题是startProcessingItems
使用ThreadPriority =最低运行。我怎么能改变它的优先级最高?如果我在该方法中创建新的任务,它将以低优先级运行吗?基本上startProcessingItems以列表结束,一旦它有了这个列表,我想开始以最高优先级执行。
我有一个名为listLock的锁,每当我添加或删除一个使用锁的项目时。但我想我会使用blockingCollection来代替。 +1谢谢 –
@TonoNam Locking可以解决比赛条件问题,但BC会更好。它也可能会表现得更好,因为在大多数情况下新的Concurrent集合比锁定正常集合要好得多。 –
非常感谢。我从这里学到的东西比任何其他地方都要多。 –