Подсчитывать вызовы функций

#c# #.net

#c# #.net

Вопрос:

Я хотел бы подсчитать, сколько раз следующие методы выполнялись с момента запуска приложения. Как я могу это сделать?

 System.Drawing.Graphics.FromHdcInternal(IntPtr hdc)
System.Drawing.BufferedGraphicsContext.CreateBuffer(IntPtr src, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height)
  

Ответ №1:

AQTime делает это без труда.

Ответ №2:

Я могу придумать два способа. Одним из них является использование профилировщика, который может быть самым простым.

Другой способ заключается в том, чтобы обернуть вызовы в функцию, которая подсчитывает их за вас. Поиск и замена сделают все остальное.

 private int invokeCount = 0;

public static Graphics FromHdcInternalWrapped(IntPtr hdc)
{
     invokeCount  ;
     return Graphics.FromHdcInternal(hdc);
}
  

Лично я бы придерживался профилировщика.

Ответ №3:

Каноническим, самым простым способом, вероятно, было бы просто использовать приложение профилировщика. Лично у меня есть хороший опыт работы с JetBrains dotTrace, но есть и другие варианты.

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

Предполагая, что причиной вашего желания узнать это на самом деле является производительность, я думаю, что неплохо бы взглянуть на профилировщик. Вы можете попытаться оптимизировать свой код, сделав обоснованное предположение о том, где находятся узкие места, но если вы используете профилировщик, вы действительно можете это измерить. И мы все знаем, дважды отмерь, один раз отрежь 😉