簡體   English   中英

在OS X中獲取CPU時間

[英]Getting CPU time in OS X

我有一個OS X的Objective-C應用程序,它比較兩個sqlite數據庫,並以json格式生成差異。 數據庫很大(10,000個項目,其中有許多字段)。 有時,此應用程序的運行時間約為55秒(使用95%的CPU)。 有時大約需要8分鍾(使用12%的CPU)。 這與相同的數據庫相同。 當僅使用一小部分CPU時,其余的可用。 似乎沒有什么比該過程優先。 在命令上添加“ nice -20”似乎可以確保獲得CPU使用率。 我的問題是

  1. 如果沒有其他東西在使用cpu,為什么我的應用程序沒有利用它?

  2. 我可以通過編程來更改此設置嗎?

  3. 我可以對OS X做些改變嗎?

問題1:

因為我假設您必須從磁盤讀取數據庫,所以您沒有充分利用CPU,因為您的代碼阻止了磁盤讀取。 在Mac OS X上,有很多東西在后台運行,它們不占用大量CPU時間,但是會發出大量磁盤讀取信息,例如Spotlight。

問題2:

除了最有效地利用磁盤訪問以外,可能不是。

問題3:

關閉正在訪問磁盤的所有其他進程。 這包括許多您實際上不應該關閉的系統進程,因此我認為除了嘗試在沒有Mac OS X幻想的情況下在Darwin上運行之外,您在這里可以做的事情很多。

從長遠來看,這聽起來像是您受IO約束。 您還在機器上做其他事情嗎? CPU本身不會節流-肯定是在等待某些東西。

您可以在應用程序運行時使用一些開發人員工具查看您的應用程序-也許最有用的是“ Instruments”,它是dtrace之上的GUI。 如果您正在運行最新的Xcode,則應該已安裝了此程序。 您也可以使用Shark,乍一看它使用起來比較容易,但從長遠來看,它的信息量較少。

通常,您會獲得所有可用的性能。 如果CPU不在100%,則可能有阻塞。 對於數據庫,它通常是鎖定的。 使用Shark找出應用程序中正在發生的事情。

當程序使用的CPU很少時,可能是因為它正在等待磁盤,尤其是當其他進程同時訪問磁盤時。 另一種可能性是您的程序使用了過多的內存,並且操作系統開始使用交換空間。

暫無
暫無

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

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