Вы могли использовать BufferedStreams/readers и затем использовать их буферные размеры.
я полагаю, что BufferedXStreams используют 8192 в качестве размера буфера, но как Ovidiu сказал, необходимо, вероятно, запустить тест на целом наборе опций. Его действительно попытка зависеть от конфигураций файловой системы и настроек дисков относительно того, каковы лучшие размеры.
У вас нет , чтобы использовать одни и те же среды выполнения для модулей выпуска и отладки (но это помогает), если вы следуете очень конкретным правила: никогда не смешивайте и сопоставляйте доступ к памяти, выделенной с использованием каждой среды выполнения.
Проще говоря, если у вас есть процедура в dll, которая выделяет некоторую память и возвращает ее вызывающему, вызывающий никогда не должен освобождать ее - вы должны создать функцию в исходной dll, которая освобождает память. Таким образом вы будете защищены от несоответствий во время выполнения.
Если вы считаете, что библиотеки DLL Windows созданы только для выпуска (если у вас нет отладочной версии Windows), но вы используете их в своих отладочных приложениях, вы увидите, насколько это важно.
Теперь ваша проблема в том, что вы используете статическую библиотеку, границы dll больше нет, а вызовы в библиотеке компилируются с использованием статическая версия среды выполнения C. Если ваш exe использует версию среды выполнения с динамической dll, вы обнаружите, что компоновщик использует ее вместо той, которая используется вашей статической библиотекой ... и вы получите сбои.
Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
Посмотрим, как это имеет значение.Теперь ваша проблема в том, что вы используете статическую библиотеку, больше нет границ dll, и вызовы в библиотеке компилируются с использованием статической версии среды выполнения C. Если ваш exe использует версию среды выполнения с динамической dll, вы обнаружите, что компоновщик использует ее вместо той, которая используется вашей статической библиотекой ... и вы получите сбои.
Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
Посмотрим, как это имеет значение.Теперь ваша проблема в том, что вы используете статическую библиотеку, больше нет границ dll, и вызовы в библиотеке компилируются с использованием статической версии среды выполнения C. Если ваш exe использует версию среды выполнения с динамической dll, вы обнаружите, что компоновщик использует ее вместо той, которая используется вашей статической библиотекой ... и вы получите сбои.
Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
границы dll больше нет, и вызовы в библиотеке компилируются с использованием статической версии среды выполнения C. Если ваш exe использует версию среды выполнения с динамической dll, вы обнаружите, что компоновщик использует ее вместо той, которая используется вашей статической библиотекой ... и вы получите сбои.Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
границы dll больше нет, и вызовы в библиотеке компилируются с использованием статической версии среды выполнения C. Если ваш exe использует версию среды выполнения с динамической dll, вы обнаружите, что компоновщик использует ее вместо той, которая используется вашей статической библиотекой ... и вы получите сбои.Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
Вы обнаружите, что компоновщик использует его вместо того, который использовала ваша статическая библиотека ... и вы получите сбои.Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
Вы обнаружите, что компоновщик использует его вместо того, который использовала ваша статическая библиотека ... и вы получите сбои.Итак, вы можете перестроить вашу библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, при этом сохраняя различия между отладкой и выпуском.
По крайней мере, я думаю, что это ваша проблема - что такое 'генерация кода, настройки библиотеки времени выполнения?
Проблема здесь в том, что отладка будет использовать отладочную версию среды выполнения c, а выпуск будет использовать версию выпуска среды выполнения c, и когда вы попытаетесь получить доступ к памяти через границу dll, она будет в неправильное время выполнения и выйдет из строя. Лучше всего использовать только отладочные сборки вместе (или выпускать)
Для сочетания проблем выпуска и отладки, о которых упоминалось ранее, эти проблемы не проявлялись до тех пор, пока неправильная библиотека времени выполнения не попыталась освободить память. Я думаю, что вы столкнулись с тем, что VS 2008 имеет отладку итератора по умолчанию, поэтому ваша библиотека и ваш exe относятся к различным реализациям std :: vector. Вы захотите добавить _HAS_ITERATOR_DEBUGGING = 0 в настройки препроцессора. Тогда вы начнете сталкиваться с проблемой разных куч для разного времени выполнения. В прошлом у нас были разные правила и политики, чтобы избежать этого, но теперь мы просто полагаемся на согласованную среду сборки - не смешивайте и не сопоставляйте.