рд╢рд╛рдорд┐рд▓ рд╕рдореАрдХреНрд╖рд╛:
- рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 (рдкреНрд░реАрдорд┐рдпрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ) ( MSDN , рдмреНрд▓реЙрдЧ ) рдореЗрдВ рдПрдХреАрдХреГрдд;
- RedGate рд╕реЗ ANTS рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ ;
- JetBrains рд╕реЗ dotTrace;
- EQATEC рджреНрд╡рд╛рд░рд╛ EQATEC рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ред
рд╣рдо рдПрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ? рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ (рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ) рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреВрд░реНрдг (рд╕рдордп) рдФрд░ рд░рд┐рд╢реНрддреЗрджрд╛рд░ (рдкреНрд░рддрд┐рд╢рдд) рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВ, ASP.NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╖рдп ( рдбрд╛рдЙрдирд▓реЛрдб ) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛:
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
public partial class Default : System.Web.UI. Page { protected void Page_Load( object sender, EventArgs e) { SampleBadMethod1(); SampleBadMethod2(); } private void SampleBadMethod1() { for ( int i = 0; i < 100; i++) { SampleBadSubMethod1(); } } private void SampleBadSubMethod1() { Thread.Sleep(10); } private void SampleBadMethod2() { for ( int i = 0; i < 10000; i++) { SampleBadSubMethod2(); } } private void SampleBadSubMethod2() { Thread.Sleep(1); } } * This source code was highlighted with Source Code Highlighter .
рдПрдХ рдорд╛рдореВрд▓реА рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдкрд╣рд▓реЗ рдореИрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪреБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЯреЗрд▓рд╕реНрдкрд┐рди рд╕реНрдкрд╛рдпрд╡рд░реНрдХреНрд╕ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реНрдЯреЗрдм-рдмрд╛рдп-рд╕реНрдЯреЗрдк рдЧрд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдХреЛ рдЗрддрдирд╛ рдкреЙрд▓рд┐рд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рддреБрд░рдВрдд рд░реБрдЪрд┐ рд╣реЛ, рдЙрд╕реЗ рдХреБрдЫ рд╕рд╣реА рдЪреАрдЬреЗрдВ рд╕рд┐рдЦрд╛рдПрдВред рдФрд░ рдореИрдВрдиреЗ рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рджреЗрдЦрд╛? рдПрдХ рдЯреЗрдврд╝рд╛ рд▓реЗрдЖрдЙрдЯ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдФрд░ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдорд┐рд╢реНрд░рдг, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрдкреНрдЯреАрдорд▓ рдХреНрд╡реЗрд╢реНрдЪрди, рд╕реЗрд▓реЗрдХреНрдЯ * рднрд▓реЗ рд╣реА 1-2 рдлреАрд▓реНрдбреНрд╕ рд╕реНрдЯреНрд░реЗрдЪ рдХрд┐рдП рдЧрдП рд╣реЛрдВ ... рд╕рднреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди 4 рдмрд╛рд░ (4 рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП) рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рдЯрд╛рдЗрдо рдХрдВрдЬреНрдпреВрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП 3 рдорд┐рдирдЯ рдореЗрдВ рдЯреЗрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдЖрд╡реЗрджрдиред рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЯреЗрд▓рд╕реНрдкрд┐рди рд╕реНрдкрд╛рдпрд╡рд░реНрдХреНрд╕ рдХреА рд╣рдбреНрдбрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдкрд░реНрдпрд╛рдкреНрдд рдЧреАрдд, рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ред
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рд▓реЙрдиреНрдЪрд┐рдВрдЧ рд╡реА.рдПрд╕. рд╕реЗ рдореЗрдиреВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -> рд▓реЙрдиреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдЬрд╝рд╛рд░реНрдбред
рдХреБрдЫ рд╕рд░рд▓ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдкреАрдпреВ рдирдореВрдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ), рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рдХреНрдпрд╛ ADO.NET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдлрд┐рдирд┐рд╢ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреЙрдЬрд╝ рдФрд░ рд╕реНрдЯреЙрдк рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдкрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рд▓рдЯрдХ рдЬрд╛рдПрдЧреАред
![](https://habrastorage.org/storage/habraeffect/89/e7/89e7bc4dee0e82b60adf4c61fa76ed69.png)
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрдЯреЙрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
![](https://habrastorage.org/storage/habraeffect/4e/95/4e957ef81584331a9f986db3d61fc5be.png)
рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдпрд╣рд╛рдБ , рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╕реНрдХреНрд░реАрди рд╣реИ:
![](https://habrastorage.org/storage/habraeffect/41/0a/410a47f688042adeeb4141cd5b1f7528.png)
рдЕрдм рд╣рдореЗрдВ CodeBadMethod1 рдФрд░ SampleBadMethod2 рдХреЛрдб рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред "рдЕрдиреБрдХреВрд▓рди" рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд▓реВрдк рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 100 рд╕реЗ 50 рдФрд░ 10000 рд╕реЗ 1000 рддрдХ)ред
рд╣рдореЗрдВ рдкреБрди: рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг-> рдкрд░рдлреЙрдореЗрдВрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
![](https://habrastorage.org/storage/habraeffect/60/57/605783c1084e85888e532173564fc504.png)
рдЦреИрд░, рд╣рдо рдорд╣рд╛рди рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ рд╣реИред
рдЕрдиреНрдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
ANTS рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдирдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп, рдирд┐рдореНрди рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
![](https://habrastorage.org/storage/habraeffect/e9/1b/e91b7bc745000ada5832a77e9ade128d.png)
рдпрд╣рд╛рдВ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ dev рд╕рд░реНрд╡рд░ рдкрд░ ASP.NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕рдВрд╕реНрдХрд░рдг .net, рдкреЛрд░реНрдЯ рдирдВрдмрд░, рдЖрджрд┐ рдХрд╛ рдкрде рд╣реИред
рд╕реНрдЯрд╛рд░реНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп ANTS рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдореЗрдВ, рд╕рдордп рдЕрдХреНрд╖ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
![](https://habrastorage.org/storage/habraeffect/f3/33/f3335b0994daa550c92150ed7b61dcbc.png)
рдореИрдВрдиреЗ рд╕реНрдХреНрд░реАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ), рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдКрдкрд░реА рднрд╛рдЧ рдореЗрдВ рдЖрдк CPU рд▓реЛрдбрд┐рдВрдЧ (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдХреЗрддрдХ рдЬрд┐рд╕реЗ рдЖрдк рд╕реНрд╡рдпрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рд╕рдордпрд░реЗрдЦрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрдВрджреНрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рд╣реИред рдХреЙрд▓ рдХреЗ рд╕рдордп рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВ (рдпрджрд┐ рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ)ред
рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рд╖рдорддрд╛ рд╣реИ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ SampleBadSubMethod2 рд╡рд┐рдзрд┐ рдХрд╛ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп 14 рдПрдордПрд╕ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ 1 рдПрдордПрд╕ рд╡рд┐рд▓рдВрдм рд╣реИ рдФрд░ рдЗрд╕реЗ 10,000 рдЧреБрдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж ANTS рдХрд┐рд╕реА рддрд░рд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ Thread.Sleep рдореЗрдердб рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред
рдЕрдм, рдлрд┐рд░ рд╕реЗ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝" рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ... рд╣рдо рдЗрд╕рдХреА рддреБрд▓рдирд╛ ANTS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рд╕рд╛рдЗрдЯ рдкрд░ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ, рд╡реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред рдЦреИрд░, рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ :)
рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ
dotTrace
рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓-> рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
![](https://habrastorage.org/storage/habraeffect/a8/aa/a8aa8cdfec98577593312f9e8ae72be7.png)
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдиреЗрдВ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ!
рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЫреЛрдЯреА рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рд╛рдкреНрдд рд╕реНрдиреИрдкрд╢реЙрдЯ) рдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред
![](https://habrastorage.org/storage/habraeffect/be/69/be69f8495259d1ed3ddb52560895d719.png)
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВрдЧреЗ:
![](https://habrastorage.org/storage/habraeffect/e9/21/e9218df669be1c70071ae90aaba0e40a.png)
рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рддрд┐рд╢рдд рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рджреЗрдЦрддреЗ рд╣реИрдВред рджрд╛рдИрдВ рдУрд░ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
![](https://habrastorage.org/storage/habraeffect/bd/2b/bd2bc81041956591e0d2fd1b330079cf.png)
рдЦреИрд░, рдЕрдиреБрдХреВрд▓рди рдПрдХ рд╕рдлрд▓рддрд╛ рдереАред
рдФрд░ рдЕрдВрдд рдореЗрдВ
EQATEC рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдкреНрд░реЙрдлрд╝рд╛рдЗрд▓рд░ рдЪрд▓рд╛рдПрдВ, рд╡рд┐рдВрдбреЛ рджреЗрдЦреЗрдВ:
![](https://habrastorage.org/storage/habraeffect/cf/fd/cffd76ea1c42c8ddcfa4aea68a30e840.png)
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдкрде рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдмрд┐рд▓реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
![](https://habrastorage.org/storage/habraeffect/f7/45/f7459a1dff1f10c71e75e85853bbd10d.png)
рдлрд┐рд░ рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЗрдЬ рд▓реЛрдб рдХрд░реЗрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ Profiled appication xxx рдкреНрд░рд╛рд░рдВрдн рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдФрд░ "рд╕реНрдиреИрдкрд╢реЙрдЯ рд▓реЗ" рдФрд░ "рд░реАрд╕реЗрдЯ рдХрд╛рдЙрдВрдЯрд░" рдмрдЯрди рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
![](https://habrastorage.org/storage/habraeffect/0c/50/0c50448709dc248d0c920d2979466f1f.png)
рдЕрдЧрд▓рд╛, "рд╕реНрдиреИрдкрд╢реЙрдЯ рд▓реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
![](https://habrastorage.org/storage/habraeffect/2c/2d/2c2d823076c51a52c2e0f9af4b7eaa6f.png)
рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реИ:
![](https://habrastorage.org/storage/habraeffect/96/4f/964f61d76f87bbb5ba9a56b8a270a550.png)
рд╣рдо рдХреЙрд▓ рдХреЗ рдЖрдВрдХрдбрд╝реЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ (рдиреАрдЪреЗ) рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдмреНрд▓реЙрдХ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдЖрдк рдХреЙрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
![](https://habrastorage.org/storage/habraeffect/87/5c/875c9ae65f89a50931354ff584322543.png)
рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдлрд┐рд░ рд╕реЗ, рд╣рдордиреЗ рдХрдИ рдмрд╛рд░ рдЖрд╡реЗрджрди рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдИ рд╣реИред
рдпрд╣ рд╕рдм, рдкреНрд░рд╕реНрддреБрдд рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рджреЗрдЦреЗрдВред
рд╕рд╛рд░рд╛рдВрд╢
рд╡реАрдПрд╕ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ | рдЪреАрдВрдЯрд┐рдпреЛрдВ | dotTrace | EQATEC | |
---|---|---|---|---|
рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди (% рдореЗрдВ) | ![]() | ![]() | ![]() | ![]() |
рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдВ (рд╕реЗрдХрдВрдб рдореЗрдВ, ms, рдЖрджрд┐) | ![]() | ![]() | ![]() | ![]() |
рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ | ![]() | ![]() | ![]() | ![]() |
рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрд░реЛрдд рджреЗрдЦреЗрдВ | ![]() | ![]() | ![]() | ![]() |
рджреЛ рдорд╛рдкреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ | ![]() | ![]() | ![]() | ![]() |
рдХреАрдордд | > 5000 $ 1) | 395 $ 2 рд╕реЗ) | 199 $ 3 рд╕реЗ) | рдореБрдлреНрдд 4) |
1) рд╡реАрдПрд╕ рдкреНрд░реАрдорд┐рдпрдо рдФрд░ рдКрдкрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ
2) рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
3) рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ
4) рдХрдо рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде $ 10 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рднрд░реА рд╣реБрдИ dlls рдХреА рд╕реАрдорд╛
рдЕрдм рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдореИрдВрдиреЗ рдЕрд▓рдЧ рд╕реЗ рджреЗрдЦрд╛, рддреБрд▓рдирд╛рддреНрдордХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИред
рд╡реАрдПрд╕ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
![+ +](https://habrastorage.org/storage/habraeffect/3a/4c/3a4c88d775787eeaa48a638aa5b7e8ae.png)
![+ +](https://habrastorage.org/storage/habraeffect/3a/4c/3a4c88d775787eeaa48a638aa5b7e8ae.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
ANTS рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
![+ +](https://habrastorage.org/storage/habraeffect/3a/4c/3a4c88d775787eeaa48a638aa5b7e8ae.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
dotTrace
![+ +](https://habrastorage.org/storage/habraeffect/3a/4c/3a4c88d775787eeaa48a638aa5b7e8ae.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
EQATEC
![+ +](https://habrastorage.org/storage/habraeffect/3a/4c/3a4c88d775787eeaa48a638aa5b7e8ae.png)
![- -](https://habrastorage.org/storage/habraeffect/5f/3d/5f3d34bb2efca70c9ff6a4f358a4d4c1.png)
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реВрдВрдЧрд╛ред рдореЗрд░реА рдкрд╕рдВрдж EQATEC Profiler рд╣реИ, рдХрдИ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реАрдПрд╕ рдкреНрд░реАрдорд┐рдпрдо рдпрд╛ рдЕрд▓реНрдЯреАрдореЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рддреЛ рдПрдХреАрдХреГрдд рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрддреНрдкрд╛рдж рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЦрд░реАрджрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧреАред рд╢реЗрд╖ рджреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рд╕реЗ, ANTS рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЕрдкрдиреА рд╢рдХреНрддрд┐ рдореЗрдВ рд╣рдбрд╝рддрд╛рд▓реА рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХреЛрдИ рддреБрд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред DotTrace рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдЧреНрд░рд╣рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдмрд╣реБрддрд╛рдпрдд рд╣реИред
рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреА рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреАрдПрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред