2012-02-24 20 views
0

Visual Studio 2010のSQLdbからデータを取得する小さなWebアプリケーションがあります。これを表示しようとすると、単純なドロップダウンリストを使用すると、コンパイル後すぐに約15秒かかります。そのあと5秒ごとにリクエストします。私はdbとリピータにLINQ接続を使ってすべてを出力します。それは4つの列と約50行ですので、mutchデータはありません。それは私が10行、同じ応答時間を取るとしようとすると問題ではありません。非常に長い要求時間VS2010

VS2008がインストールされた別のコンピュータで同じことをテストしました。その時間は0.1秒のようなものでした。私は.NET 3.5を使用し、すべての最新のアップデート(SP1など)をインストールしています。

私は見トレースを見れば、それは私のコードでこれらの行には時間がかかる:

var cust = dbContext.Customers 
    .Select(c => new 
    { 
     c.customerID, 
     c.Email 
    }).Take(10); 

repeater.DataSource = cust; 
repeater.DataBind(); 

誰もがSOMのmutch時間を取ることができるものを知っていますか?

よろしく ダニエル

私は、この他のaproach試してみました:

SqlConnection connection = new SqlConnection(connectionString); 

     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = connection; 
     cmd.CommandType = CommandType.Text; //default 

     cmd.CommandText = "SELECT Email FROM Customer"; 

     cmd.Connection.Open(); 
     cmd.ExecuteNonQuery(); 
     cmd.Connection.Close(); 

をそれだけの時間がかかります..私は思うデシベルを呼び出すコードよりもいくつかの他のより根本的な問題がなければなりませんか?

いくつかのより多くの情報: 私は、これが初めてのページSOMトレースでなかったがロードされます。

Begin Raise ChangedEvents 0,00219604937555932 0,000014 
After repeater has printed 15,8138335259613 15,811637 
End Raise ChangedEvents 15,8138801733289 0,000047 

セカンドタイム:でChangeEventで起こっ

Begin Raise ChangedEvents 0,00219604937555932 0,000014 
After repeater has printed 5,25090396258066 5,248825 
End Raise ChangedEvents 25095106283536   0,000047 

What's?

+1

Take()の後にToList()を呼び出してみましたか? – hyp

+4

データベースサーバーをチェックして、クエリの実行時間を確認しましたか? – mbeckish

+0

さて、私は 'customer'mailQuery'のようなもっと意味のある' cust'という名前をつけ、 '.Take(10);'をデータバインディング行に移動します。 linqクエリを表す変数とクエリの結果である変数を明確に区別することが重要です。 – asawyer

答えて

0

私はそれを動作させるために何をしましたか?コード内の別の場所で作業を続け、最新のウィンドウズアップデートを更新しました。うーん..今、それは魅力のように動作します。 VS2010 ?? しかし、すべての提案をありがとう、いくつかの素晴らしいものを学んだ!

大丈夫

1

LINQによって生成される実際のSQLを取得し、データベース管理ツールにコピー&ペーストして、実行計画を見て、潜在的なパフォーマンスの問題を特定します。

データコンテキストのプロパティLogを使用すると、実際のSQLが表示されます。コンソールアプリケーションでは、あなたがこれを行うことができます:

dbContext.Log = Console.Out; 
// ... 

あるいは、次のようにファイルにSQLを記述します。

using (var writer = new StreamWriter("sql.log")) { 
    dbContext.Log = writer; 
    // .... 
} 

をまた、それはあなたのLINQの終わりにToList()またはToArray()を追加する価値があるかもしれませんそれが誤って再実行されていないことを確認するだけです。

+0

vs2008の別のコンピュータでうまく動作しますが、私が思うには間違いはありません。 –

関連する問題