0

LZMA sdk を使用してファイル (またはファイルのセット) を圧縮し、そのファイルを ftp サーバーに送信するユーティリティを作成しています。通常、圧縮の速度は ftp 接続の速度よりも高速です。私がやりたいのは、ファイルを圧縮する代わりに、ファイルが完了するのを待ってから、一時ファイルまたはストリームに圧縮したいアップロードを開始し、圧縮中に完成した部分をアップロードすることです。

今の問題はどのようにですか?

私が抱えている懸念の 1 つは、使用するファイルを圧縮すると 1 GB を超える可能性があり、これを実行するシステムには 512 MB から 2 GB の RAM があるため、圧縮側がメモリに暴走させたくないということです。システムをロックします。私が考えている方法は、スレッドで圧縮を実行し、メモリ ストリームで 5 ~ 10Mb をキューに入れ、その情報を別のスレッドで ftp に送信することです。これは良いアプローチですか、それとももっと良い方法がありますか? ファイルが完了したときにファイルの先頭にあるファイルヘッダーを書き換える必要があるなどの落とし穴はありますか?

これは c# で書く予定ですが、c、c++、または Java のコード例でも問題ありません。

ご協力ありがとうございました。

4

1 に答える 1

1

私は LZMA SDK に精通していませんが、C# では SharpZipLib ライブラリを使用して zip ファイルを簡単にストリーミングできます。メモリについて心配する必要はありません。一度に圧縮/ストリーミングされるブロックのみがメモリに格納されます。これを使用して、HTTP 経由でファイルを圧縮およびストリーミングしますが、FTP の概念は同じです。

基本的に、ZipOutputStreamデータを FTP ストリームに渡す を作成します。各ファイルの先頭で呼び出しPutNextEntry、ファイルの内容をストリーミングします。それ以上のことはありません。

http://www.icsharpcode.net/OpenSource/SharpZipLib/

于 2010-02-19T19:02:18.217 に答える