मैं निम्नलिखित कोड है:यह समानांतर क्यों नहीं है। फॉरएच लूप प्रदर्शन में सुधार कर रहा है?
if (!this.writeDataStore.Exists(mat))
{
BlockingCollection<ImageFile> imageFiles = new BlockingCollection<ImageFile>();
Parallel.ForEach(fileGrouping, fi => DecompressAndReadGzFile(fi, imageFiles));
this.PushIntoDb(mat, imageFiles.ToList());
}
DecompressAndReadGzFile
एक ही कक्षा है कि इस विधि में निहित है में एक स्थिर तरीका है प्रति विधि नाम जैसा कि मैंने ऊपर decompressing कर रहा हूँ और GZ फ़ाइलें पढ़ने, उनमें से बहुत से, यानी। 1000 तक, इसलिए समांतरता के उपरांत लाभ के लिए इसके लायक है। हालांकि, मुझे लाभ नहीं दिख रहा है। जब मैं एएनटीएस प्रदर्शन प्रोफाइलर का उपयोग करता हूं, तो मुझे लगता है कि वे बिल्कुल उसी समय चल रहे हैं जैसे कोई समांतरता नहीं हो रही है। मैं प्रोसेस एक्सप्लोरर के साथ सीपीयू कोर भी देखता हूं और ऐसा लगता है कि संभवतः दो कोरों पर काम किया जा रहा है लेकिन एक कोर ज्यादातर काम कर रहा है। मैं समांतर होने तक समझ में नहीं आ रहा हूं। फ़ाइलों को समानांतर में फ़ाइलों को डिक्रॉप करने और पढ़ने के लिए?
अद्यतन प्रश्न: फ़ाइलों की सूची से जानकारी पढ़ने का सबसे तेज़ तरीका क्या है?
समस्या (सरलीकृत):
- वहाँ .gz फ़ाइलें (1200) की एक बड़ी सूची है।
- प्रत्येक फ़ाइल में "डेटा:" वाली एक पंक्ति होती है, स्थान और रेखा संख्या स्थिर नहीं होती है और फ़ाइल से फ़ाइल में भिन्न हो सकती है। "आंकड़े:"
- हम के बाद पहले नंबर को पुनः प्राप्त करने की जरूरत है (बस सादगी की खातिर) और (जैसे एक सूची)
प्रारंभिक सवाल में स्मृति में एक वस्तु में संग्रहीत, मैं समानांतर उपयोग कर रहा था के लिए प्रत्येक लूप लेकिन मैं 1 कोर से अधिक पर सीपीयू बाध्य नहीं लग रहा था।
क्या 'DecompressAndReadGzFile' में कोई सिंक्रनाइज़ेशन किया गया है? – SimonC
ऐसा नहीं है कि मुझे पता है। यद्यपि imageFiles पर एक कॉल है। जोड़ें जो मैं समझता हूं उससे तालाब जोड़ता है। – Seth