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);
}