2011-03-04 8 views
1

データベースにストアドプロシージャがあり、Entity Frameworkからn回呼び出す必要があります。Entity Frameworkからストアドプロシージャをn回呼び出す

public Points GetResults(Share share, DateTime startDate, DateTime endDate) 
    { 
     using (var ctx = new MyDatabaseEntities()) 
     { 
      int? stockId = GetID(share, endDate); 
      var data = ctx.GetData(stockId, 123, startDate, endDate, -23, 14, 3); 
      var selectedPoints = data.Where(a => a.Date.HasValue && a.Value.HasValue).ToDictionary(a => a.Date.Value, a => a.Value.Value); 
      return new Points(selectedPoints); 
     } 
    } 

これはn個のシェア(500シェア、500コール)に対して呼び出す必要があります。私は現時点で私に少しのパフォーマンスのボトルネックになっていると思っています。私はprocから移動することができないストアドprocには多くのロジックがあります。誰かがこれをスピードアップするためのヒントを持っていますか?または、この手順を何度も呼び出す必要があるので、私はちょうどバグがありますか?

+0

使用しているデータベースとバージョンは何ですか? –

+0

SQL Server 2005 –

答えて

1

ストアドプロシージャがStockIdを1つしか使用せず、多くの場合結果が必要な場合は500回コールするしかありませんが、これは常に遅くなります。

実際にSPの修正を検討する必要があります。使用しているデータベースエンジンによっては、テーブル値のパラメータを調べることをおすすめします。

+0

これは私がやらなければならないことだと思います。私はprocを編集することはできませんが、私は自分のSQLを書くことができます。真剣に、あなたはsqlを見なければならない、それは> 1000行のような動的な恐ろしさの長さです。 –

+0

LOL - 私はそこにいた!あなたは、IDのセットを取る新しいストアドプロシージャを書くことに目を向けることができます。その中で、カーソルを使用して既存のSPを繰り返し呼び出すことができます。既存のSPを使用するには、一時表に挿入するINSERT EXEC spを使用します。次に、最後にテーブルの内容を選択します。これは、あなたが競合するコールのネットワーク待ち時間を持たないため、はるかに速くなければなりません。 –

関連する問題