2017-12-21 9 views
0

私は何らかの計算の後に(毎秒5リットルで)私はそれらの結果を得るプログラムを持っています。これらのデータをデータベースの対応するテーブルに保存します。私のプログラムはC#で書かれており、エンティティフレームワークのコードを最初に使用し、wpfを使用します。 私のプログラムは、コードの下に似ています。Entity Frameworkで少なくとも5レコード/秒を保存するベストプラクティスは何ですか?

public struct ResultData{ 

//Contain some result for example 20 property of string, int and float 
} 

public class MyProcess 
{ 
    public void GetResult(){ 
     //some computation 
     .... 
     return resultdata; 
    } 
} 

public class MainClass{ 

    public MyPorccess porcess; 


    public ResultData newResultData; 
    ... 

    //below section occurs 10 per second 
    { 
     ... 
     newResultData = process.GetResult; 

     //save to database 
     using(sampledatabse db= new sampledatabse()){ 
     ... 
     //add new result to database 
     db.SaveChanges(); 
     } 
     ....  
} 

毎秒多くのレコードを保存する必要があるプログラムで最高の性能を持つデータベースにこれらの結果を保存するためのベストプラクティスは何ですか?

たとえば、1秒間に10回のデータベース操作が実行される時間はどれくらいですか?

私のRAMの使用現在のプログラムでは、新しい結果が得られた後に新しい結果をデータベースに保存して、昇順を増加させます。

私を助けてください。

編集: 私はconcurrentQueueを作成し、それに新しい結果をエンキューします。それから、backgroundWorkerを作成し、ConcurrentQueue.Lengthが0より大きい場合、resultDataをデキューします。次に、この新しい結果をデータベースに保存します。
しかし、RAMの使用量は上昇しています。

+0

_「ベストプラクティス」_はおそらく意見の対象です。さらに、テーブルの数を知らなくてもそれを伝えることは不可能です。列;インデックスと**インフラストラクチャー**などが含まれています。 [ask] – MickyD

+0

なぜ1秒未満で保存すればいいのですか?そうでない場合は、どの部分が長くかかっているかを把握し(ボトルネック)、その部分を改善してください。もしあなたが助けを必要とするならば、あなたはより多くの詳細を持っているので、特にその部分について尋ねる。 – CodingYoshi

+0

@hassanmohagheghiyanあなたのアプリケーションでramが登っている領域を分析してもらえますか? – programtreasures

答えて

2

あなたのケースでは、ここでは複数のdb呼び出しを避けるために、毎秒10ですが、私の意見では、データを挿入するためにキューを使用することができます。

あなたは

は、DBにはいくつかの間隔と一括挿入であなたのオブジェクトをデキュー1つのタイマーを作成し、あなたは挿入になりたかった自分のオブジェクトをエンキューすることができます。

関連する問題