मैं एक .NET 4.0 एप्लिकेशन पर काम कर रहा हूं, जो एक डबल रिटर्न करने वाले दो डबल्स पर अधिक महंगी गणना करता है। यह गणना कई हजार वस्तुओं में से प्रत्येक के लिए की जाती है । इन गणनाओं को Task
थ्रेडपूल धागे पर किया जाता है ।
कुछ प्रारंभिक परीक्षणों से पता चला है कि एक ही गणना बार-बार की जाती है, इसलिए मैं एन परिणामों को कैश करना चाहूंगा । जब कैश भरा हुआ है, मैं least- बाहर फेंक करना चाहते हैं अक्सर हाल ही में प्रयुक्त आइटम। ( संपादित करें: मुझे एहसास हुआ कि कम से कम अक्सर समझ में नहीं आता है, क्योंकि जब कैश भरा हुआ है और मैं एक परिणाम की जगह एक नई गणना करता हूं, तो यह होगा कि एक का उपयोग कम से कम अक्सर किया जाएगा और अगली बार एक नए परिणाम की गणना की जाएगी और कैश में जोड़ा गया)
इसे लागू करने के लिए, मैं इनपुट्स और कैश्ड परिणामों को संग्रहीत करने के लिए Dictionary<Input, double>
(जहां Input
दो इनपुट डबल मानों को संग्रहीत करने वाला एक मिनी-क्लास होगा) का उपयोग करने के बारे में सोच रहा था । हालांकि, अंतिम बार जब किसी परिणाम का उपयोग किया गया था, तो मुझे भी नज़र रखने की आवश्यकता होगी। इसके लिए मुझे लगता है कि जब कैश भरा जा रहा था, तो मुझे तानाशाही से एक परिणाम निकालने की आवश्यकता होगी, जिसमें मुझे जानकारी संग्रहीत करने के लिए दूसरे संग्रह की आवश्यकता होगी। मुझे चिंता है कि लगातार इस सूची को बनाए रखने से प्रदर्शन पर नकारात्मक असर पड़ेगा।
क्या ऐसा करने का एक बेहतर (यानी अधिक प्रदर्शन करने वाला) तरीका है, या शायद एक सामान्य डेटा संरचना भी है जिससे मैं अनजान हूं? अपने समाधान की अनुकूलता निर्धारित करने के लिए मुझे किस प्रकार की चीजों की रूपरेखा / माप करनी चाहिए?