Миграция с .NET 2 на .NET 4 приводит к сбою переполнения стека

У меня есть устаревшее программное обеспечение с кодом C ++ и C #, которое работало в Windows XP SP3 и .NET 2.0 (VS2005). Программное обеспечение выполняло сканирование и обработку изображений с большим объемом памяти. ПК имеет 2 Гб оперативной памяти. Размер стека зарезервирован до 15 МБ для программного процесса.

Это программное обеспечение было перенесено в .NET4 (VS2010). Во время миграции логика кода не изменяется. Программное обеспечение работает правильно для отдельных сканирований и обработки. Тем не менее, для непрерывной работы программы происходит сбой программного обеспечения в случайных местах. Для всех сбоев программа просмотра событий показывает «Программное обеспечение было прервано из-за переполнения стека». При отладке аварийного дампа он указывает на ntdll.dll (ядро DLL).

Чтобы решить эту проблему, были испробованы следующие решения. Никто из них не работал.

  1. Размер стека увеличен до 20МБ. Программное обеспечение упало.
  2. В начале процесс VirtualAlloc выделил 820 МБ процесса. Это было увеличено до 1024 МБ. Это задержало крах на один день. Но в конце концов он разбился
  3. alloca использовалась для выделения памяти для локальных переменных. Они были заменены _malloca.

Пожалуйста, дайте мне знать, если миграция .NET 4 требует значительного увеличения оперативной памяти для запуска программного обеспечения без сбоев. Входные данные об изменении требований к памяти для миграции с .net 2 на .net 4 приветствуются.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]