Инструментарий кода в веб-приложении ASP.NET - PullRequest
1 голос
/ 29 июля 2009

Я довольно новичок в разработке .NET в целом. Я хотел бы использовать некоторые инструменты в своем веб-приложении для настройки производительности, особенно в отношении кеширования. Я написал много пользовательских динамически генерируемых пользовательских элементов управления, которые я хотел бы попробовать кэшировать различными способами - возможно, с помощью объявления страницы ASPX или программно.

У меня также есть много запросов Oracle, которые зависят друг от друга, и я хотел бы посмотреть на результаты их кэширования, чтобы увидеть, что даст наилучший прирост производительности.

Как лучше всего это сделать? Почему-то я не думаю, что использование секундомера, чтобы увидеть, как долго IE загружает страницу - это лучшая идея. Я понятия не имею, будет ли мое кэширование сбито или пропущено, помимо предполагаемой задержки. VS2008 имеет встроенные инструменты для помощи?

Ответы [ 4 ]

2 голосов
/ 05 августа 2009

Проект, над которым я работал в последнее время, должен был проверить время наших запросов SQL и вывести их на прослушиватель отладки в режиме отладки. Таким образом, мы могли оценить время выполнения SQL-запросов и время их выполнения, а также отладить код нашего веб-сайта.

Я сделал это, централизовав SQL-запросы в метод-оболочку для 3 типов используемых нами SQL-методов:

  • ExecuteQuery
  • ExecuteNonQuery
  • ExecuteScalar

Они действительно использовали класс Stopwatch, но также был код для преобразования запроса в оператор SQL, аналогичный тому, который можно увидеть в SQL Server Profiler.

Каждый метод был похож на следующее:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
    Stopwatch st = new Stopwatch();
    bool errorDetected = false;

    try
    {
         comm.Parameters.Add(sqlParameters);

         using(comm)
         {
              st.Start();
              object returnValue = comm.ExecuteScalar();
              st.Stop();
              return returnValue;
         }
    }
    catch(Exception)
    {
         errorDetected = true;
         st.Stop();
         throw;
    }
    finally
    {
         string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);

         if(errorDetected)
         {
              Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
         else
         {
              Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
    } 
}

Это вывело бы наши операторы SQL в DebugView.exe так:

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ;  1 params |--> completed NonQuery in 0.0016144 seconds. 

Прелесть этого в том, что, хотя, да, для этих операторов есть узкое место, мы можем вставить запрос непосредственно в профилировщик SQL и получить выходные данные запроса. Это также означает, что если у вас есть инструмент для просмотра файлов журналов, вы можете использовать регулярные выражения для отслеживания того, сколько времени занимает определенный интервал.

Так что, если вы хотите искать запросы, которые занимают более 0,5 секунд, вы можете найти термин:

"через 0. [5-9] \ d +" <- Все больше 0,5 секунд или же "в [1-9]. \ d +" <- все, что больше 1 секунды </p>

Это помогло нам сосредоточить наши усилия очень. Это также помогает нам определить, связана ли проблема с базой данных или, как указано выше, проблема ASP.NET.

Наконец, есть инструмент под названием Fiddler , который также может помочь вам диагностировать страницы по мере их поступления на ваш компьютер. Это дает вам такую ​​информацию, как размер файла, ссылки на изображения / CSS, время загрузки. Это также очень полезно для диагностики проблем размера ViewState.

Надеюсь, это поможет

1 голос
/ 29 июля 2009

Обычно я подхожу к этому путем включения трассировки ASP.NET. Существует довольно хорошее руководство по включению здесь . Это довольно подробно и, самое главное, это бесплатно.

Одна вещь, на которой нужно сосредоточиться, это размер страницы (особенно ее состояние просмотра), которая является важной частью того, сколько времени занимает загрузка страницы после выполнения кода. Другой способ заключается в том, как быстро рендерится определенные части кода, чего можно добиться, вызывая Trace.Write до и после тестирования кода.

Часть тестирования перфорирования с использованием трассировки ASP.NET на самом деле является лишь руководством, поскольку его нелегко повторить, но, тем не менее, хорошим. Если вы хотите повысить его, в Visual Studio 2008 Team System есть инструменты, которые могут быть лучше (хотя я ими не пользовался). Также есть JetBrains dotTrace и ANTS Profiler .

0 голосов
/ 11 апреля 2013

У меня были очень хорошие впечатления от New Relic . Очень простая установка, чрезвычайно четкая панель инструментов на их сайте, и если вам случится разместить на Rackspace или Amazon Clouds, они обычно предлагают бесплатные обновления для учетных записей Pro. Проверьте их!

0 голосов
/ 14 апреля 2012

AppDynamics - очень хороший монитор производительности приложений, который может оснащать ваши приложения .NET без какой-либо конфигурации. Я думаю, что Уилл мог бы решить вашу проблему с этим инструментом. http://www.appdynamics.com/

...