为什么垃圾收集在Windows 10 UWP应用程序中运行得太频繁?

为什么垃圾收集阻塞Windows 10 UWP中的UI线程? (可能不会,但性能诊断工具说垃圾回收器正在UI Thread中运行) 阻塞UI线程 如果垃圾回收正在运行,那么app也没有响应。 在Windows Phone 8.1中,它工作正常,不会经常调用垃圾回收。 Windows 10 UWP垃圾收集

更新:来自诊断工具的更新结果: 在这里输入图像说明

更新2我需要从外部API(过去2年每月1000-2000个对象)获取大对象。 API以json格式返回数据。 我使用Newtonsoft.Json来反序列化对象。 因此,希望从API获取每个请求1-2 MB的临时数据。 我已经使用FieldMedic分析了来自设备的PerfView日志,发现收集的反序列化是最昂贵的操作。 Windows Phone 8.1的结果相同。 Windows 8.1中的方法数量为6734个,而WP 8.1中的421个只有JITStats方法的最大差异 在这里输入图像说明

Windows Phone 8.1的相同应用程序不会阻塞UI线程。 在这里输入图像说明 问题是“为什么需要从Windows 10 UWP垃圾收集中获得如此多的资源?”。

更新3演示项目演示区别。 在WP8.1 UI线程不能被json序列化/反序列化阻塞。 在Windows 10 UI线程被GC阻塞。

private void StartButton_OnClick(object sender, RoutedEventArgs e) { Task.Factory.StartNew(async () => { var storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///trips.json")); var content = await FileIO.ReadTextAsync(storageFile); for (int i = 0; i < 100; i++) { var trips = JsonConvert.DeserializeObject<IEnumerable<Trip>>(content); } }); } 

链接到演示项目: gc_test