Çö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");
                    }
                }
            }
True olduğunda kod hiç çalışmıyor, kodda bir sorun yok sadece işlemci kullanımı gitmiyor.


Bu sefer de işlemi yarım yapıyor.
while döngüsüne verdiğiniz koşul yanlış olmadıkça çıkmaz zaten döngüden. İşlem bittiğinde çıkmıyorsa oraya başka bir koşul ekleyip işlem bittiğinde o koşula müdahale ederek çıkabilirsin.
 
while döngüsüne verdiğiniz koşul yanlış olmadıkça çıkmaz zaten döngüden. İşlem bittiğinde çıkmıyorsa oraya başka bir koşul ekleyip işlem bittiğinde o koşula müdahale ederek çıkabilirsin.
Düşük seviye bir geliştiriciyim, tam olarak anlayamadım. Kod ile örnek verebilir misiniz?
 
Sizle alakası yok, bende tam anlatamadım kusuruma bakmayın.
Hocam şimdi işlemin tamamlandığına dair bir veri elde edebiliyor musunuz şuanki durumda?
Evet kod işini doğru yapıyor, sadece while döngüsü durmuyor ve cpu yüküne yol açıyor ve cpu yükü programı kapatana kadar gitmiyor. Kodun işlevi; .txt dosyasındaki her satırın başına ve sonuna ekleme yapıyor.
 
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))
{
    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);
}

Böyle dener misiniz?
 
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))
{
    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);
}

Böyle dener misiniz?
Hata veriyor.
 

Dosya Ekleri

  • ss.png
    ss.png
    121 KB · Görüntüleme: 23

Geri
Yukarı