【发布时间】:2011-02-03 16:36:30
【问题描述】:
我正在尝试使用 .NET 3.5 和 PowerShell 清理目录中超过 150K 的文件。由于文件太多,我不想通过一次读取所有内容来影响服务器性能。 .NET 3.5 或 PowerShell 或可通过 PInvoke 访问的方法是否有任何机制可以让我延迟加载文件?感谢您的帮助。
【问题讨论】:
标签: .net io lazy-loading
我正在尝试使用 .NET 3.5 和 PowerShell 清理目录中超过 150K 的文件。由于文件太多,我不想通过一次读取所有内容来影响服务器性能。 .NET 3.5 或 PowerShell 或可通过 PInvoke 访问的方法是否有任何机制可以让我延迟加载文件?感谢您的帮助。
【问题讨论】:
标签: .net io lazy-loading
如果“加载”是指以惰性方式获取目录中的文件列表,则有多种选择。
从 .NET 4.0 开始,您可以使用新的 Directory.EnumerateFiles API 来获取特定目录中的流式(惰性)文件序列。搜索按需返回项目,因此不像现有的 GetFiles 方法需要那么多内存。
如果您不能使用 .NET 4,那么您将不得不推出自己的流文件枚举器。这需要使用FindFirstFile 和FindNextFile Win32 API。但是,您可以查看 CodeProject 上的 this implementation,因为它似乎就是这样。
【讨论】: