【问题标题】:Do I need a Multi-threaded WPF application for this scenario?在这种情况下,我是否需要多线程 WPF 应用程序?
【发布时间】:2012-02-18 01:41:58
【问题描述】:

我需要一个在后台运行并在每个月的特定日期生成账单的应用程序/服务。 我浏览了很多文章,解释了 Windows 服务和计划任务应用程序之间的区别,并得出一个应用程序适合我的场景的结论。

话虽如此,我想知道我是否需要在我的应用程序中使用多线程,因为我理解多线程基本上是在执行长时间运行的任务时创建响应式 UI,但由于我的应用程序没有 UI,我是否需要实际上有多线程吗?

单线程应用程序从各种来源(例如数据库、Web 服务)获取数据和多线程应用程序(我们将每个任务分配到一个线程并最终集成所有输出)的性能是否存在差异?

【问题讨论】:

  • WPF 到底是如何适应这一切的?
  • @Reed Copsey,谢谢,即使是控制台应用程序也可以,但我的问题是多线程真的有必要吗?

标签: c# .net wpf multithreading


【解决方案1】:

通常,像这样的应用程序根本没有用户界面,在这种情况下,您的多线程基本原理可能毫无意义。

话虽如此,是否使用多个线程来处理数据完全是另一个问题。你可以,如果这样做有意义的话。如果这是一个将每月运行一次的应用程序,则将其保留为单线程可能同样容易,因为完成可能没有时间限制。

但是,如果您需要快速处理项目,那么线程化应用程序的各个部分可能是有意义的。

单线程应用程序从各种来源(例如数据库、Web 服务)获取数据和多线程应用程序(我们将每个任务分配到一个线程并最终集成所有输出)的性能是否存在差异?

通常,是的。这是引入线程的最常见原因——它允许您在更短的时间内完成更多工作。但是,它确实增加了相当多的复杂性(取决于场景)。

【讨论】:

  • 感谢您的回答,即使我将每个任务分配给每个线程,最后主线程也必须等到所有线程完成才能集成它吧?
  • @Coder323 通常,是的——不过,这完全取决于您的设计。您可能想看看:reedcopsey.com/series/parallelism-in-net4
  • +1。如果适合您的情况,请从单线程开始。 “性能是否有任何差异......”如果做得不好,单线程版本很容易最终变得更快。死锁在多线程情况下更容易遇到,而且它们不会让它变得更快:)。
  • @AlexeiLevenkov,很抱歉没能找到你,你是说性能上不会有任何差异,只是糟糕的设计会导致多线程出现更多问题?
  • @Coder323 他说要启动单线程,只有在你发现你真的需要时才添加线程。通过添加多线程部分(如果你做错了)很容易把事情搞砸,甚至让事情变慢,因为编写多线程代码很困难。
【解决方案2】:

如果这两种情况属实,您可能会从多线程程序中获得更快的响应时间:您有一个多核处理器,如今几乎每个人都这样做。可以按任何顺序从所有源中提取数据,并且使用一个线程访问该源不会将其与另一个线程锁定。

在这种情况下使用多个线程的最佳理由是如果您花费大量时间阻塞;等待其他东西回应。如果您正在以磁盘所能提供的速度从硬盘驱动器读取大量数据,那么拥有两个读取数据的线程不应该给您带来更快的速度。事实上,我认为它会慢一些。但是,如果您从套接字(互联网)获取大量数据,并且您的线程花费大量时间等待外部服务器响应(并且您没有使用所有带宽),那么多线程程序可以提高速度。

【讨论】:

  • 你对这两种情况是正确的。虽然不会互相锁定,但恐怕我必须使用单独的线程来集成所有这些任务线程。
猜你喜欢
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
相关资源
最近更新 更多