ハーディングコードポッドキャスト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);
}