有没有一种方法可以在.net中使用静态方法获取文件的大小?

本文关键字:获取 静态方法 文件 net 一种 方法 有没有 | 更新日期: 2023-09-27 18:09:51

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

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

是否有一种方法来做同样的事情,而不必创建FileInfo的实例,使用静态方法?

也许每次我想要一个文件大小时,我都试图过于吝啬地创建一个新实例,但是以试图计算包含5000多个文件的目录的总大小为例。尽管GC可能已经优化了,难道不应该有一种方法可以做到这一点,而不必不必要地增加它的负担吗?

有没有一种方法可以在.net中使用静态方法获取文件的大小?

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

别担心。

  • 我发现了一篇博客文章,有人测量了。net中对象创建的开销(c#对象创建时间试验),并且,事实证明,创建10,000个对象需要0.03秒,即每个对象3µs。从文件系统中读取文件长度所需的时间肯定会显著地占据这3微秒。

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

如果你真的,真的需要一个静态方法,使用原生的GetFileSizeGetFileSizeEx API。但请记住,这将需要一个从CreateFile API到文件的句柄。

您还可以查看FileInfo类的源代码:

http://referencesource.microsoft.com/mscorlib/系统/io/fileinfo.cs # 4 ee673c1a4ecad41