簡體   English   中英

C#控制台應用程序線程?

[英]C# Console App Threading?

我即將編寫一個控制台應用程序,它將在周日凌晨2點每周運行一次。 它將詢問SQL服務器數據庫,然后執行一些計算,然后將結果寫入新數據庫。

它正在處理數十萬條記錄,因此需要數小時才能完成。

我將創建一個C#控制台應用程序並使用Windows調度程序啟動它。

我的問題是:

1)你認為這是一個很好的方法嗎? 2)過去,類似的控制台應用程序在連續循環時將CPU使用率設置為100%。 有沒有一個好的方法來正確處理線程等?

我開始之前的任何建議將非常感謝。

Ť

總的來說,它是一種很好的方法,因為它在非高峰/非工作時間安排CPU和數據密集型流程,因此用戶體驗和應用程序可用性不會降低。 只考慮 - 工人流程可能需要多長時間? 如果它將持續30-40小時,那么它可能會影響周一的營業時間。

就線程而言,只有當您的計算需要一些時間而不是在數據庫服務器上發生時,多個線程才會有所幫助。 所以在這種情況下,當一個線程正在等待來自數據庫的數據時,其他線程可能會占用CPU。 但是,多線程意味着,您應該能夠水平划分數據,以便每個線程可以在不同的記錄集上工作。

如果您的CPU處於100%,則應使用分頁和批處理,以最大限度地減少應用程序在每個周期執行的工作。 例如,不是從DB中獲取所有記錄,而是獲取第一個百萬,處理它,然后獲取下一個百萬等。

如果一個線程消耗所有CPU周期,則創建多個線程只會增加開銷。

如果您擔心應用程序在實際干擾其他用戶/進程時可能會繼續運行,您只能以低優先級啟動任務。 這樣,當其他CPU密集型進程運行時,您將退居二線。

就多線程而言,這取決於您的情況。 如果您有多個內核/ cpu備用,並且如果您能夠在並行任務中划分問題,那么您可以利用多個線程。 同時,如果你有多個內核/ cpu備用,那么你用單線程應用程序占用所有CPU的風險也較小,因為其他進程只會被重定向到使用其他內核/ cpu。

我已經使用了您安排控制台應用程序的策略來在非高峰時段進行臟工作。 到目前為止,我還沒有遇到任何問題,而且我還沒有完成分割任務和多線程的問題。

您可以查看Tasks.Parallel類( 此處有更多信息)。 我最近實現了類似的東西並遇到了同樣的問題。 幸運的是,它是一個專門的服務器來處理這個......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM