我有一個很大的二進制文件(約700 Mb),我加載到TMemoryStream。之後,我使用TMemoryStream.Read()進行讀取並進行一些簡單的計算,但應用程序永遠不會佔用20%以上的CPU。我的電腦有i7處理器。 有沒有機會增加CPU使用並加速讀取過程而不使用線程?爲什麼Firemonkey應用程序使用不超過20%的CPU?
回答
據我所知,在Delphi中利用多個CPU核心的唯一方法就是使用線程。
如果您確實選擇在您的應用程序中使用線程,有幾個庫可能會緩解開發。 How Do I Choose Between the Various Ways to do Threading in Delphi?
加上Shannon的回答,在具有多個內核的i7處理器上,一個線程只會使用一個內核。一個線程無法在多個處理器內核上運行。因此,如果你想利用多個內核,你需要創建多個線程來處理各種任務。創建一個線程並不一定像在該線程中說的那樣簡單,關於多線程還有很多需要了解的內容。例如,您的應用程序具有一個主要的GUI線程,那麼一個線程可能專門用於執行一些長時間的計算,另一個線程可能正在將標題更新爲實時數據等等。
Windows會自動決定將哪個內核分配給一個線程,並且通常會將其分配給相當數量的內核。所以,如果你有8個處理器內核和16個線程,每個內核會得到2個線程(假設),並且由於每個內核自己分開發送tick,所以不止一個線程可以同時運行(相反到單個核心,它在每個線程之間劃分每個「滴答」)。
所以要回答你的問題,如果你有5個線程同時執行一些大的事情,那麼你會看到100%的處理器使用率。
除非如上所述,瓶頸位於其他位置(HDD,RAM) – Kromster
但是,當單線程使用單個內核的100%時,Windows會報告任務管理器中的「25%CPU」。這正是傑瑞想要在這裏解釋的。 –
- 1. Mac應用程序使用超過167%的cpu
- 2. Delphi XE2:爲什麼FireMonkey應用程序是HD?
- 3. 應用程序不使用100%的CPU
- 4. 爲什麼單個python進程的CPU使用率可能超過100%?
- 5. Node.Js應用程序使用90%CPU的原因是什麼?
- 6. 爲什麼我的線程程序只使用一個CPU?
- 7. ReportMemoryLeaksOnShutdown和FireMonkey應用程序
- 8. 使用超過100%的CPU在模擬器中運行的iPad應用程序?
- 9. 爲什麼我的程序不是用來使用RAM和CPU,而是使用所有的RAM和CPU?
- 10. Rails:爲什麼不使用默認的應用程序佈局?
- 11. .NET 3.5的應用程序CPU使用率過高的Mscorwks.dll InitializeFusion
- 12. 爲什麼我用「clock()」獲得過多的CPU使用率?
- 13. 什麼是應用程序和過程?
- 14. 在Firemonkey中加速應用程序的啓動過程
- 15. ksoftirq不使用CPU,應該是,爲什麼?
- 16. 爲什麼節點使用100%的CPU?
- 17. FireMonkey中的TFileOpenDialog應用程序
- 18. 爲什麼Grails應用程序在Tomcat上部署時佔用30%的CPU?
- 19. 爲什麼OpenEars在XCode的應用程序中發出超過50個錯誤?
- 20. 爲什麼使用WMI獲取CPU使用凍結我的程序幾秒鐘?
- 21. ASP.NET應用程序和CPU使用率
- 22. 100%CPU使用率ASP.NET應用程序
- 23. 使用Javascript - 比較:20超過
- 24. PHP如何使用超過100%的CPU?
- 25. 爲什麼Web分析應用程序從不使用JSONP
- 26. 爲什麼「20%電池」消息框崩潰我的應用程序?
- 27. 什麼樣的應用程序應該重寫爲使用OpenCL?
- 28. 爲什麼我在bluemix示例應用程序中超時?
- 29. OrderedDict爲什麼不使用超級?
- 30. 爲什麼我在使用Azure邏輯應用程序時遇到超時?
讀取過程幾乎肯定受到硬盤驅動器速度的限制。如果你的計算非常簡單,我還想知道內存帶寬是否會限制速度? – Harriv
爲了加速程序,可能會做很多事情。但是除了您稱之爲TMemoryStream.Read的事實外,不可能提供任何有意義的建議。 –
一個核心上100%的CPU使用率= 25%的CPU使用率。一個核心i7有4個真正的,然後「超線程」使它看起來像操作系統的8個核心。這是8個核心。我很高興你能獲得超過14%的使用率。如果你使用8個線程,每個線程完全受CPU限制,你將在任務管理器中獲得「100%」。就我個人而言,我發現一個100%cpu綁定的單線程應該由windows報告爲「100%cpu綁定」。您的代碼在單個線程中已經最大限度地低效了。 –