如何提高GetThumbnailAsync方法在window phone 8.1中的性能

本文关键字:性能 phone window 何提高 GetThumbnailAsync 方法 | 更新日期: 2023-09-27 17:51:09

我在windows phone 8.1中编写了一个函数来显示文件夹上的图像(假设我在此文件夹中有大约60个图像)。问题是函数GetThumbnailAsync()需要很长时间当我创建流获得bitmapImage。这是我的代码

       //getFileInPicture is function get all file in picture folder 
       List<StorageFile> lstPicture = await getFileInPicture();
       foreach (var file in lstPicture)
       {
            var thumbnail = await        file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,50);
            var bitmapImage = new BitmapImage();
            bitmapImage.DecodePixelWidth = (int)(ScreenWidth / 4);
            await bitmapImage.SetSourceAsync(thumbnail);
            g_listBitmapImage.Add(bitmapImage);
           //g_listBitmapImage is a list of bitmapImage
        }

我是测试和发现问题是函数GetThumbnailAsync需要这么长时间。如果我有大约60张照片,大约需要15秒来完成这个功能(我在lumia 730测试)。有没有人得到这个问题,如何使这个代码运行得更快?.

感谢您的支持

如何提高GetThumbnailAsync方法在window phone 8.1中的性能

您当前正在等待每个文件的file.GetThumbnailAsync,这意味着尽管该函数对每个文件异步执行,但它是按顺序执行的,而不是并行执行的。

尝试转换从file.GetThumbnailAsync返回的每个异步操作到Task,然后将它们存储在列表中,然后使用Task.WhenAll await所有任务。

List<StorageFile> lstPicture = await getFileInPicture();
List<Task<StorageItemThumbnail>> thumbnailOperations =  List<Task<StorageItemThumbnail>>();
   foreach (var file in lstPicture)
   {
        thumbnailOperations.Add(file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView,50).AsTask());
   }
   // wait for all operations in parallel
   await Task.WhenAll(thumbnailOperations);
   foreach (var task in thumbnailOperations)
   {
       var thumbnail = task.Result;
        var bitmapImage = new BitmapImage();
        bitmapImage.DecodePixelWidth = (int)(ScreenWidth / 4);
        await bitmapImage.SetSourceAsync(thumbnail);
        g_listBitmapImage.Add(bitmapImage);
       //g_listBitmapImage is a list of bitmapImage
   }