MBOX ファイルの分割
MBOX ストレージの分割/分割操作のキャンセル
Aspose.Email は大容量メールボックスファイルを扱いやすいチャンクに分割するメソッドを提供します。これにより、特に大規模なメールアーカイブを扱う際のパフォーマンスとメモリ効率が向上します。利用可能な分割オプションは使用している .NET バージョンにより異なります。
.NET バージョン別サポート API
.NET Framework 4.5 および .NET Core 向け
MBOX データは以下を使用してセグメント化できます。 SplitInto メソッド( MboxStorageReader クラスで、キャンセルトークンを含めるか、出力ファイル名をカスタマイズするオプションがあります:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token)
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token)
パラメータ:
- chunkSize: 各チャンクの概算サイズ(バイト)です。
- outputPath: チャンクが作成されるフォルダーのパスです。
- partFileNamePrefix: 各パートのファイル名に付加されるプレフィックスです。
- token: 操作をキャンセルできる可能性のある CancellationToken です。
.NET バージョン 4.5 未満向け
以前のバージョンでも同様にサポートされています SplitInto メソッドですが、キャンセルトークンなしで:
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix)
-
Cancel() - 分割プロセスを途中で中断するために使用します。
キャンセル付き制御分割のコードサンプル
以下のコードサンプルは、アーカイブを最大 5 部に分割し、後で自動的に操作をキャンセルする方法を示します。
.NET 4.5 / .NET Core
int partCount = 0;
var tokenSource = new CancellationTokenSource();
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
tokenSource.Cancel();
};
System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();
.NET 4.5 未満
int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
mbox.Cancel();
};
大きな MBOX ファイルを非同期で分割
大規模なメールアーカイブの操作は非効率でメモリを大量に使用します。パフォーマンスと管理性を向上させるため、Aspose.Email for .NET は非同期機能を提供します。 SplitIntoAsync このメソッドは、メインスレッドをブロックせずに大きなファイルを小さなチャンクに分割できます。以下のコードサンプルは使用方法を示します。 MboxStorageReader.CreateReaderAsync 大きな MBOX ファイルを非同期で開き、次に呼び出すために SplitIntoAsync 最大 10 MB のサイズでより小さなファイルに分割します。生成されたチャンクは、プレフィックス "chunk_" を付けて指定された出力ディレクトリに保存されます。
using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}