2017-09-27 3 views
0

私は、構造化ファイルをオブジェクト(漸化関数)に読み込むExcelの解析Web APIを作成しています。文字列が破棄されない理由と、メモリ使用量を最適化する方法を教えてください。

しかし、私はいくつかのファイルを解析中に大きなメモリスパイクに気付き、OutOfMemory例外をスローします。 Excelの構文解析エンジンは、構造全体を読み込む前に、ファイル全体をロードする必要があります。そして、メモリの大部分を消費する読み込みではなく、解析(構造化オブジェクトへの変換)とjson httpリターン(オブジェクトをjsonにシリアル化)によって最終的にメモリが消去されることがわかりました。たとえば、1Mの大きなファイルは70MのJSONを解析できます。

私は周りにグーグルでこれを見つけました。ネットメモリプロファイラーとは、この巨大なメモリの使用につながった何が起こっていたかを分析しようとしました。ここでは、同じファイルを2回解析するときにキャプチャしたスナップショットを示します。私は、GCedされていない巨大な文字列/ Object []があることに気づいた。

今私は迷っています。リストとたくさんの文字列を扱っているときのベストプラクティスは何ですか?メモリ使用量を減らすことについては、どこから調べるべきですか?長時間実行しているプロセスを処理する際のベストプラクティスは何ですか(キューを追加しますか?signalRを使用してプロセス結果を通知しますか?)

いくつかのガイダンスは本当に感謝しています!

enter image description here

答えて

0

私はあなたが一度にファイル全体を読み込む避けるために必要と思います。ここで

を開始するには良い場所です:

Load Large Excel file in C#

+0

残念ながら、Excelの解析エンジンは、その構造を読むことができる前に、ロードするファイル全体を必要とします。実際には、メモリを大量に消費するロードではなく、解析(構造化オブジェクトへの転換)とjsonリターン(オブジェクトをjsonにシリアル化)して最終的にメモリを殺します。 – Spencer

+0

私はいくつかのコードを表示することをお勧めします。どのようにファイルを解析するか、使用しているCOMオブジェクトによっては、それらを正しく処分しないと、メモリを強制終了します。 Evryワークシート、行またはその他のものは、リリースするまでメモリに保持されます。 –

関連する問題