У нас есть 32-разрядное приложение .net, которое вызывает некоторые сторонние DLL [c/C++]. На 32-разрядной ОС с 2 ГБ оперативной памяти мы постоянно получаем сообщение «Попытка чтения или записи защищенной памяти» после вызова dll.
Но
На 64-битной ОС с 4 Гб оперативной памяти, вероятность успеха 50%
На 32-битной ОС с 4 Гб оперативной памяти, скорость успеха 100%
Следовательно, представляется проблема происходит из-за памяти недостаточно. ,
Но мы заметили, что, хотя приложение работает на 2 ГБ памяти, а память доступна, мы получаем «Попытка чтения или записи защищенной памяти».
Может ли кто-нибудь предположить, что происходит, даже если память доступна?
Это адресное пространство?
Мы попробовали LARGEADDRESSAWARE, но получили ту же проблему.32-разрядное приложение не работает на 32-разрядной ОС, но работает на 64-битной машине
-1
A
ответ
0
И, наконец, выясните, в чем проблема. Мое приложение имеет один поток, который вызывает сторонние dll c/C++. Если я удаляю этот поток и выполняю последовательность кода jn, то он работает на 32 бит. Кажется, 32-битная машина имеет различную модель потоковой передачи по сравнению с 64-битным в .net. Наконец-то нам удалось это исправить, спасибо всем.