6

JSON ファイルを解析して SQL DB に挿入しようとしています。ファイルが小さい (5 MB 未満) 限り、私のパーサーは問題なく動作しました。

大きな (> 5MB) ファイルを読み取ろうとすると、「メモリ不足の例外」が発生します。

if (System.IO.Directory.Exists(jsonFilePath))
                {
                    string[] files = System.IO.Directory.GetFiles(jsonFilePath);
                    foreach (string s in files)
                    {
                        var jsonString = File.ReadAllText(s);
                        fileName = System.IO.Path.GetFileName(s);
                        ParseJSON(jsonString, fileName);

                    }
                }

JSONReader アプローチを試しましたが、JSON 全体を文字列または変数に変換できませんでした。アドバイスしてください。

4

2 に答える 2

3

64 ビットを使用し、同様の質問に対する RredCat の回答を確認してください。

Newtonsoft.Json - Big Object の逆シリアル化中にメモリ不足の例外が発生しました

NewtonSoft ジェイソンのパフォーマンスに関するヒント

トークン化に関する David Cox の記事を読んでください。

"基本的なアプローチは、Json.NET ライブラリの一部である JsonTextReader オブジェクトを使用することです。JsonTextReader は一度に 1 つのトークンで JSON ファイルを読み取ります。したがって、ファイル全体を文字列に読み取るオーバーヘッドを回避します。トークンがファイルから読み取られ、オブジェクトが作成され、スタックにプッシュされます. ファイルの最後に到達すると、スタックの一番上に 1 つのオブジェクトが含まれます — オブジェクトに対応するオブジェクトの非常に大きなツリーの一番上です.元の JSON ファイルに"

Json.NET を使用した大きなレコードの解析

于 2016-08-13T03:56:02.123 に答える
-1

json ファイルが大きすぎて、どのような形式でもメモリに収まりません。

ファイル名またはストリームを入力として受け入れる JSON リーダーを使用する必要があります。あなたの質問からは、使用している JSON リーダーが明確ではありません。どの図書館から?

JSON リーダーが JSON ツリー全体を構築する場合でも、メモリ不足になります。JSON ファイルを読み取るときに、探しているデータをチェリー ピックするか、SQLite データベースなど、簡単にクエリできる別のディスク上の形式にデータ構造を書き込みます。

于 2016-07-25T21:32:01.283 に答える