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

c# - Textbox not clickable but editable -

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

Matlab transpose a table vector -