¿Hay una manera de obtener el tamaño de un archivo in.NET ¿usando un método estático?


Sé que la forma normal de obtener el tamaño de un archivo sería usar una instancia de FileInfo:

using System.IO;
class SizeGetter
{
  public static long GetFileSize(string filename)
  {
    FileInfo fi = new FileInfo(filename);
    return fi.Length;
  }
}

¿Hay alguna manera de hacer lo mismo sin tener que crear una instancia de FileInfo, usando un método estático?

Tal vez estoy tratando de ser demasiado tacaño con la creación de una nueva instancia cada vez que quiero un tamaño de archivo, pero tomar por ejemplo tratando de calcular el tamaño total de un directorio que contiene 5000+ archivos. Tan optimizado como el GC puede ser, ¿no debería haber una manera de hacer esto sin tener que gravarlo innecesariamente?

Author: Peter Mortensen, 2011-09-28

3 answers

No te preocupes por eso. Primero, la asignación en. NET es barata. Segundo, ese objeto estará en gen 0 por lo que debe ser recogido sin mucha sobrecarga.

 15
Author: Dmitry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-28 13:09:15

No te preocupes por eso.

  • He encontrado una entrada de blog de alguien que midió la sobrecarga de la creación de objetos en.NET (C# Object Creation Time Trials), y, como resulta, crear 10,000 objetos tomó 0.03 segundos, es decir, 3 µs por objeto. El tiempo requerido para leer la longitud del archivo desde el sistema de archivos seguramente dominará esos 3 microsegundos significativamente.

  • Muchos métodos estáticos en. NET framework crean internamente objetos y llaman métodos de instancia en ellos (puede verificar esto mirando la fuente de referencia o utilizando alguna herramienta de reflexión). Usted asume que un método estático es más rápido. No haga tales suposiciones. Si tienes dos maneras de hacer lo mismo, mide cuál es más rápida.

 17
Author: Heinzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-03 18:51:36

Si realmente necesitas un método estático, usa el método nativo GetFileSize o GetFileSizeEx API. Pero tenga en cuenta que esto requerirá un controlador para el archivo desde la API CreateFile.

También puede ver la fuente de la clase FileInfo:

Http://referencesource.microsoft.com/#mscorlib/system/io/fileinfo.cs#4ee673c1a4ecad41

 3
Author: user3666697,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-25 16:20:14