txt tipos manejo lenguaje leer guardar ejercicios datos con archivos archivo c# .net filestream

tipos - La forma más rápida de leer la longitud del archivo C#



manejo de archivos en c pdf (2)

Ambos accederán a los metadatos del sistema de archivos en lugar de leer todo el archivo. No sé cuál es necesariamente más eficiente, como regla general diría que si solo quieres saber la longitud (y otros metadatos), usa FileInfo , mientras que si de todos modos estás abriendo el archivo , use FileStream.Length .

Estoy usando fs.Length , donde fs es un FileStream .

¿Es esta una operación O(1) ? Pensaría que esto solo se leería de las propiedades del archivo, en lugar de ir a través del archivo para encontrar cuando la posición de búsqueda ha llegado al final. El archivo en el que estoy tratando de encontrar la longitud puede variar fácilmente de 1 MB a 4-5 GB.

Sin embargo, me di cuenta de que hay una clase FileInfo , que también tiene una propiedad Length .

¿Toman teóricamente estas dos propiedades de Length la misma cantidad de tiempo? ¿O es fs.Length más lento porque primero debe abrir FileStream ?


La forma natural de obtener el tamaño del archivo en .NET es la propiedad FileInfo.Length que mencionó.

No estoy seguro de que Stream.Length sea ​​más lento (de todos modos no leerá todo el archivo), pero definitivamente es más natural usar FileInfo lugar de FileStream si no planea leer el archivo.

Aquí hay un pequeño punto de referencia que proporcionará algunos valores numéricos:

private static void Main(string[] args) { string filePath = ...; // Path to 2.5 GB file here Stopwatch z1 = new Stopwatch(); Stopwatch z2 = new Stopwatch(); int count = 10000; z1.Start(); for (int i = 0; i < count; i++) { long length; using (Stream stream = new FileStream(filePath, FileMode.Open)) { length = stream.Length; } } z1.Stop(); z2.Start(); for (int i = 0; i < count; i++) { long length = new FileInfo(filePath).Length; } z2.Stop(); Console.WriteLine(string.Format("Stream: {0}", z1.ElapsedMilliseconds)); Console.WriteLine(string.Format("FileInfo: {0}", z2.ElapsedMilliseconds)); Console.ReadKey(); }

Resultados :

Stream: 886 FileInfo: 727