2012-02-18 132 views
0

我需要一個應用程序/服務,在後臺運行,並在每個月的特定日期生成賬單。 我經歷了很多文章,解釋了Windows服務和計劃任務應用程序之間的區別,並得出結論:應用程序適合我的場景。我需要一個多線程WPF應用程序用於這種情況嗎?

話雖如此,我不知道我是否需要在我的應用程序中使用多線程,據我所知多線程基本上是做長時間運行的任務,但由於我的應用程序將沒有用戶界面,實際上需要多線程嗎?

是否有一個單線程應用中,我們每個任務分配給一個線程,並最終整合所有的輸出獲取數據從不同的來源(比如數據庫,web服務)和多線程應用程序在性能上有什麼區別?

+0

如何WPF融入這個呢? – 2012-02-18 01:43:29

+0

@Reed科普塞,謝謝,甚至控制檯應用程序會做,但我的問題是關於多線程是真的有必要嗎? – Coder323 2012-02-18 01:45:09

回答

4

通常,像這樣的應用程序根本就沒有用戶界面,在這種情況下,您的多線程原理在這種情況下可能沒有意義。

也就是說,是否使用多線程來處理數據是另一個問題。你可以,如果這樣做是有道理的。如果這是一個每月要運行一次的應用程序,那麼將其保留爲單線程可能同樣容易,因爲完成時可能沒有時間限制。

但是,如果您需要快速處理項目,則可能有意義對應用程序的某些部分進行線程化。

是否有一個單線程應用程序獲取各種來源的數據(比如數據庫,web服務),我們每個任務分配給一個線程,終於和多線程應用程序整合所有的輸出在性能上有什麼區別?

通常,是的。這是引入線程的最常見原因 - 它允許您在更短的時間內完成更多的工作。但它確實增加了相當多的複雜性(取決於場景)。

+0

感謝您的回答,即使我將每個任務分配給每個線程,最後主線程必須等待所有線程完成整合才能正確完成任務。 – Coder323 2012-02-18 01:51:18

+1

@ Coder323通常,是的 - 儘管如此,它完全取決於您的設計。你可能想看一看:http://reedcopsey.com/series/parallelism-in-net4/ – 2012-02-18 01:53:24

+0

+1。如果您的情況正常,請以單線程開始。 「性能有沒有什麼不同......「如果沒有做好,單線程版本的速度可能會更快。死鎖在多線程情況下會更容易遇到,並且它們不會使其更快速地運行:) – 2012-02-18 01:54:33

1

如果這兩種情況屬實,那麼您可能會從多線程程序中獲得更快的響應時間:您有一個多核處理器,現在幾乎每個人都這樣做。從所有源中提取數據可以按任意順序完成,並且使用一個線程訪問該源將不會將其鎖定。

在這個原因中使用多線程的最好的理由是,如果你花費大量的時間阻塞;等待別的迴應。如果你正在閱讀噸的數據從硬盤驅動器一樣快盤可以給它,然後有兩個線程讀取數據不能給你什麼更快。事實上,我認爲它會慢一點。但是,如果你得到大量的數據,比如說,從插座(互聯網)和你的線程花費的時間相當等待外部服務器的響應(和你不使用你所有的帶寬),則多線程程序會提高速度。

+0

你對這兩種情況是正確的,雖然它不會互相鎖定,但我恐怕必須使用單獨的線程來集成所有這些任務線程。 – Coder323 2012-02-18 02:01:51

相關問題