Laden...

Textfiles - lesen & schreiben Performance Problem

Erstellt von PhilHol vor 14 Jahren Letzter Beitrag vor 14 Jahren 774 Views
P
PhilHol Themenstarter:in
82 Beiträge seit 2007
vor 14 Jahren
Textfiles - lesen & schreiben Performance Problem

Hallo,

Da ich leider gerade nicht weiter weiß, wende ich mich an die Community.

Folgender Code funktioniert bei einem Textfile mit 273kb perfekt, bei 5,8MB wird er EXTREM träge und langsam:

using (FileStream mReadStream = new FileStream(file, FileMode.Open, FileAccess.Read))
            {
                using (StreamReader mStreamReader = new StreamReader(mReadStream))
                {                    
                    using (FileStream mWriteStream = new FileStream(file.Replace(".txt", "_premup.txt"), FileMode.Create, FileAccess.Write))
                    {
                        using (StreamWriter mStreamWriter = new StreamWriter(mWriteStream))
                        {
                            string CurrZeile;
                            string[] CurrStrings;
                            char[] splitChar = new char[] { '\t' };
                            decimal CurrValue;
                            decimal LastIntervall = 0;
                            decimal CurrDelta = 0;
                            decimal LastDelta = 0;
                            int CurrFrame = 0;
                            int LastFrame = 0;
                            string LastString = "";
                            bool negativDiff = false;
                            /*
                             * Group5+6: Steuerzeichen -> GPS-Zeit -> Weg -> ID                             
                             */

                            while (!mStreamReader.EndOfStream)
                            {
                                CurrZeile = mStreamReader.ReadLine();
                                CurrStrings = CurrZeile.Split(splitChar);

                                if (CurrStrings.Length < 4)
                                    break;

                                if (!decimal.TryParse(CurrStrings[2], out CurrValue) || !Int32.TryParse(CurrStrings[3], out CurrFrame))
                                {
                                    m_error += "\r\nWrong File Format!";
                                    return false;
                                }

                                if ((LastFrame != 0 && CurrFrame != 0) && (CurrFrame - LastFrame != 1))
                                {
                                    m_error += "\r\n" + file.ToString() + ": Event-IDs nicht konstant steigend!";
                                    return false;
                                }

                                CurrDelta = CurrValue - LastIntervall;

                                if (CurrDelta < 0 && !negativDiff)
                                {
                                    m_error += "\r\n" + file.ToString() + ": Event mit ID " + CurrStrings[3] + " hat eine negative Differenz!";
                                    negativDiff = true;
                                    if (!deletenegativDiff)
                                    {
                                        mStreamWriter.WriteLine(LastString);
                                        countdata++;
                                        continue;
                                    }
                                }

                                if (!deletenegativDiff && negativDiff)
                                {
                                    mStreamWriter.WriteLine(LastString);
                                    countdata++;
                                    negativDiff = false;
                                } 
                                else if (LastIntervall == 0)
                                {                                    
                                    CurrDelta = 2;                                    
                                }
                                else if ((CurrDelta + LastDelta) > maxdelta)
                                {
                                    mStreamWriter.WriteLine(LastString);
                                    countdata++;
                                }
                                else
                                {
                                    m_error += "\r\n" + file.ToString() + " Event mit ID " + LastString.Split(splitChar)[3] + " gelöscht!";
                                    m_sumDelted++;
                                    CurrDelta += LastDelta;
                                }

                                LastString = CurrZeile;
                                LastDelta = CurrDelta;
                                LastIntervall = CurrValue;
                            }

                            mStreamWriter.WriteLine(LastString);
                        }
                    }
                }
            }

Ich versteh nur nicht, warum bei einer 273 kb datei das ganze ms dauert, und bei 5,8MB ewig braucht ..

Vielen dank für jede Hilfe

lg
PhilHol

Gelöschter Account
vor 14 Jahren

bekommst du evtl viele errors?

P
PhilHol Themenstarter:in
82 Beiträge seit 2007
vor 14 Jahren

Oh mann wie peinlich .. ja du hast recht ! .. vielen dank! .. Hab schon alles umgeschrieben und anders verschachtelt .. aber so "einfache" dinge hab ich depp net geachtet ..

.. D.h. performance geht runter wenn ich an einem String was drann hänge laufend?

Gelöschter Account
vor 14 Jahren
P
PhilHol Themenstarter:in
82 Beiträge seit 2007
vor 14 Jahren

oh .. danke dir !