मैं Parallel.ForEach
उपयोग कर रहा हूँ से अधिक थ्रेड पर काम करने के लिए, प्रत्येक यात्रा के लिए एक नया EF5 DbContext का उपयोग कर, सभी एक TransactionScope भीतर लिपटे "अपने बयान फिर से चलाएँ वहाँ कम सक्रिय उपयोगकर्ता हैं जब", इस प्रकार है:एकाधिक dbcontexts, EntityException
"एसक्यूएल सर्वर डेटाबेस इंजन का उदाहरण एक लॉक संसाधन प्राप्त नहीं कर सकता:
using (var transaction = new TransactionScope())
{
int[] supplierIds;
using (var appContext = new AppContext())
{
supplierIds = appContext.Suppliers.Select(s => s.Id).ToArray();
}
Parallel.ForEach(
supplierIds,
supplierId =>
{
using (var appContext = new AppContext())
{
Do some work...
appContext.SaveChanges();
}
});
transaction.Complete();
}
कुछ मिनट के लिए चलाने के बाद यह एक EntityException निम्नलिखित भीतरी विस्तार के साथ" अंतर्निहित प्रदाता ओपन पर विफल "फेंक रहा है इस समय। कम सक्रिय उपयोगकर्ता होने पर अपने बयान को फिर से करें। पूछें इस उदाहरण के लिए लॉक और मेमोरी कॉन्फ़िगरेशन की जांच करने के लिए डेटाबेस प्रशासक, या लंबे समय से चलने वाले लेनदेन की जांच करने के लिए। "
क्या किसी को पता है कि इसका कारण क्या है या इसे कैसे रोका जा सकता है? धन्यवाद।
आप शायद उत्पन्न कर रहे हैं एक लाख धागे, टीपीएल को छोटे, सीपीयू-बाध्य कार्यों और गैर-सीपीयू-बाध्य कार्यों के लिए ऑप्टिमाइज़ किया गया है ("वहां इतना अतिरिक्त CPU क्यों है ???") और अधिक धागे को बढ़ाने में। एमएसडीएन से सीमित समवर्ती शेड्यूलर का उपयोग करें –
http://msdn.microsoft.com/en-us/library/ee789351.aspx –
मुझे लगता है कि आप सही हैं कि यह कम हो रहा था धागे के विज्ञापन। बीएमडीक्सन द्वारा सुझाए गए समांतरता की डिग्री को सीमित करने से समस्या हल हो गई। –