2016-03-24 16 views
0

Bazı örnek kodum var. Çok miktarda veri KodAdim%:Dosyaların daha hızlı okunması, işlenmesi ve oluşturulması nasıl yapılır?

 foreach (var currentFile in currentDirectory) 
     { 
      string[] contents = File.ReadAllText(currentFile).Split('%'); 
      using (XmlWriter writer = XmlWriter.Create(currentFile.Replace(".txt",".xml"))) 
      { 
       writer.WriteStartDocument(); 
       writer.WriteStartElement("INFO"); 
       writer.WriteStartElement("INFO"); 
       writer.WriteElementString("USER", contents[1]); 
       writer.WriteElementString("USERDATA", contents[2]); 
       writer.WriteEndElement(); 
       writer.WriteEndElement(); 
       writer.WriteEndDocument(); 
      } 
     } 

böyle metinle metin dosyası var. Şimdi bu programı çok iş parçacıklı hale getirmeye çalışıyorum. Hangi yönü kazmalıyım? zaman uyumsuz/bekliyoruz? Multithreading için gerçekten yeni.

+0

Size yapmaya çalışıyorsun ne biraz daha bilgi gerekebilir. Dizindeki tüm dosyalar üzerinde tek bir geçiş yapmanız ve her birini metinden xml'ye dönüştürmeniz gerekiyor mu? Göz önünde bulundurmanız gereken tek şey, bu dosyalara SADECE bir tanesi olup olmadığınızı belirlemektir. – CM0491

+0

Paralelizm, yalnızca işleminizin CPU-yoğun bölümünü kullanacaktır. Prosesinizin birçoğunun paralellikten fayda görmeyecek I/O olduğu anlaşılıyor. Yani aynı anda 3 dosyayı işlemek 1 işlemek için gerçekçi bir hedef değildir. –

+0

Evet, dizini dosya (lar) ile geçirip sonra işleyip xml dosyası yapıyorum. Yani dizindeki her bir textfile bir xml olacaktır. Ben çok kez –

cevap

1

foreach'u Parallel.ForEach olarak değiştirebilirsiniz.

Örnek: How to: Write a Simple Parallel.ForEach Loop

Ve benzer bir soru: Read and process files in parallel C#

+1

Parallel.ForEach, dosyaların küçük bir bölümünde daha hızlı yapmaz. –

+0

Dosyaların büyük bir kısmı daha iyi olur, bu da normaldir. Luc Morin’in de dediği gibi: Bir diskten dosyaları okuyorsunuz. Böylece iş parçacığınız aynı diskten okumak için yarışıyor. Multithreading, çalışma zamanınızı sahip olduğunuz cpus sayısına göre kesecek sihirli bir şey değildir. İlgili diğer faktörler vardır. – Chris

+0

İşlemi hızlandırmak için CPU'ya bağlı bir iş yok, değil mi? –

İlgili konular