まず、大きな文字列や大きな配列をメモリに一度に保存することは避けてください。特に携帯電話のようなメモリに制約のあるデバイスでは避けてください。たとえば、XmlTextReaderを使用してxmlファイルを解析します。
次にガベージコレクションに関する問題:現在のMono GCはスレッドスタックを慎重にスキャンします。つまり、オブジェクトへのポインタがまだ静的である可能性があります。 (たとえあなたの例ではnullに設定されているように)プログラマーにクリアされていても、GCに見えるようにしてください。 この動作の結果を制限するには、大規模な配列と文字列を別々のスタックフレームに割り当てたり操作したりしてください。たとえば、代わりにそれをこのようにコーディング:
while (true) {
string s = get_big_string_from_network();
do_something_with_string(s);
handle_ui();
s = null;
}
を行う次
void manipulate_big_string() {
string s = get_big_string_from_network();
do_something_with_string(s);
}
...
while (true) {
manipulate_big_string();
handle_ui();
}
通常は、NULLへの参照を設定すると、使用して、静的またはインスタンスフィールドに適用されるのみ意図された効果を有していますメソッドローカル変数を使用すると、GCから参照を非表示にするには不十分な場合があります。
これは.NET Framework、Compact Framework、またはMicro Frameworkですか? GCの動作はそれらの間で非常に異なります。 –
まあ、それは成長しています。そう?メモリはそれのために使用されるために購入された、それはありませんでしたか? – zerkms
iPhone/iPad上のモノフレーム –