Мне нужно выделить очень большие массивы простых структур (1 ГБ ОЗУ). После нескольких распределений/освобождений память становится фрагментированной и генерируется исключение OutOfMemory.C# chunked array
Это до 32 бит. Я бы предпочел не использовать 64-битный из-за штрафа за производительность, которое я получаю - одно и то же приложение работает на 30% медленнее в режиме 64 бит.
Знаете ли вы о некоторых реализациях совместимых с IList массивов, которые выделяют память в кусках, а не все сразу? Это позволит избежать проблемы фрагментации памяти.
Нечетный, это * действительно * неправильный вопрос. Он должен был спросить: «Почему по 64-битной программе на 30% медленнее?» Ваш 32-битный процесс будет слишком длинным * слишком медленным после того, как вы обрезаете массивы. –
Первоначально приложение было 64 бит, но после прочтения некоторых статей, которые свидетельствуют о том, что 64-разрядный JIT не так хорош в оптимизации кода, как 32-битный (http: // stackoverflow.com/questions/14432/64bit-net-performance-tuning), я преобразовал его в 32 бит и нашел, что это правда. Даже если я потеряю скорость здесь, он все равно начнет работать быстрее, чем 64-битная версия - я использую IronPython + C# + C++/CLI, а запуск 64-разрядной версии занимает 10 секунд (из-за IronPython) – Meh