В подкасте с кодом 14 кто-то упоминает, что в стеке потока отображаются запросы, выполненные во время запроса, внизу страницы.
Звучит как отличная идея для меня. Каждый раз, когда загружается страница, я хочу знать, какие SQL-операторы выполняются, а также подсчитывать общее количество обращений к БД.
У кого-нибудь есть аккуратное решение этой проблемы?
Что вы считаете приемлемым количеством запросов? Я думал, что во время разработки мое приложение может выдать исключение, если для отображения страницы требуется более 30 запросов.
РЕДАКТИРОВАТЬ: Я думаю, что я не должен был четко объяснить мой вопрос. Во время HTTP-запроса веб-приложение может выполнить дюжину или более SQL-операторов. Я хочу, чтобы эти заявления были добавлены внизу страницы вместе с подсчетом количества утверждений.
ЗДЕСЬ МОЕ РЕШЕНИЕ:
Я создал класс TextWriter, в который DataContext может записывать:
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);
}