0

私は現在、CF.NETを使用してWindows Mobileに小さなアプリケーションを作成しています。.net Windows Mobileのメモリ不足例外 - この問題を解決するには?

このアプリケーションの動作は電子メールアプリケーションと非常に似ています。つまり、POP3を使用して、メールサーバーアカウントからメッセージをダウンロードし、MIMEツールを使用して処理するためにストレージカードに保存します。

特定の時点でOutOfMemory例外が発生するため、大きな問題が発生しました。私は先日、here on SOに掲載された次の質問と回答を読んで、これに関するいくつかの面白いことを見つけました。添付ファイルが4-5MB(mp3-songs)になる可能性があるので、重大な問題があることを認識しています。しかし同時に、Pocket Outlookは、問題なく(WIFI接続を使用して)最大4〜5MBのMP3曲をダウンロードできるので、それを行う方法が必要です!

現時点では、ダウンロードバッファ(文字列に変換)を単純な文字列変数に保存しています。私はバッファの内容をstringbuilderに追加しようとしましたが、私はまだOutOfMemory例外を受け取ります。

私はこの問題を克服するためにどのような戦略/手法を採用できますか?

答えて

10

大量のデータを扱っているときは、すべてを一度にメモリに保持しないようにする必要があります。

ダウンロードパイプはストリームなので、データをチャンクで読み込むことができます。ファイルをディスクに書き込むときにストリームがあるので、一度にチャンクを書き込むことができます。

トラクタートレーラーを倉庫に降ろすことを考えてください。あなたのstringbuilderのソリューションでは、基本的には、 "私はトレーラーの後ろに立つつもりです、トレーラーの全内容を私の腕に積み込み、それを倉庫に持って行きます" 。あなたは荷物に砕かれるでしょう!代わりにあなたがしたいのは、「私が実際に持ち運べるだけの十分な大きさを手に入れて、それを倉庫に持ち込み、次の負荷に戻す」ということです。

+0

クライド:Thx。私は "チャンク"メソッドを採用する必要があります。私はいくつかのコード例を見つける方法を試します。私は、バッファの内容をファイルに保存し、バッファをクリアするなどと想像します。正しい? – moster67

+0

実際にPOPプロトコルをどのように行っているかによって異なります。生の接続を作成してテキストを送受信している場合は、添付ファイルをダウンロードしている部分にアクセスして、一度に少ししてください。 – Clyde

+0

しかし、サードパーティのライブラリを使用してPOPサーバーに接続する場合は、添付ファイルのダウンロードをどのようにサポートしているかを確認する必要があります。良いものはストリームとしてファイルをダウンロードするためのAPIを提供します。それ以外の場合は、新しいAPIが必要になります:-)。 – Clyde