Приложение C#, WPF, .NET 6: Как увеличить размер стека

Рейтинг: 0Ответов: 2Опубликовано: 03.05.2023

Я разрабатываю игру на WPF. Но как запускаю приложение, оно зависает и новая оперативная память не выделяется. Я использую .NET 6 и WPF. Я думаю в приложении .NET не хватает памяти стека.

Вопрос в том, как програмно управлять Доменом приложения в CLR, чтобы увеличить его стек?

Ответы

▲ 2Принят

Для увеличения стека мне помогло:

Самый простой способ установить размер стека начиная с .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)

Это помогло мне, программа больше не зависает, только долго работает.

▲ 0

В C# объём памяти выделенный под кучу динамический расширяется при необходимости в автоматическом режиме. Впрочем, память под процесс даёт система, так что если и увеличивать количество памяти - то увеличивать количество памяти со стороны системы (для процесса), а не со стороны кода приложения. Ну а вообще зависание приложения - это нетипичное поведение при нехватке памяти, так что рекомендую используя отладчик узнать где конкретно программа зависает, ну или профилировщик памяти (например dotMemory).