2012-04-11 9 views
2

私は現在、Simulatorで自分のアプリケーションを実行しているときにMonotouchメモリプロファイラーの出力を見ています。 私はこれらの数字を見ることができます:モノタックメモリプロファイラ:「総メモリ」という数字は何を表していますか?

Object count: 154.043 
Total memory: 5.099.648 bytes 

「総メモリは、」私はRAMの約5MB占めています、ということですか?インストゥルメントは約30MBが割り当てられていることを示しているので、私はそれを求めています。

答えて

5

Total memoryは、すべての管理オブジェクトによって使用されるメモリの量です。プロファイラは、各オブジェクトで使用されるメモリを追加するだけです。

これが理由のカップルのため、プロセスで使用されるメモリの総量はない:

  • MonoTouchでは、オブジェクトごとにメモリを割り当てません。 MonoTouchは代わりにメモリをチャンクに割り当て、新しいオブジェクトが作成されると、通常割り当て済みのメモリに割り当てられます。いずれにしても、これは通常、プロファイラがレポートする合計メモリとアプリが使用する実際のメモリ量との間で無視することができます(使用される5MBの管理メモリと30MBのInstrumentsレポートの違いにはなりません)。

  • MonoTouch(したがってそのプロファイラ)は、ネイティブコードによって割り当てられたメモリについては認識していません。たとえば、UIImageを作成する場合、画像データは完全にネイティブコードで保持され、プロファイラには表示されません(UIImageインスタンスがプロファイラに表示されますが、それぞれが使用するメモリは使用される管理対象メモリになります)これは画像データを含まない)。もう1つの例は、xibからビューをロードする場合です。管理されたコードから何らかの方法でオブジェクトツリーにアクセスしないと、ツリー内のオブジェクトに対して管理対象オブジェクトは作成されず、マネージドオブジェクトには何も表示されませんプロファイラ。これは管理されたプロファイラからの5MBと30MBのInstrumentsレポートとの間の実際の違いです。

はまた、シミュレータ上で、速く、(できるだけ速くデバッグをするために)デバイスには、チューニングされている間にコンパイルするように調整されていますので、MonoTouchで、それ自体は、デバイス上のよりシミュレータに多くのメモリを使用することを念頭に置いてい実行時のパフォーマンスが向上します。

関連する問題