我有一个相当复杂的基于OpenGL的应用程序,它使用AndroidGameView
来设置绘图上下文等。我注意到在过去的某个时刻(并不总是这样)我开始变得不变{每隔一两秒在Nexus 7上测试应用时,控制台中会显示{1}}条消息。
我还注意到" Android OpenGL Application"的基本模板项目(在Xamarin Studio中)也遇到了类似的问题。从该模板创建一个全新的项目并在硬件上运行它会在应用程序刚刚坐在那里并运行时在控制台中产生以下消息:
GC_MINOR
我的问题是:为什么会这样?我确定它与底层[Mono] GC_BRIDGE num-objects 8 num_hash_entries 8 sccs size 8 init 0.00ms df1 0.12ms sort 0.00ms dfs2 0.24ms setup-cb 0.03ms free-data 0.03ms user-cb 26.49ms clenanup 0.12ms links 0/0/0/0 dfs passes 16/8
[Mono] GC_MINOR: (Nursery full) pause 51.85ms, total 52.00ms, bridge 26.98ms promoted 848K major 1120K los 186K
[Mono] GC_MINOR: (Nursery full) pause 49.65ms, total 49.80ms, bridge 0.00ms promoted 544K major 1664K los 186K
[Mono] GC_MINOR: (Nursery full) pause 50.72ms, total 50.93ms, bridge 0.00ms promoted 544K major 2208K los 186K
[Mono] GC_MINOR: (Nursery full) pause 84.78ms, total 85.02ms, bridge 0.00ms promoted 560K major 2768K los 186K
[Mono] GC_MINOR: (Nursery full) pause 58.10ms, total 58.23ms, bridge 0.03ms promoted 560K major 3328K los 186K
[Mono] GC_MINOR: (Nursery full) pause 49.32ms, total 49.47ms, bridge 0.00ms promoted 544K major 3872K los 186K
[Mono] GC_BRIDGE waiting for bridge processing to finish
[Mono] GC_BRIDGE num-objects 1 num_hash_entries 1 sccs size 1 init 0.00ms df1 0.24ms sort 0.03ms dfs2 0.00ms setup-cb 0.00ms free-data 0.03ms user-cb 25.57ms clenanup 0.12ms links 0/0/0/0 dfs passes 18/9
[Mono] GC_MINOR: (Nursery full) pause 135.53ms, total 135.77ms, bridge 25.82ms promoted 560K major 4432K los 186K
有关,但并不总是这样。在我的实际应用程序中,常量GC会对整体图形性能产生负面影响(似乎"打嗝"相当一点,AndroidGameView
暂停50-100ms)。
答案 0 :(得分:0)
我认为Xamarin在5.1
中修复了这种行为以前,他们在每次Update / Draw调用时都会在Java对象上分配一些.NET wapper。在我看来,分配率约为每秒5-10kb。 这可能导致GC每分钟或那个。