有没有一种方法可以在.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中的分配很便宜。其次,该对象将在第0代中,因此应该在没有太多开销的情况下收集它。
别担心。
-
我发现了一篇博客文章,有人测量了。net中对象创建的开销(c#对象创建时间试验),并且,事实证明,创建10,000个对象需要0.03秒,即每个对象3µs。从文件系统中读取文件长度所需的时间肯定会显著地占据这3微秒。
-
. net框架中的许多静态方法在内部创建对象并调用它们的实例方法(您可以通过查看参考源代码或使用某些反射工具来验证这一点)。您假设静态方法更快。不要做这样的假设。如果你有两种方法做同样的事情,测量哪一种更快。
如果你真的,真的需要一个静态方法,使用原生的GetFileSize
或GetFileSizeEx
API。但请记住,这将需要一个从CreateFile
API到文件的句柄。
您还可以查看FileInfo
类的源代码:
http://referencesource.microsoft.com/mscorlib/系统/io/fileinfo.cs # 4 ee673c1a4ecad41