问题描述
如果我使用下面的代码枚举映射的网络驱动器,尽管它需要很长时间并且消耗5 GB内存,但它可以完成工作,没有错误。
var files = await folder.GetFilesAsync(CommonFileQuery.OrderByName);
如果我使用查询系统获取在本地磁盘上运行良好的文件数,则在同一网络映射的驱动器上它将失败。
var fileTypeFilter = new List<string>();
var queryOptions = new QueryOptions(CommonFileQuery.OrderByTitle,fileTypeFilter);
var query = folder.CreateFileQueryWithOptions(queryOptions);
var x2 = await query.GetItemCountAsync();
错误是“ System.Exception:'库,驱动器或媒体池为空。(HRESULT的异常:0x800710D2)'”-根本没有用。是的,我在Google上进行了搜索,并获得了巨大的5个结果。
任何关于为什么会这样的想法?也许是因为本地驱动器已编入索引,而网络未编入索引,但这使此查询在任何地方都毫无意义,因为您不能保证文件夹已编入索引。
解决方法
我弄清楚了,它实际上已经记录在案,但错误没有。
最初的问题是为什么我有时使用以下命令会出错:
var fileTypeFilter = new List<string>();
var queryOptions = new QueryOptions(CommonFileQuery.OrderByTitle,fileTypeFilter);
var query = folder.CreateFileQueryWithOptions(queryOptions);
var x2 = await query.GetItemCountAsync();
答案是使用“ CommonFileQuery.OrderByTitle”,它在网络驱动器上不起作用。必须将其替换为“ CommonFileQuery.OrderByName”,然后它才能工作。
当然,性能仍然很糟糕,并且Runtime Broker的内存消耗令人震惊。我不同意消耗5GB内存而不释放它是可以接受的。基本上,即使在.net 5上的Win32应用程序中,我也无法使用新的WinRT StorageFile / Folder。
但是问题已经回答;我们希望.net 6和WinRT可以解决这个问题:)