Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Долго закрывается файл


Автор: Syrex 19.4.2007, 09:51
Код

StartTime=DateTime.Now;
            string str;
            string PrintNumPack;
            int NumPack;
            int TekNum;
            int BoxCount=5120;


            StreamReader InFile=new StreamReader(FName);
            StreamWriter ZakFile=new StreamWriter(ExeNameT+"\\Krist_ZAK.txt");

            TBReport.Text+=ExeNameT+"\\Krist_ZAK.txt"+Environment.NewLine;
            StatBar.Maximum=CountLine;
            StatBar.Value=0;
            
            while((str=InFile.ReadLine())!=null)
            {
                
                TekNum=Convert.ToInt32(str.Substring(0,8));
                NumPack=(TekNum-1)/BoxCount+1;
                PrintNumPack=LeadZero(NumPack.ToString(),4);
                str=str.Substring(0,9)+NumZak+";"+PrintNumPack+";";
                ZakFile.WriteLine(str);
                
                if(TekNum%1000==0)
                {
                    StatBar.Value+=1000;
                    Application.DoEvents();
                }                
            }
            ZakFile.Close();
            InFile.Close();
            
            EndTime=DateTime.Now;
            TotalTime=EndTime.Subtract(StartTime);
            TBReport.Text+="Выполнено за: "+TotalTime.ToString()+Environment.NewLine;


InFile состоит из 20 000 000 строк по 27 символов каждый.
Программа виснет при ZakFile.Close() - примерно на пару минут. А потом работа возобновляется. Почему и как от этого избавиться?!

Автор: mr.DUDA 19.4.2007, 13:58
Может при записи сначала всё кэшируется в памяти, а сбрасывается в файл при вызове Close. Можно побороть если периодически вызывать Flush у StreamWriter-а или выставить размер буфера в конструкторе.

Автор: Syrex 19.4.2007, 14:17
А как указать размер буфера?!
flush не на много быстрее ((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)