首页
学习
活动
专区
圈层
工具
发布

多线程
EN

Stack Overflow用户
提问于 2010-01-29 02:26:28
回答 5查看 4.5K关注 0票数 32

目前,我正在学习C#中的多线程,但和所有的学习一样,我喜欢学习最佳实践。目前,这一地区似乎很模糊。我了解基础知识,并且我可以创建线程。

在创建多线程应用程序时,我应该注意什么。有什么我应该知道的规则或最佳实践吗?或者有什么需要记住的,以避免以后的失误?

感谢您的回复。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-29 02:34:31

除了MSDN Best Practices之外,我还将添加:

  1. 不要自己制作线程。更喜欢使用ThreadPool (或新的Task Parallel Library。管理自己的线程很少是正确的设计决策。
  2. 会格外小心地处理与UI相关的问题。Control.Invoke (Windows窗体)和Dispatcher.Invoke (WPF),或者在带有Post/Send
  3. Favor的SynchronizationContext.Current中使用BackgroundWorker class when appropriate.
  4. Try将同步通过锁保持到最低限度
  5. 请确保同步所有需要锁定Interlocked class中的方法的内容(如果可能)会覆盖锁定

一旦你变得更高级,并试图进行优化,就需要寻找其他东西:

  1. 注意false sharing。这在处理数组时尤其有问题,因为每次数组写入数组中的任何元素时都会在.NET中包含边界检查,这实际上会导致对元素0附近(内存中元素0之前)的数组进行访问。这可能会导致perf。去走下坡路的dramatically.
  2. Beware闭包问题,特别是当工作在循环的情况下。如果在进行委托时在错误的作用域中关闭变量,可能会出现令人讨厌的错误。
票数 33
EN

Stack Overflow用户

发布于 2010-01-29 02:29:34

MSDN - Managed Threading Best Practices

这篇MSDN文章确实很好地触及了危险区域,并给出了管理/解决这些区域的最佳实践。

票数 9
EN

Stack Overflow用户

发布于 2010-01-29 02:35:30

因为我在另一个选项卡上打开了这个...

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

我只读了几章,但它是由Jon Skeet写的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2156879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档