多线程

Jam*_*ery 32 c# multithreading

我现在正在学习多线程,在C#中学习,但与所有学习一样,我喜欢学习最佳实践.目前该地区似乎模糊不清.我理解基础知识,我可以创建线程.

在创建多线程应用程序时,我应该注意什么.是否有任何我应该了解的规则或最佳实践?或者要记住什么以避免滑倒线?

谢谢你的回复.

Ree*_*sey 33

除了MSDN最佳实践,我还会添加:

  1. 不要自己创建线程.更喜欢使用ThreadPool(或新的任务并行库任务).管理自己的线程很少(如果有的话)是正确的设计决策.
  2. 在UI相关问题上要格外小心. Control.Invoke(Windows窗体)和Dispatcher.Invoke(WPF),或使用SynchronizationContext .Current with Post/Send
  3. 在适当的时候使用BackgroundWorker类.
  4. 尝试通过锁将同步保持在最低限度
  5. 确保同步所有需要同步的内容
  6. 在可能的情况下,在锁定时支持Interlocked类中的方法

一旦你变得更高级,并且正在尝试优化,还有其他需要寻找的东西:

  1. 注意虚假分享.这在使用数组时尤其成问题,因为每个数组写入数组中的任何元素都包含.NET中的边界检查,这实际上导致对元素0附近的数组的访问(在内存中的元素0之前).这可能导致性能上升.急剧下坡.
  2. 注意关闭问题,尤其是在循环情况下工作时.如果您在创建委托时关闭了错误范围内的变量,则可能会发生令人讨厌的错误.


Jus*_*ner 9

MSDN - 托管线程最佳实践

MSDN文章在触及危险区域并提供管理/解决这些领域的最佳实践方面做得非常好.


Aus*_*nen 5

因为我在另一个标签上打开了...

http://www.yoda.arachsys.com/csharp/threads/

我只有几章,但它是由Jon Skeet写的.