355. Profiling interception

בהמשך לפעמים הקודמות,

נראה כעת עוד שימוש לInterception.

נניח ואנו מעוניינים לבדוק כמה זמן לוקח לפונקציות שלנו לרוץ ולכתוב זאת ללוג.

אופציה אחת היא להריץ Profiler ולבדוק כמה זמן לקח לפונקציות לרוץ. שיטה זו טובה, אבל לא יכתבו לנו לוגים אודות מדידות אלה.

אופציה שנייה היא לשנות את הקוד של הפונקציות ולמדוד את משך הקריאה (ראו גם טיפ מספר 298):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int MyMethod(int id, string name)
{
Stopwatch sw = new Stopwatch();
sw.Start();
// My Method content
sw.Stop();
mLog.DebugFormat("My method took {0} milli-seconds to run",
sw.ElapsedMilliseconds);
return result;
}

אפשר לתת לזה סינטקס יותר כיפי כמו ששני עשה בטיפ 300, אבל עדיין זה מצריך לשנות את המתודות.

מה שנוכל לעשות במקום זה להשתמש בInterception כדי לעשות את זה בצורה הבאה:

נפנה את כל המתודות לRoute ונמדוד כמה זמן לקח להן לבצע את הקריאה מקורית.

אחר כך נכתוב זאת ללוג.

1
2
3
4
5
6
7
8
9
10
11
12
13
private void Route(MethodCallInfo call)
{
Stopwatch sw = new Stopwatch();
sw.Start();
call.Proceed();
sw.Stop();
mLog.DebugFormat("My method took {0} milli-seconds to run",
sw.ElapsedMilliseconds);
}

מגניב 😃

מה שיפה בזה, זה שאם מממשים את זה נכון, אפשר להפעיל ולבטל את הכתיבות האלה בהתאם לצורך ע"י קונפיגורציה או שינוי במקום אחד.

בהמשך נראה עוד שימושים יפים לInterception.

המשך שנמדד לטובה.

שתף