E
Eric Cadwell
Is there a faster way to write the last 100K of a large file? This code
takes almost two minutes to run on my machine.
int buffer = 100000;
int length = 2000000000;
string file = @"C:\test.txt";
if (File.Exists(file))
File.Delete(file);
int s = Environment.TickCount;
string test = "".PadLeft(buffer, 'a');
Byte[] data = Encoding.ASCII.GetBytes(test);
FileStream fs = File.Open(file, FileMode.OpenOrCreate);
int s2 = Environment.TickCount;
fs.SetLength(length);
System.Diagnostics.Debug.WriteLine("set: " + (Environment.TickCount - s2));
s2 = Environment.TickCount;
fs.Seek(length - buffer, SeekOrigin.Begin);
System.Diagnostics.Debug.WriteLine("seek: " + (Environment.TickCount - s2));
s2 = Environment.TickCount;
fs.Write(data, 0, buffer);
System.Diagnostics.Debug.WriteLine("write: " + (Environment.TickCount -
s2));
s2 = Environment.TickCount;
fs.Flush();
System.Diagnostics.Debug.WriteLine("flush: " + (Environment.TickCount -
s2));
fs.Close();
System.Diagnostics.Debug.WriteLine("complete: " + (Environment.TickCount -
s));
Thanks,
Eric
takes almost two minutes to run on my machine.
int buffer = 100000;
int length = 2000000000;
string file = @"C:\test.txt";
if (File.Exists(file))
File.Delete(file);
int s = Environment.TickCount;
string test = "".PadLeft(buffer, 'a');
Byte[] data = Encoding.ASCII.GetBytes(test);
FileStream fs = File.Open(file, FileMode.OpenOrCreate);
int s2 = Environment.TickCount;
fs.SetLength(length);
System.Diagnostics.Debug.WriteLine("set: " + (Environment.TickCount - s2));
s2 = Environment.TickCount;
fs.Seek(length - buffer, SeekOrigin.Begin);
System.Diagnostics.Debug.WriteLine("seek: " + (Environment.TickCount - s2));
s2 = Environment.TickCount;
fs.Write(data, 0, buffer);
System.Diagnostics.Debug.WriteLine("write: " + (Environment.TickCount -
s2));
s2 = Environment.TickCount;
fs.Flush();
System.Diagnostics.Debug.WriteLine("flush: " + (Environment.TickCount -
s2));
fs.Close();
System.Diagnostics.Debug.WriteLine("complete: " + (Environment.TickCount -
s));
Thanks,
Eric