1

エミュレータでxcode計測器とプロファイルを実行すると、ビューが削除された後すぐにUiViewControllers Disposeメソッドが呼び出されます。しかし、私がデバイス上でアプリケーションを実行すると、すべてのUiViewControllerのdisposeメソッドが呼び出されることはありません!または非常にゆっくりと呼ばれ、記憶が高すぎる。Xamarin Iosのガベージコレクタデバイスでは機能しません

なぜこのようなことが起こっているのかわかりません。問題は、AppDelagate ReceiveMemoryWarningとDidEnterBackground()でGc.Collect()を手動で実行するときに、デバイスでアプリを取得してdiposeメソッドを呼び出す唯一の方法だということです。これらのメソッドのいずれかが実行されると、メモリは140MB以上から70MBに減少します。

これは、アプリケーションがエミュレータで実行されているときのメモリのイメージです。 Emulator Memory Allocation

いつデバイスでアプリを実行しますか? Device Memory Allocations

エミュレータからわかるように、disposeメソッドはUIviewcontrollerが削除されるたびに呼び出されます。しかし、このデバイスでは、disposeメソッドは決して呼び出されません。デバイスのイメージに表示されるドロップは、アプリケーションがbeckgroundに移動し、GC.Collect()を手動で呼び出すときです。

iosデバイスでエミュレータと同じように自動実行しないのはなぜですか?

私は非常に新しいxamarinです、私はこれを理解するために4日間過ごしました。私は本当に何をすべきか分からない。

誰かが私を助けてくれることを願っています。

答えて

0

シミュレータ上でデバッグモードでXamarin.iOSを実行すると、数秒ごとにGC.Collect()を連続的に呼び出すスレッドが存在するため、ガベージコレクションは実際のデバイスより頻繁に発生します。

これは主に、コード内のバグを早く見つけ出すのに役立ちます(すでに削除された管理参照へのアクセスなど)。これは、デバイスにデプロイするときにシミュレータ上で発生するようなコレクションが頻繁に発生するのを見ていない理由です。

GCヒューリスティックは、いつ起こるべきかを判断し、イメージなどの大きな管理対象オブジェクトで作業しているときに「心配」する必要がある時間を決定します。 usingステートメント内のオブジェクトは十分でなければなりません。

+0

あなたに感謝します。 –

関連する問題