2011-05-04 13 views
9

क्या कोई मुझे एक बात समझा सकता है। जैसा कि मैं अपने कार्य में AsParallel() निष्पादित करता हूं। इसलिए, यदि क्वेरी बड़ी मात्रा में डेटा लौटाती है तो चर 'डी' समय पर खाली हो सकती है जब 'foreach' कंसोल निष्पादित करना शुरू कर देता है। राइटलाइन?कृपया समझाएं AsParallel()

var integerList = Enumerable.Range(1, 100); 
var d = from x in integerList.AsParallel() 
where x <= 25 
select x; 
foreach (var v in d) 
{ 
Console.WriteLine(v); 
} 

उत्तर

3

AsParallelPLINQ सुविधा है। PLINQ स्वचालित रूप से स्थानीय LINQ क्वेरी समानांतर करता है। PLINQ का उपयोग करने में आसान होने का लाभ है जिसमें यह कार्य विभाजन और बोतल के परिणामस्वरूप दोनों संयोजनों के बोझ को ऑफ़लोड करता है।

PLINQ का उपयोग करने के लिए, बस इनपुट अनुक्रम पर AsParallel() पर कॉल करें और फिर LINQ सामान्य रूप से क्वेरी जारी रखें।

आपके मामले में परिवर्तनीय d केवल PLINQ खाली नहीं हो सकता है। यदि यह खाली होगा तो इसका मतलब है कि संग्रह में कोई तत्व नहीं है जो x <= 25 की स्थिति को पूरा करता है।

आप अधिक here

1

नहीं। एक बार जब आप जोड़ लिया है .AsParallel() पढ़ सकते हैं, PLINQ पारदर्शी रूप से कहाँ, OrderBy निष्पादित, और क्लासिक डेटा समानांतर मूल्यांकन तकनीक का उपयोग उपलब्ध प्रोसेसर के सभी पर चयन होगा। असल में क्वेरी निष्पादित नहीं होती है जब तक कि आप इसे फ़ोरैच लूप में 'स्पर्श' न करें (PLINQ केवल LINQ के रूप में डिफर्ड किए गए निष्पादन का उपयोग करता है)। सामान्य थ्रेड सामान्य रूप से क्वेरी निष्पादन से वापस आने तक निष्पादन रोक देगा।

Additional info here..

संबंधित मुद्दे