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
Post a Comment