遍歷使用通配符模式查找文件的目錄時,我們遇到了意外的性能問題。Win32 API FindFirstFile和FindNextFile性能vs命令行
我們有180個文件夾,每個文件夾包含10,000個文件。使用dir <pattern> /s
的命令行搜索幾乎立即完成(< 0.25秒)。但是,從我們的應用程序,相同的搜索需要3-4秒。
我們最初嘗試使用System.IO.DirectoryInfo.GetFiles()
與SearchOption.AllDirectories
,現在已經嘗試了Win32 API調用FindFirstFile()
和FindNextFile()
。
使用我們的代碼進行分析表明絕大多數執行時間都花費在這些調用上。
我們的代碼是基於以下博客文章:
我們發現這是緩慢,更新GetFiles
功能採取string
搜索模式,而不是謂語。
任何人都可以闡明我們的方法可能會出現什麼問題嗎?
你用什麼來從命令行進行搜索?難道它是使用Windows搜索索引來執行查詢,而不是逐個瀏覽每個文件? – 2009-11-23 10:29:19
@Matt我們只是在做一個'dir/s'(已經更新了我的帖子)。 – 2009-11-23 10:33:46
聽起來很可疑。我嚴重懷疑「dir」使用除FindFirstFile/FindNextFile之外的其他任何內容。也許你誤用了它們。你能提供一個說明你如何使用它們的片段嗎? – sharptooth 2009-11-23 10:36:21