Профилирование C# / приложения.NET

Это будет зависеть от того, как m_ProtectedMethod будет потребляться, но я нашел компромисс в своей ситуации, где я использую одну перегрузку больше, чем другую.

Просто определите более простой (имеющий менее общий параметры) Action & lt;> variable, которая вызывает более сложный метод Action Variable. Это может быть достигнуто либо в (i) локальном объеме использования; или (ii) область объекта при присвоении свойства действия или конструкции объекта.

Поскольку нет такой вещи, как перегрузка переменных / свойств, вам нужны два разных имени для двух связанных переменных Action.

EG i: Локальная область (возможно, не самая подходит для вашего сценария)

public MyMethod(Action<IEnumerable<string>, string, int> m_ProtectedMethod2)  
{ 
   Action<IEnumerable<string>, string> m_ProtectedMethod = (p1,p2) => {
      m_ProtectedMethod2(p1,p2,1); //The value 1 is the default 3rd parameter
   }

   ...Do something  
   m_ProtectedMethod(param1, param2);  
   ...Do something  
   ...If something  
      m_ProtectedMethod2(param1, param2, param3); //Calling the more complex form directly
   ...Do something  
}  

EG ii: Object Scope

private Action<IEnumerable<string>, string, int> m_ProtectedMethod2 = null;
private Action<IEnumerable<string>, string> m_ProtectedMethod = null;
protected Action<IEnumerable<string>, string, int> ProtectedMethod
{
   get { return m_ProtectedMethod2; }
   set {
      m_ProtectedMethod2 = value;
      m_ProtectedMethod = (p1,p2) => {
         m_ProtectedMethod2(p1,p2,1); //The value 1 is the default 3rd parameter
      }
   }
}

public MyMethod()
{
   ...Do something  
   m_ProtectedMethod(param1, param2);  
   ...Do something  
   ...If something  
      m_ProtectedMethod2(param1, param2, param3); //Calling the more complex form directly
   ...Do something  
}

Обратите внимание, что в обоих случаях я задал значение по умолчанию для более неискренней именованной переменной, имеющей 2, так что при потреблении более простая перегрузка имеет более основное имя переменной.

11
задан Jon Seigel 25 January 2010 в 15:20
поделиться

9 ответов

См. также этот вопрос. JetBrains dotTrace является лучшим профилировщиком.NET, которого я нашел (и я судил в значительной степени всех, кого существует), потому что это - единственное, которое имеет достаточно низко наверху для обработки интенсивного процессором приложения. Это также просто, точно и хорошо разработано - настоятельно рекомендованный!

9
ответ дан 3 December 2019 в 05:36
поделиться

С днем рождения:

http://www.jetbrains.com/profiler/

5
ответ дан 3 December 2019 в 05:36
поделиться

Профилировщик CLR довольно хорош.

1
ответ дан 3 December 2019 в 05:36
поделиться

Профилировщик муравьев работает на меня http://www.red-gate.com/products/ANTS_Profiler/

5
ответ дан 3 December 2019 в 05:36
поделиться

Если Вы ищете что-то свободное, я использую NProf. Хотя его довольно ограниченное и может отказать или зависнуть на определенных программах.

http://nprof.sourceforge.net/Site/Description.html

0
ответ дан 3 December 2019 в 05:36
поделиться

Мне нравится dotTrace3.1, Он работал действительно хорошо на меня.

0
ответ дан 3 December 2019 в 05:36
поделиться

Профилировщик Памяти.NET является превосходным инструментом для профилирования использования памяти.

0
ответ дан 3 December 2019 в 05:36
поделиться

Не свободный, но у меня просто была сложная проблема в огромной кодовой базе с потоками. Профилировщик Visual Studio получил меня близко, но Профилировщик Antz заблокировал его вниз. Это не свободно, но это было намного менее безболезненным, чем установка Visual Studio.

0
ответ дан 3 December 2019 в 05:36
поделиться

Наша команда использует EQATEC Profiler , я нашел его простым и простым в использовании. Он работает без изменений в исходном коде, но я не думаю, что интеграция Visual Studio возможно.

0
ответ дан 3 December 2019 в 05:36
поделиться