Xamarin Android 不再打印 MONO GC 日志消息

问题描述 投票:0回答:1

我有一个在 Android 上运行的 Xamarin.Forms 应用程序,该应用程序已经开发了几年。直到最近,运行应用程序时,每当发生垃圾回收时,我都会看到 MONO GC 消息,类似于以下内容:

04-11 16:46:22.658 D/Mono    (14892): GC_BRIDGE waiting for bridge processing to finish
04-11 16:46:22.661 D/Mono    (14892): GC_TAR_BRIDGE bridges 424 objects 2303 colors 445 ignored 814 sccs 424 xref 150 cache 0/0 setup 0.16ms tarjan 2.39ms scc-setup 0.20ms gather-xref 0.06ms xref-setup 0.02ms cleanup 0.31ms
04-11 16:46:22.661 D/Mono    (14892): GC_BRIDGE: Complete, was running for 49.28ms
04-11 16:46:22.661 D/Mono    (14892): GC_MAJOR: (LOS overflow) time 27.89ms, stw 29.64ms los size: 2048K in use: 467K
04-11 16:46:22.661 D/Mono    (14892): GC_MAJOR_SWEEP: major size: 3936K in use: 2558K

但是现在当我运行应用程序时,执行 GC 时我看不到任何此类消息。我看到 ART 的输出,例如:

[art] Starting a blocking GC Explicit
[art] Explicit concurrent mark sweep GC freed 3(72B) AllocSpace objects, 0(0B) LOS objects, 24% free, 1693KB/2MB, paused 712us total 30.887ms

当我使用environment.txt 文件配置更详细的日志记录(例如 MONO_LOG_LEVEL=info)时,我会从 MONO 获得额外的一行输出,例如:

[monodroid-gc] GC cleanup summary: 25 objects tested - resurrecting 25.

但这对我来说并不是很有用。我想查看GC_BRIDGE、GC_MAJOR和GC_MAJOR_SWEEP的信息。我搜索了又搜索,找不到其他人报告此问题,但 Xamarin.Android 中似乎在某些时候发生了一些变化。

xamarin xamarin.forms xamarin.android mono
1个回答
0
投票

事实证明,Mono DID 默认关闭了 GC 消息。有关详细信息,请参阅我在 Github 上发布的此问题:https://github.com/dotnet/android/issues/6483

解决方案是使用以下 adb 命令重新启用日志消息:

$ adb shell setprop debug.mono.log default,mono_log_level=info,mono_log_mask=gc

注意,该命令需要在应用程序启动之前发送。

请注意,您还可以使用与应用程序一起编译的environment.txt 文件来设置这些环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.