2011-08-11 15 views
5

अधिक भार .NET फ्रेमवर्क में मैं लगातार निम्नलिखित की तरह अतिभारित कार्यों को देखते हैं,सी # पैरामीटर कीवर्ड और समारोह

  1. public void Log(string message) ...
  2. public void Log(string message, params object[] args) ...

मेरे सवाल के बाद से है पैराम कीवर्ड शून्य या अधिक पैरामीटर की अनुमति देता है, क्या हम पहले हस्ताक्षर से छुटकारा पा सकते हैं? केवल दूसरे हस्ताक्षर के साथ, मैं इसे नीचे दिए गए पैरामीटर के साथ कॉल कर सकता हूं, इसलिए मुझे नहीं पता कि उनके पास पहला हस्ताक्षर क्यों होगा?

Log("calling with no param"); 

उत्तर

6

एक अन्य कारण params धीमा है, यह सोचकर कि सभी पैरामीटर एकत्र किए जाते हैं और एक सरणी बनाई जाती है। तो दूसरा धीमा है।

public static string Format(string format, object arg0); 
public static string Format(string format, params object[] args); 
+1

जेफरी रिक्टर:

मिलीसेकंड एक बहुत ही सरल (count++) प्रत्येक के साथ विधि बुलाने की 1 अरब पुनरावृत्तियों के लिए लिया अपनी पुस्तक [सीएलआर के माध्यम से सी #] (http://oreilly.com/catalog/9780735627048) इसमें अधिक विस्तार से जाता है; अनिवार्य रूप से आप सही हैं, यह अनावश्यक सरणी ओवरहेड्स (निर्माण, पहुंच और कचरा संग्रह) से बचने के लिए एक अनुकूलन है। – Bevan

+2

@ बेवन: मुझे यह भी उनकी पुस्तक से पता चला है :) –

+0

ध्यान दें कि यदि आप 'प्रारूप ("foo", null) कहते हैं तो' फ़ंक्शन का दूसरा संस्करण 'args == null' के साथ कहा जाएगा। –

2

इस पैटर्न का आमतौर पर उपयोग किया जाता है यदि सरणी-कम संस्करण का सरल कार्यान्वयन होता है।

2

एक छोटा सा गति लाभ भी है। ,

  • 2472 एमएस w/ओ params
  • 7773 एमएस डब्ल्यू/params
संबंधित मुद्दे