我有一個應用程序可以執行大量的CPU和I/O繁重的工作。在完成這項工作時,它不應該干擾其他應用程序。防止應用程序從其他應用程序獲取資源
例如,如果另一個應用程序正在充分利用我的應用程序正在讀取的磁盤,我希望我的應用程序能夠以非常低的速度節制磁盤訪問,以免干擾其他應用程序。 CPU也一樣;例如,如果另一個應用程序正在編碼視頻,我不想從中竊取很多週期。
我試圖把我的線程放在後臺模式,但我遇到這些線程不會利用未使用的資源。在沒有其他應用程序運行且幾乎不需要CPU或磁盤使用情況下,正常優先級線程上需要1秒的操作在後臺線程上最多需要5分鐘。
是否winapi提供任何幫助我?
下面是我的應用程序的磁盤使用情況的圖片,而後臺線程嘗試計算800 MB文件的SHA1哈希值。正如你所看到的,它幾乎沒有利用我的磁盤。在正常優先級上,它保持20 MB +的讀取。
編輯:爲了澄清,通過「後臺線程,」我的意思是它的優先級設置爲背景模式,而不是C#後臺線程的線程。
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
我很好奇 - 爲什麼'THREAD_MODE_BACKGROUND_BEGIN'不能用?如果使用它會發生什麼?根據我的實驗,'PROCESS_MODE_BACKGROUND_BEGIN'有時非常不合適,但是'THREAD_MODE_BACKGROUND_BEGIN'看起來完全沒問題。請參閱有關我的調查結果的更多信息:http://stackoverflow.com/a/30509372/193017 –