2017-11-09 15 views
-1

多くのJson-Files(平均50ファイル、すべてのファイルの平均ファイルサイズが9MB)を評価するアルゴリズムを作成しました。この評価は138回繰り返します。
最初に、大きな500mbのjsonfileにデータが書き込まれ、その後、小さなファイルに分割されてデータが処理されます。私はJSON.NETを使っています。
ファイルの読み込みに時間がかかりませんが、ファイルをJObjectに解析するには平均で1.5秒かかります。私は50回のファイルを138回読んでいます。それは、ファイルを6900回読み込んでいます。
一つの実行がC#Jsonを使用した多くのファイルの反復評価

は138人のユニークなプレーヤーがある想像し、このアルゴリズムが何をしているかを証明するには...時間への道にずっとある平均4-5時間、私は持っていけない時間がかかり、それらはすべて50.000を果たしましたゲーム。今、あなたは50,000点のゲームを手に入れ、すべてのプレイヤーの平均値を評価したいと思っています。今度は、すべてのプレーヤーのためにこれらの50のファイルを調べなければなりません。ファイルの値が書き込まれ、次のプレーヤーの評価が開始されます。私のアルゴリズムは、リストを埋める、値を追加する、平均値を計算するなどの機能を使用しているので、これは、評価ごとに約1,2-2GBのRAMを必要とします。計算自体は速く、現時点では改善が必要ないので、より速い経験を生み出すことができます。

並列処理は偉大workes APIからデータを収集するために使用されますが、評価の場合には、処理されるときに、ファイルがロックされているので、それは多くのRAMなどにまでかかるだろう、使用することはできません

私の質問は、私はそれが今よりも速く処理することができる技術はありますか?繰り返し6900ファイルの平均を処理することは悪い練習と間違っているようだ、私は何かが不足していると思う...

ありがとうございます!

+1

と呼ばれ、少なくともなし:

だから要約すると、私は

JObject.Parse(string) 

に置き換えますファイルをどのように読んでいるのかを示すいくつかのコードは、合理的な提案をするのは不可能です。あなたの質問を具体的な例で更新してください。私はあなたを助けてくれるでしょう。 –

答えて

-1

はい、あなたは正しいです。私はMongoDbのようないくつかのストレージにすべてのデータを挿入することをお勧めします。これは強力な集約フレームワークを持ち、要求とインデックスを作成して平均を計算できるようにします。

+0

あなたの答えをありがとう!ローカルマシンでこれを行う方法は他にないと思いますか? – Baeteb

+0

はい、方法があります。いずれにしても、ローカルDbを使用する必要があります。 – Leonid

-1

今私は私の問題の解決策を見つけました...評価時間を5時間から平均35分に短縮しました。私は単にNewtonsoftのJSON.netライブラリの機能を置き換えました。ファイルをJObjectに解析するには、それぞれ約1.5秒かかります。私はちょうどhttp://json2csharp.com/に私のJSONを貼り付け、私のJSON構造のためのクラスを作成しました。その後、私はget関数を再構築します。この再構築以来、それはもはや1.5秒かかることはありませんが、今はおそらく0.3秒です。

できるだけ、私のヒントはJObject.Parse(文字列)を避けることです!それはJsondeserializerでそれを行うために多くの作業が必要ですが、それはデータを処理するときに多くの時間を節約します!私の場合は

var jsonObject = JsonConvert.DeserializeObject<YOURCLASS>(string); 

クラスは、データの一例がないとRootObject

関連する問題