7

ハーディングコードポッドキャスト14で、stackoverflowがリクエスト中に実行されたクエリをページの下部に表示したと誰かが述べています。

それは私には素晴らしいアイデアのように思えます。ページが読み込まれるたびに、実行されるSQLステートメントとDBラウンドトリップの総数を知りたいです。誰かがこの問題に対するきちんとした解決策を持っていますか?

許容できるクエリ数はいくつだと思いますか?ページをレンダリングするために30を超えるクエリが必要な場合、開発中にアプリケーションで例外がスローされる可能性があると考えていました。

編集:私は私の質問を明確に説明していなかったに違いないと思います。HTTPリクエスト中に、Webアプリケーションが12個以上のSQLステートメントを実行する場合があります。これらのステートメントを、ステートメントの数とともにページの下部に追加したいと思います。

これが私の解決策です:

DataContextが書き込むことができるTextWriterクラスを作成しました。

public class Logger : StreamWriter
    {
        public string Buffer { get; private set; }
        public int QueryCounter { get; private set; }

        public Logger() : base(new MemoryStream())
        {}

        public override void Write(string value)
        {
            Buffer += value + "<br/><br/>";
            if (!value.StartsWith("--")) QueryCounter++;
        }

        public override void WriteLine(string value)
        {
            Buffer += value + "<br/><br/>";
            if (!value.StartsWith("--")) QueryCounter++;
        }
    }

DataContextのコンストラクターで、ロガーをセットアップします。

public HeraldDBDataContext()
        : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource)
    {
        Log = new Logger();
    }

最後に、Application_OnEndRequestイベントを使用して結果をページの下部に追加します。

protected void Application_OnEndRequest(Object sender, EventArgs e)
    {
        Logger logger = DataContextFactory.Context.Log as Logger;
        Response.Write("Query count : " + logger.QueryCounter);
        Response.Write("<br/><br/>");
        Response.Write(logger.Buffer);
    }
4

4 に答える 4

3

.ToString()をvarクエリ変数に入れると、SQLが得られます。DebugenVS2008でもこれを使用できます。ビジュアライザーのデバッグ

元:

var query = from p in db.Table
            select p;

MessageBox.SHow(query.ToString());
于 2008-08-27T01:27:25.750 に答える
3
System.IO.StreamWriter httpResponseStreamWriter = 
new StreamWriter(HttpContext.Current.Response.OutputStream);

dataContext.Log = httpResponseStreamWriter;

それをページに貼り付けると、ページにSQLがダンプされます。明らかに、有効/無効にできる小さな方法でそれをラップします。

于 2008-08-27T03:30:42.600 に答える
1

私のブログに、ログ ファイル、メモリ、デバッグ ウィンドウ、または複数のライターへの送信に関する投稿があります。

于 2008-09-16T00:37:37.967 に答える
0

Linq in Action から

Microsoft には、VS 2008 から個別にダウンロードできるクエリ ビジュアライザー ツールがあります

于 2008-08-27T02:29:37.927 に答える