Я пишу утилиту, которая будет архивировать файл (или набор файлов) с помощью LZMA SDK, а затем отправлять файл на FTP-сервер. Обычно скорость сжатия выше, чем скорость соединения ftp. Я хотел бы вместо сжатия файла дождаться его завершения, затем начать загрузку, которую я хотел бы сжать во временный файл или поток, а затем во время сжатия загрузить готовые части.
Вопрос теперь в том, как?
Одна проблема, с которой я сталкиваюсь, - файлы, с которыми я буду работать, могут быть больше 1 ГБ при сжатии, и системы, на которых я буду работать, будут иметь от 512 МБ до 2 ГБ оперативной памяти, поэтому я не хочу, чтобы сторона сжатия работала с дикими проблемами в память и заблокировать систему. Метод, о котором я думал, - это запустить сжатие в потоке, поставить в очередь 5-10 Мбайт в потоке памяти, а затем отправить информацию на ftp в другом потоке. Это хороший подход или есть лучший способ сделать это? Есть ли какие-то ошибки, такие как необходимость переписывать заголовок файла в начале файла, когда это будет сделано, или что-то еще?
Я планирую написать это на c #, но примеры кода на c, c ++ или java тоже подойдут.
Спасибо за вашу помощь.