我是Windows Store App开发的新手,我有一个用C#编写的应用程序,它试图获取指定目录及其子目录中所有文件的大小。 StorageFolder.GetFilesAsync()方法适用于具有少量文件的目录,但是对于包含大量文件的目录,它在仅具有2GB RAM的设备上产生OOM异常,例如许多RT平板电脑。有没有办法解决这个问题,这将允许应用程序以较小的块处理文件,而不是构建所有文件的列表(这似乎非常低效),如下面的代码所示,任何帮助将不胜感激...... < / p>
StorageFolderQueryResult queryResult = KnownFolders.RemovableDevices.CreateFolderQueryWithOptions(new QueryOptions(CommonFolderQuery.DefaultQuery));
folderList = await queryResult.GetFoldersAsync();
foreach (StorageFolder folder in folderList)
{
IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync(CommonFileQuery.DefaultQuery);
foreach (StorageFile file in fileList)
{
BasicProperties properties = await file.GetBasicPropertiesAsync();
size += properties.Size;
}
}
答案 0 :(得分:2)
使用StorageFolderQueryResult.GetFoldersAsync(uint, uint)
和StorageFolderQueryResult.GetItemCountAsync
一起查询文件夹中的文件夹。
类似的东西:
StorageFolderQueryResult queryResult = KnownFolders.RemovableDevices.CreateFolderQueryWithOptions(new QueryOptions(CommonFolderQuery.DefaultQuery));
uint numItems = await queryResult.GetItemCountAsync();
uint chunkSize = 50;
for(uint startingIndex = 0; startingIndex < numItems; startingIndex += chunkSize)
{
var folderList = await queryResult.GetFoldersAsync(startingIndex, chunkSize);
foreach (StorageFolder folder in folderList)
{
IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync(CommonFileQuery.DefaultQuery);
foreach (StorageFile file in fileList)
{
BasicProperties properties = await file.GetBasicPropertiesAsync();
size += properties.Size;
}
}
}
您可以根据想要约束记忆的方式增加或减少chunkSize
。
希望这会有所帮助。快乐的编码!