vad*_*lis 5 c# windows garbage-collection win-universal-app windows-10-mobile
为什么垃圾回收会阻塞 Windows 10 UWP 中的 UI 线程?(可能不会。但性能诊断工具说垃圾收集器正在 UI 线程中运行)
如果垃圾收集正在运行,应用程序也没有响应。在 Windows Phone 8.1 中,它运行良好,并且不会如此频繁地调用垃圾收集。

更新 2
我需要从外部 API 获取大对象(过去 2 年每月 1000-2000 个对象)。API以json格式返回数据。我使用 Newtonsoft.Json 来反序列化对象。因此,从 API 请求每个请求获取 1-2 mb 的临时数据是理想的行为。我使用 FieldMedic 分析了来自设备的 PerfView 日志,发现集合的反序列化是最昂贵的操作。Windows Phone 8.1 的结果相同。仅在 Windows 10 中的 JITStats 方法数量 6,734 与 WP 8.1 中的 421 的巨大差异

Windows Phone 8.1 的同一个应用程序不会阻塞 UI 线程。
问题是“为什么 Windows 10 UWP 中的垃圾收集需要这么多资源?”。
更新 3 Demo 项目演示了差异。在 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
演示项目链接: gc_test
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |