2

現在、シミュレーターでアプリを実行しているときに、Monotouch メモリ プロファイラーの出力を見ています。私はこれらの数字を見ることができます:

Object count: 154.043
Total memory: 5.099.648 bytes

「合計メモリ」とは、約 5MB の RAM を占有していることを意味しますか? Instruments は、約 30MB が割り当てられていることを示しています。それが私が尋ねている理由です。

4

1 に答える 1

5

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

これは、いくつかの理由により、プロセスで使用されるメモリの合計量ではありません。

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

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

また、MonoTouch自体は、デバイスよりもシミュレータでより多くのメモリを使用することに注意してください。シミュレータでは、コンパイルが高速になるように調整されているのに対し(デバッグを可能な限り高速にするため)、デバイスでは、実行時のパフォーマンスが向上するように調整されています。

于 2012-04-11T10:30:01.747 に答える