ファイルからオーディオデータを読み込んで処理するためにスレッドを切り離すまで、すべてのことがアプリケーションで正常に機能します。スレッドでガーベジコレクションが機能しないのはなぜですか?
ガベージコレクションは、私が何をしてもこのスレッドで何が起こるかについて何も知らないようです。私は[NSThread self]、[NSThread currentThread]、[NSGarbageCollector defaultCollector] collectIfNeeded]、およびcollectExhaustivly]を試しました。 NSThreadからNSOperationQueueでNSOperationに切り替えました。
これらの提案された解決策はどれも効果がありませんでした。最近では、私は私のデータを保持するために
Float32* pfArray= calloc(numFloats, sizeof(Float32));
にNSMutableArraysから切り替えて、そのメモリを解放する free(pfArray);
を使用しました。これはよりうまくいっていますが、それでもまともな量が漏れています。
アクティビティモニターに表示された「実際のmem」が任意の数に達した後にガベージコレクションがある程度動作するように見えますが、動作しているように見える場合は、使用されているメモリをすべて解放しません。それは、それが任意のしきい値よりもはるかに高くなることはありません。
私はGCを使う方法を読んだことがありますが、今は私には分かりませんし、ほぼ完全に書かれたプログラムがあります。どんな提案も非常に役に立ちます。ありがとうございました!
デッドオン;コレクタはスレッドアプリケーションでうまく動作します。多くの場合、スレッド化されたアプリケーションでは非GCコードよりもはるかに効率的です。それ以上の証拠がなければ、あなたが間違ったことを言うのは難しいです。 – bbum
私は、アンマネージメモリコール(mallocベース)と管理されたメモリコールを混在させている可能性がありますので、質問を再読み込みする必要があります。しかし元の情報源がなくても、相談するのは難しいです。 – millenomi