2013-01-17 7 views
5

बस कुछ सलाह मेरे पास प्रक्रिया करने और किसी अन्य सिस्टम पर जाने के लिए 100.000+ xml फ़ाइल है।समानांतर का उपयोग कर प्रसंस्करण फ़ाइलें। क्या यह सबसे अच्छा तरीका है

public void ProcessFiles() 
    { 
     IEnumerable<FileInfo> orderedFiles = GetFilesOrdered(); 

     foreach (FileInfo file in orderedFiles) 
     { 
      ProcessFile(file); 
     } 
    } 

मैं टास्क समानांतर पुस्तकालय के बारे में लेकिन पढ रहा हूं कि पूरा भरोसा नहीं:

अवधारणा मैं की तरह एक पाश है बहुत सरल है। थ्रेडिंग पर बहुत गहराई से नहीं। ऐसा लगता है कि टीपीएल मेरे लिए बहुत सारे लपेटता है।

इसे रखने के लिए यह केवल समानांतर उपयोग करने का मामला है। Foreach?

किसी भी नमूने या सुझाव

+0

हाय, थ्रेड सुरक्षा के लिए, यह सुनिश्चित करने के लिए बेहतर है कि इनमें से किसी भी फ़ाइल को समवर्ती रूप से एक्सेस नहीं किया जा सकता है। –

+0

@ जो.वांग धन्यवाद क्या आपका मतलब लॉक जोड़ना है? यदि नहीं तो आप मुझे एक स्निपेट प्रदान कर सकते हैं? आपके समय के लिए धन्यवाद – user9969

+0

'इंडेक्स' चर के लिए क्या है? आप इसका उपयोग नहीं कर रहे हैं। – Bridge

उत्तर

0

हाँ, यह Parallel.ForEach साथ foreach की जगह के रूप में सरल हो सकता है।

आपको याद रखना होगा कि एकाधिक थ्रेड अब ProcessFile निष्पादित कर रहे हैं।

तो, यदि आप उस विधि में किसी भी साझा स्थिति में लिख रहे हैं, तो आपको इसकी सुरक्षा के लिए सिंक्रनाइज़ेशन संरचनाओं का उपयोग करना होगा। Albahari

+4

एक और विचार: समांतरता को जोड़ना केवल तभी समझ में आता है जब आईओ वर्तमान में बोतल-गर्दन नहीं है –

+0

@ निकोलसबटलर आप समानांतर पुस्तकालय के साथ दौड़ की स्थिति से कैसे बचते हैं? क्या आप लॉक – user9969

+0

@ user231465 का उपयोग करते हैं, यह एक बड़ा विषय है। मेरा सुझाव है कि आप जो अल्बाहारी की ईबुक पढ़ लेंगे। यदि आप समवर्ती कोड सही तरीके से लिखने जा रहे हैं तो आपको इसमें सब कुछ समझने की आवश्यकता होगी। –

0

आशा है कि यह आप के लिए उपयोगी है:

यदि आप बहु सूत्रण के लिए नए हैं, वहाँ एक महान परिचयात्मक ebook आप यहाँ पढ़ चाहिए। समानांतर में फ़ाइल को स्थानांतरित करने के तरीके को प्रदर्शित करने के लिए सरल स्निपेट।

 List<FileInfo> files = new List<FileInfo>(); 
     files.Add(new FileInfo("F:\\1.xml")); 
     files.Add(new FileInfo("F:\\2.xml")); 
     files.Add(new FileInfo("F:\\3.xml")); 



     Parallel.ForEach(files, f => 
     { 
      f.MoveTo("d:\\test\\" + f.Name); 
     }); 
संबंधित मुद्दे