Приложение C#, WPF, .NET 6: Как увеличить размер стека
Я разрабатываю игру на WPF. Но как запускаю приложение, оно зависает и новая оперативная память не выделяется. Я использую .NET 6 и WPF. Я думаю в приложении .NET не хватает памяти стека.
Вопрос в том, как програмно управлять Доменом приложения в CLR, чтобы увеличить его стек?
Ответы (2 шт):
В C# объём памяти выделенный под кучу динамический расширяется при необходимости в автоматическом режиме. Впрочем, память под процесс даёт система, так что если и увеличивать количество памяти - то увеличивать количество памяти со стороны системы (для процесса), а не со стороны кода приложения. Ну а вообще зависание приложения - это нетипичное поведение при нехватке памяти, так что рекомендую используя отладчик узнать где конкретно программа зависает, ну или профилировщик памяти (например dotMemory).
Для увеличения стека мне помогло:
Самый простой способ установить размер стека начиная с .NET 2.0 и Win XP - создать новый поток с желаемым размером стека:
using System.Threading;
Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();
Чтобы изменить размер стека всей программы, вам придется использовать editbin:
EDITBIN.EXE /STACK:<stacksize> file.exe
(Перевод ответа Andrew O'Reilly)
Это помогло мне, программа больше не зависает, только долго работает.