2009-03-23 12 views
1

Webサービス経由でドキュメントをダウンロードしようとしているときに、OutOfMemory例外を継続的に受信しています。文書のバイト配列データを直列化されたメッシュオブジェクトの一部として格納しており、元の文書はすべて〜500kbのサイズです。メッセージのオブジェクトグラフ内の唯一の他のものは、相関のための2つの文字列プロパティです。SQL CE OutOfMemoryException Webサービスを使用しています

私たちは、同じ問題で圧縮し、圧縮されていない文書を検索しようとしています。今私はは、ストリームをダウンロード中ではなく、メッセージを逆シリアル化しようとしているときに例外が発生したと考えています。

私は、これはあいまいな質問ですけど、あなたのいずれかがこれを引き起こしている可能性がどのような任意のアイデアを持っていますか?ここで転送されるデータの量は非常に小さく見え、転送時にデバイスにはほとんど何も起こりません。

答えて

5

メモリはWindows Mobileデバイスで非常にタイトです。本当にうまく動作する世界です。まず第一に、プロセスの合計メモリは(私が正しく覚えていれば)32 MBです。今では、コード内のメモリ割り当てだけでなく、DLL、EXEなどからのコードの読み込みも行われます。あなたはバイト配列に500キロバイトをダウンロードしているとき

は今、それだけで500キロバイトを必要としません。 500KBのCONTEMUOUS MEMORYが必要です。アプリが短期間実行されていれば見つけることはほとんどありません。

私の推薦は、HttpRequestのではなく、Webサービスと直接ファイルをダウンロードすることです。 Webサービスが、必要なURLなどを返す可能性があります。しかし、ファイルを直接ダウンロードして、チャンクで処理することができます.8Kを読み込み、ディスクに8Kを書き込んだり、別の8Kなどを読み込んでください。

+0

アドバイスをいただきありがとうございます。プロセスごとのメモリ割り当てを増やす方法はありますか? – Owen

+0

いいえ、残念ながらそうではありません。少なくとも私が経験した場所であるWindows Mobile 5.0にはありません。一度に大量のメモリを必要としないようにアプリを構造化するだけで済みます。 実際、試してみるべきもう一つのことは、applciationの開始時に大きなバイト配列を割り当てることです。 – Clyde

+0

...待って、決して気にしないでください。 Webサービスコールを行っている場合は、 "ref byte [] buffer"を使うことはできません。常に独自のものを作成します。 – Clyde

0

にOutOfMemory例外にコードを取得するために、いずれかのデバイスがこれ以上持っている、またはデバイスが一般的であっても500KBの変動を処理するのに十分なメモリがないまでメモリを消費しないバグがあります。

「ドキュメントをダウンロードしようとしているときに、」あなたが言うには、多分あなたはメモリーに保管してください、あなたは例外を取得します。

関連する問題