Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2012-09-29 11:30:15 ЛС | профиль | цитата
Модификация StreamCopy

Позволяет работать со стримами до 4 Гб. Существующий компонент использует функцию KOL, которая копирует Count байт напрямую в память, поэтому размер копируемых данных жестко ограничен максимальным непрерывным свободным блоком оперативной памяти. У меня при ОЗУ 3.5 Гб (Win 32 bit) 1.3 Гб файл таким образом уже не копируется.

В моем моде используется переработанная KOL-овская процедура, которая копирует в память не сразу Count байт, а блоками в BufferSize байт. В архиве есть демонстрационная схема: проверьте максимальный размер копируемого файла при BufferSize=0 и например BufferSize=10485760 (10 Мб).

При работе со стримами более 2 Гб следует учитывать, что свойства стрима Size и Position будут отрицательными. Если эти свойства напрямую передаются от одного компонента к другому без проведения вычислений - всё будет работать как надо. Но если вам нужно выполнить какую-нибудь мат. операцию с этими числами (например, компонентом Math) - нужно предусмотреть соответствующую логику с положительными и отрицательными числами.

При BufferSize=0 (по-умолчанию) полностью отключается новый функционал и компонент работает по-старому.

StreamCopy Mod 1-4

ВНИМАНИЕ: в предыдущих версиях мода BufferSize указывался в мегабайтах, теперь - в байтах
карма: 26

2
Голосовали:login, Ex_
Редактировалось 3 раз(а), последний 2017-04-05 11:29:05