【发布时间】:2016-08-28 22:48:46
【问题描述】:
我使用 MonoGame 为 UWP 开发了一款游戏。在这个项目中,我遇到了一个大问题。应用程序被初始化了好几次!游戏崩溃了,可能是因为大量的初始化代码。
在发布应用程序之前我没有意识到这一点,因为这只发生在发布构建模式下,并且由于构建时间长,我没有在这种模式下测试它。我确保该应用程序在我自己的设备和模拟器上都可以在调试模式下正常工作,但是当我从商店下载它时,应用程序在启动时崩溃了,所以我决定开始分析。
我最终以发布模式构建它并对其进行调试,并在 App.xaml.cs 和 GamePage.xaml.cs 中放置了几个断点。我注意到这些断点以不合逻辑的顺序被击中,来回跳跃,甚至跳过代码行。甚至静态布尔值也被忽略等等。
这只发生在发布模式,而不是调试模式!
此问题与 MonoGame 无关,因为我能够使用空白应用程序(通用 Windows)重新创建相同的问题。如何重新创建:
- 创建一个新的空白应用程序(通用 Windows)
- 创建一个需要很长时间才能执行的方法,并在 MainPage 构造函数中调用它(参见下面我的测试方法)。
- 在 App.xaml.cs 和 MainPage.xaml.cs 中设置断点(几乎在每一行)
- 在调试模式下测试应用程序,以便我们可以比较
- 在发布模式下测试应用程序。现在应该以奇怪的顺序命中断点。
debug版本只运行一次heavy方法,而release版本运行了多次。这可能是由于某种超时异常引起的,而这又是由于 MainPage 的长时间初始化引起的。
我的测试方法(我知道这不是一种应该用来衡量性能的方法,但无论如何它确实起到了作用):
Random r=new Random();
while (true)
{
if (r.Next(100000) == 100)
break;
}
有没有人知道如何绕过这个或者为什么会发生这种情况?
我也在 community.monogame.net 上发布了这个。帮助将不胜感激,并提前感谢!
【问题讨论】:
-
问题是什么?
标签: c# initialization uwp monogame