gpt4 book ai didi

c# - 使用 C# 获取文件夹中包含大小的文件元数据的快速方法是什么?

转载 作者:行者123 更新时间:2023-11-30 17:50:07 32 4
gpt4 key购买 nike

var myFileList = new List<MyCustomFileInfo>();
var dir = new DirectoryInfo(@"C:\SomeDir");

foreach (var file in dir.GetFiles())
{
myFileList.Add(new MyCustomFileInfo()
{
Filename = file.Name,
ModifiedOn = file.LastWriteTime,
SizeInBytes = (int)file.Length
});
}

dir.GetFiles 执行速度非常快,但是当我开始访问属性时,似乎对文件系统进行了单独调用(这很慢)。

我如何重写它,以便我可以更有效地获取所有文件名、lastWriteTime 和文件大小?

铌。代码被缩减只是为了说明这一点。我的真实用例更为复杂(同步事物),但这是性能问题的核心。

最佳答案

我想知道是否使用 dir.GetFileSystemInfos()会更快。

编辑:

我用dotPeek查看了相关代码,所以可能不是见下文!

无论哪种方式,如果您在 Windows 上部署,您应该能够使用 FindFirstFile 系列的 Win32 native 函数,这就是 .Length 等在下面所做的涵盖(尽管正如您正确假设的那样,他们为文件的完整路径执行FindFirstFile,并读取它,等等)

编辑 2:

再次查看了代码,看起来 GetFileSystemInfos 应该使用来自底层系统调用的数据填充 FileInfos 和 DirectoryInfos。 (您应该能够通过查看 *Info 上的 _dataInitialised 私有(private)字段来验证这一点——如果它为零,则它已初始化,如果它为 -1,则未初始化)。

关于c# - 使用 C# 获取文件夹中包含大小的文件元数据的快速方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995578/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com