此问题已在此处有答案:
How to change stack size for a .NET program?(4个答案)
4天前关闭。
我在WPF上开发了一个游戏。但是当我启动应用程序时,它冻结了,新的RAM没有分配。我正在使用.NET 6和WPF。我认为在应用程序中.NET正在耗尽堆内存。
我的应用程序冻结在120 MB的RAM时,我有8 GB的。
你能告诉我如何在.NET 6中增加WPF应用程序中的堆大小吗?
代码在:https://github.com/DmitriySidyakin/Chess/tree/Chess-0.1.2-with-Computer-Player-development
如果你想编译,你可以从以下网站下载.NET 6:https://dotnet.microsoft.com/en-us/download/dotnet/6.0
如果您在设置(新游戏)中选择一个电脑玩家,并且它采取了行动,该程序将冻结。
附带的项目“GraphAlgorithms”可以从存储库下载:https://github.com/DmitriySidyakin/Graph
在“Chess.ComputerPlayer”项目中,在文件“FiveStepPlayer.cs”中,在第150行,您可以通过0指定图遍历的深度,如果“int deep”指定0,则不会冻结。但是这里需要图中的搜索深度来提高AI的质量。
如果int deep设置为5,则会出现堆栈溢出。我还想了解如何以编程方式增加堆栈或项目中的参数。
问题是,如何以编程方式管理CLR中的应用程序域以增加其堆栈和堆?
2条答案
按热度按时间wqnecbli1#
好吧,我想我找到了。
在
NewGameSettings.xaml.cs
模块中,您正在执行一个“禁止”移动:通过隐藏一个模态窗口,你实际上冻结了应用程序。模态仍然存在,但你看不到它(因此没有人可以关闭它)。现在,我不知道你的应用程序应该如何运行。我只展示如何“解锁冻结”。在那之后,就由您来调优代码了。
ozxc1zmp2#
对你最初的问题,答案是否定的。.NET自动管理内存分配。
可能是因为其他问题而冻结。尝试改进算法。
当它冻结时,单击Visual Studio上的Pause按钮,查看执行的位置。所以你可以知道它在做什么。
可能是一些事件持续触发,使UI无响应。
如果存在任何内存问题,Visual Studio诊断工具有助于调查。如果内存在冻结时没有急剧增加,我认为不太可能是内存问题导致冻结。
https://learn.microsoft.com/en-us/visualstudio/profiling/memory-usage?view=vs-2022
https://learn.microsoft.com/en-us/visualstudio/profiling/memory-usage-without-debugging2?view=vs-2022