有没有办法使用静态方法在.NET中获取文件的大小?

Wil*_*ill 38 .net c# optimization performance filesize

我知道获取文件大小的正常方法是使用FileInfo实例:

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

有没有办法在不必使用静态方法创建FileInfo实例的情况下做同样的事情?

也许我想在每次我想要文件大小时创建一个新实例时过于吝啬,但是例如尝试计算包含5000多个文件的目录的总大小.尽管GC可能是最优化的,但是不应该有办法这样做而不必不必要地征税吗?

Dmi*_*try 17

别担心.首先,.NET中的分配很便宜.其次,该对象将在gen 0中,因此应该在没有太多开销的情况下收集它.

  • @Will我有一种感觉,FileInfo的内部工作比对象本身的分配和GC增加了更多的开销.还有一个正确的拇指规则 - 首先节省您的时间.如果它不是瓶颈,请不要打扰.通常小优化不值得您的雇主在您忙于优化时付钱给您(至少在雇主眼中).所以我的建议是:这是一个坏习惯,不要打扰.;) (5认同)
  • 我曾经想过,但作为一个老C++人,一些关于优化/效率的旧习惯很难实现. (2认同)

Hei*_*nzi 16

别担心.

  • 我找到了一篇博客文章,其中有人测量了.NET中对象创建的开销(C#对象创建时间试验),结果表明,创建10,000个对象需要0.03秒,即每个对象3微秒.从文件系统读取文件长度所需的时间肯定会显着超过3微秒.

  • .NET框架中的许多静态方法在内部创建对象并调用它们的实例方法(您可以通过查看引用源或使用一些反射工具来验证这一点).您假设静态方法更快.不要做出这样的假设.如果您有两种方法可以做同样的事情,那么测量哪一种更快.

  • 分配非常便宜,但清理可能不是。 (3认同)