Вопрос

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

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

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

Это было полезно?

Решение

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

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

  • Выполнить запрос
  • ВыполнитьNonQuery
  • Выполнитьскаляр

Они использовали класс «Секундомер», но также существовал код для преобразования запроса в оператор 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 секунды

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top