load testing - Precompile C# method before executing -


मैं इस तरह की कोड गति उपाय:

  var sw = new stopwatch (); sw.Start (); कुछ करो(); sw.Stop (); AddLog ("विधि गति (एमएस) है:" + sw.ElapsedMilliseconds);   

लेकिन DoSomething () की पहली कॉल धीमी है, क्योंकि कोड संकलन है। वैकल्पिक हल इस तरह दूसरे कॉल की माप गति है:

  var sw = नया स्टॉपवॉच (); कुछ करो(); sw.Start (); कुछ करो(); sw.Stop (); AddLog ("विधि गति (एमएस) है:" + sw.ElapsedMilliseconds);   

वहाँ पहली कॉल के बिना DoSomethig () precompile करने के लिए रास्ता नहीं है?

< ब्लॉककोट>

प्रलेखन स्पष्ट इसलिए राज्य नहीं है, लेकिन लेख (दूसरों के बीच) के अनुसार यदि आप एक विधि precompile करने के लिए RuntimeHelpers.PrepareMethod ।

मेरी टिप्पणी पर विस्तार करने के लिए (ऊपर उल्लिखित) यहाँ एक कोड नमूना है:।

  static void वार्मअप () {var संभाल = typeof (कार्यक्रम) .GetMethod ( "DoSomething") MethodHandle; RuntimeHelpers.PrepareMethod (संभाल); }   

अपडेट

यहां है एक अधिक सामान्य (हालांकि कुछ हद तक भंगुर) समाधान है कि उदाहरण के सदस्यों के लिए भी ध्यान देगा:

 <कोड> सार्वजनिक स्थैतिक कक्षा MethodWarmerUper {public static void वार्मअप (स्ट्रिंग methodName) {var संभाल = FindMethodWithName (methodName) .MethodHandle; RuntimeHelpers.PrepareMethod (संभाल); } निजी स्थिर MethodInfo FindMethodWithName (स्ट्रिंग methodName) {Assembly.GetExecutingAssembly () .GetTypes () .SelectMany वापसी (प्रकार = & gt; type.GetMethods (MethodBindingFlags)) .FirstOrDefault (विधि = & gt; method.Name == methodName); } प्राइवेट कॉन्स्ट बाइंडिंगफ़्लैग्स मेथडबिंगफ़्लैग = बाइंडिंगफ़्लैग.निर्धारित केवल | बाईंडिंगफ्लैग्स.पब्लिक | बाइंडिंगफ़्लैग्स। नॉनपॉलिक | बाइंडिंगफ़्लैग.इंस्टेंस | BindingFlags.Static; }    

Comments

Popular posts from this blog

Delphi: missing interface declarations for UI Automation methods -

php - how to change mysql_result($res, 0, "url"); to mysqli -

android - How to attach an image from an app to gmail -