Çözüldü C# while döngüsü durmuyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

sauranex

Hectopat
Katılım
24 Eylül 2020
Mesajlar
643
Makaleler
1
Çözümler
3
Herkese selam, bir kodum var ve bu kod sonucu doğru veriyor fakat while döngüsünden çıkmıyor, hatta %30 işlemci yüküne ulaşıyor. StreamReader kaynaklı olduğunu düşündüm ve .close(); yöntemiyle açtığım dosyaları kapatmaya çalıştım fakat işlemci yükü programı durdurduktan sonra gidiyor, thread ile kullanınca durum yine aynı. Çok araştırdım fakat çözemedim, yardımcı olan arkadaşlara şimdiden teşekkürler.

Buton click olayı;

C#:
            String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
            String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";

            using (FileStream fs = File.Open(originalFile, FileMode.Open))
            using (BufferedStream bs = new BufferedStream(fs))
            using (StreamReader sr = new StreamReader(fs))
            {
                String line;
                while (sr.EndOfStream == false)
                {
                    line = sr.ReadLine();
                    if (line.Length > 1)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Insert(0, "??");
                        sb.Insert(2, line);
                        sb.Insert(line.Length + 2, "*");
                        String line_Aux = sb.ToString();
                        File.AppendAllText(resultFile, line_Aux + "\r\n");
                    }
                }
            }
 
Çözüm
C#:
String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";
String line;

using (FileStream fs = File.Open(originalFile, FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(fs))
{
    do
    {
        line = fs.ReadLine();
        if (line.Length > 1)
        {
            StringBuilder sb = new StringBuilder();
            sb.Insert(0, "??");
            sb.Insert(2, line);
            sb.Insert(line.Length + 2, "*");
            String line_Aux = sb.ToString();
            File.AppendAllText(resultFile, line_Aux + "\r\n");
        }
    } while (line != null);
}

line tanımlamayı unutmuşum.
Kod çalışıyor fakat döngü durmuyor.

Sorunu çözdüm, thread olmadan bile sıkıntısız işlem yapıyor, 400.000 satırlık metin dosyasını %2 işlemci gücü [AMD Ryzen7 5700x] ile 1 saniyede hallediyor.

Sorun çözümü; Büyük boyutlu dosyaları "File.AppendAllText" ile yazdırıldığı için yüksek işlemci kullanımına ulaşıyordu ve durmuyordu. Çözüm olarak StreamWriter kullandım, çünkü büyük boyutlu dosyaları ancak bu şekilde sıkıntısız yazdırabiliriz.

C#:
            String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
            String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";

            using (FileStream fs = File.Open(originalFile, FileMode.Open))
            using (BufferedStream bs = new BufferedStream(fs))
            using (StreamReader sr = new StreamReader(fs))
            using (StreamWriter sw = new StreamWriter(resultFile))
            {
                String line;
                while (sr.EndOfStream == false)
                {
                    line = sr.ReadLine();
                    if (line.Length > 1)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Insert(0, "||");
                        sb.Insert(2, line);
                        sb.Insert(line.Length + 2, "^");
                        String line_Aux = sb.ToString();
                        sw.Write(line_Aux + "\r\n");
                    }
                }
            }
C#:
String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";
String line;

using (FileStream fs = File.Open(originalFile, FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(fs))
{
    do
    {
        line = fs.ReadLine();
        if (line.Length > 1)
        {
            StringBuilder sb = new StringBuilder();
            sb.Insert(0, "??");
            sb.Insert(2, line);
            sb.Insert(line.Length + 2, "*");
            String line_Aux = sb.ToString();
            File.AppendAllText(resultFile, line_Aux + "\r\n");
        }
    } while (line != null);
}

line tanımlamayı unutmuşum.
 
C#:
String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";
String line;

using (FileStream fs = File.Open(originalFile, FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(fs))
{
    do
    {
        line = fs.ReadLine();
        if (line.Length > 1)
        {
            StringBuilder sb = new StringBuilder();
            sb.Insert(0, "??");
            sb.Insert(2, line);
            sb.Insert(line.Length + 2, "*");
            String line_Aux = sb.ToString();
            File.AppendAllText(resultFile, line_Aux + "\r\n");
        }
    } while (line != null);
}

line tanımlamayı unutmuşum.
Kod çalışıyor fakat döngü durmuyor.

Sorunu çözdüm, thread olmadan bile sıkıntısız işlem yapıyor, 400.000 satırlık metin dosyasını %2 işlemci gücü [AMD Ryzen7 5700x] ile 1 saniyede hallediyor.

Sorun çözümü; Büyük boyutlu dosyaları "File.AppendAllText" ile yazdırıldığı için yüksek işlemci kullanımına ulaşıyordu ve durmuyordu. Çözüm olarak StreamWriter kullandım, çünkü büyük boyutlu dosyaları ancak bu şekilde sıkıntısız yazdırabiliriz.

C#:
            String originalFile = @"C:\Users\saurane\Desktop\deneme.txt";
            String resultFile = @"C:\Users\saurane\Desktop\sonuc.txt";

            using (FileStream fs = File.Open(originalFile, FileMode.Open))
            using (BufferedStream bs = new BufferedStream(fs))
            using (StreamReader sr = new StreamReader(fs))
            using (StreamWriter sw = new StreamWriter(resultFile))
            {
                String line;
                while (sr.EndOfStream == false)
                {
                    line = sr.ReadLine();
                    if (line.Length > 1)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Insert(0, "||");
                        sb.Insert(2, line);
                        sb.Insert(line.Length + 2, "^");
                        String line_Aux = sb.ToString();
                        sw.Write(line_Aux + "\r\n");
                    }
                }
            }
 
Son düzenleme:
Çözüm

Yeni konular

Geri
Yukarı