अद्यतन: जैसा कि मुझे उम्मीद करनी चाहिए थी, इस प्रश्न के जवाब में समुदाय की ध्वनि सलाह "इसे मापने और देखने" थी। chibacity posted an answer कुछ वाकई अच्छे परीक्षणों के साथ जो मेरे लिए यह किया; इस बीच, मैंने अपना खुद का परीक्षण लिखा; और प्रदर्शन अंतर मैंने देखा कि वास्तव में इतनी बड़ी है कि I felt compelled to write a blog post about it.महंगा स्थानीय लोगों को बदलने के लिए थ्रेडस्टैटिक का उपयोग करना - अच्छा विचार?
हालांकि, मैं भी Hans's explanation को स्वीकार करना चाहिए कि ThreadStatic
विशेषता वास्तव में मुक्त नहीं है और वास्तव में एक CLR सहायक विधि पर निर्भर करता है अपना जादू काम करने के लिए गया था। इससे यह स्पष्ट रूप से स्पष्ट हो जाता है कि क्या यह किसी भी मनमाना मामले में लागू करने के लिए उचित अनुकूलन होगा।
मेरे लिए अच्छी खबर यह है कि में मेरे मामले में, ऐसा लगता है कि यह एक बड़ा सुधार हुआ है।
मैं एक तरीका है जिसके (कई अन्य बातों के अलावा) में कुछ स्थानीय चर के लिए कुछ मध्यम आकार के सरणियों (~ 50 तत्वों) को दर्शाता है की है।
कुछ प्रोफाइलिंग के बाद मैंने इस विधि को प्रदर्शन बाधा के रूप में पहचाना है। ऐसा नहीं है कि विधि को कॉल करने में काफी लंबा समय लगता है; बल्कि, इसे कई बार कहा जाता है, बहुत जल्दी (सत्र में लाखों से लाखों बार, जो कई घंटे होंगे)। तो इसके प्रदर्शन में अपेक्षाकृत छोटे सुधार भी सार्थक होना चाहिए।
यह मेरे लिए हुआ कि शायद प्रत्येक कॉल पर एक नई सरणी आवंटित करने के बजाय, मैं [ThreadStatic]
चिह्नित फ़ील्ड का उपयोग कर सकता हूं; जब भी विधि कहा जाता है, तो यह जांच करेगा कि क्या मौजूदा धागे पर फ़ील्ड प्रारंभ किया गया है, और यदि नहीं, तो इसे प्रारंभ करें। उस बिंदु से उसी थ्रेड पर सभी कॉलों पर उस बिंदु पर जाने के लिए तैयार एक सरणी होगी। यह एक अच्छा विचार की तरह प्रतीत होता है:
मेरा प्रश्न केवल यह है (। विधि सरणी अपने आप में हर तत्व है, तो होने सरणी में "बासी" तत्वों एक मुद्दा नहीं होना चाहिए initializes)? इस तरह ThreadStatic
विशेषता का उपयोग करने के लिए समस्याएं हैं (यानी, स्थानीय चर के लिए नई वस्तुओं को तत्काल करने की लागत को कम करने के लिए प्रदर्शन अनुकूलन के रूप में) जिन्हें मुझे पता होना चाहिए? ThreadStatic
फ़ील्ड का प्रदर्शन शायद महान नहीं है; उदाहरण के लिए, क्या इस सुविधा को संभव बनाने के लिए, पृष्ठभूमि में बहुत अधिक "सामान" हो रहा है, अपने स्वयं के लागत के सेट के साथ?
ऐसा नहीं है कि मैं भी रूप में सस्ते कुछ (?) एक 50-तत्व के रूप में अनुकूलन करने के लिए प्रयास करने के लिए गलत हूँ मेरे लिए काफी प्रशंसनीय भी है सरणी-और उस यदि ऐसा है तो है, निश्चित रूप से मुझे पता है-लेकिन जाने सामान्य सवाल अब भी आयोजित करता है।
इसे आज़माएं और मापें। मुझे लगता है कि थ्रेड-लोकल आइटम तक पहुंच या तो मुक्त नहीं है, हालांकि फिर से आवंटन से सस्ता हो सकता है। – 9000
इसे आज़माएं और इसे मापें। – BRampersad
यदि आप .NET4 का उपयोग करने में सक्षम हैं तो [थ्रेडलोकल '] (http://msdn.microsoft.com/en-us/library/dd642243.aspx) भी न भूलें। जूरी अभी भी 'थ्रेडस्टैटिक' से बेहतर प्रदर्शन करता है या नहीं, लेकिन इसका उपयोग करना थोड़ा आसान है (और सही पाने के लिए)। मैं आपको 'थ्रेडलोकल ' पर विचार करने की सलाह दूंगा और इसे अपने मानक में शामिल करूँगा। –
LukeH