मेरे पास समानांतर है। फॉरएच लूप शरीर के अंदर एक गहन ऑपरेशन चला रहा है।समानांतर के अंदर हैशटेबल का उपयोग करना। फॉरएच?
ऑपरेशन मूल्यों को संग्रहीत करने के लिए हैशटेबल का उपयोग कर सकता है, और लगातार अन्य लूप आइटमों के लिए पुन: उपयोग किया जा सकता है। गहन ऑपरेशन पूरा होने के बाद मैं हैशटेबल में जोड़ता हूं, अगला लूप आइटम हैशटेबल में देख सकता है और फिर गहन ऑपरेशन चलाने के बजाए ऑब्जेक्ट का पुन: उपयोग कर सकता है।
हालांकि, क्योंकि मैं समानांतर का उपयोग कर रहा हूं। इसके लिए एक असुरक्षित समस्या है, जिसके कारण हैशटेबल है। जोड़ें और इसमें शामिल हैं (कुंजी) कॉल सिंक से बाहर हो जाती हैं, क्योंकि वे समानांतर में चल रहे हैं। ताले पेश करने से perf मुद्दों का कारण बन सकता है।
यहाँ नमूना कोड:
Hashtable myTable = new Hashtable;
Parallel.ForEach(items, (item, loopState) =>
{
// If exists in myTable use it, else add to hashtable
if(myTable.ContainsKey(item.Key))
{
myObj = myTable[item.Key];
}
else
{
myObj = SomeIntensiveOperation();
myTable.Add(item.Key, myObj); // Issue is here : breaks with exc during runtime
}
// Do something with myObj
// some code here
}
होना चाहिए कुछ एपीआई, TPL पुस्तकालय के अंदर संपत्ति की स्थापना, कि इस परिदृश्य को संभाल सकता। है?
@AdamRalph लगता है: जब से वह TPL पुस्तकालय वह उपयोग कर रहा है पहले से ही .NET 4 का उपयोग कर रहा है।0 –
@ एडम और यासीर: सही, नए संग्रह समानांतर LINQ के साथ दिमाग में डिजाइन किए गए थे। –
Yup उत्तर और टिप्पणियों के लिए धन्यवाद – Vin