การแยกไฟล์ MBOX
แยกที่จัดเก็บ MBOX/ยกเลิกการแยกส่วน
Aspose.Email มีเมธอดสำหรับแบ่งไฟล์กล่องจดหมายขนาดใหญ่เป็นส่วนที่จัดการได้ วิธีนี้ช่วยปรับปรุงประสิทธิภาพและการใช้หน่วยความจำ โดยเฉพาะเมื่อทำงานกับอาร์ไคฟ์อีเมลขนาดใหญ่ ตัวเลือกการแบ่งที่มีอยู่จะแตกต่างกันตามเวอร์ชัน .NET ที่คุณใช้
API ที่รองรับตามเวอร์ชัน .NET
สำหรับ .NET Framework 4.5 และ .NET Core
คุณสามารถแบ่งข้อมูล MBOX โดยใช้ SplitInto เมธอดของ MboxStorageReader คลาส พร้อมตัวเลือกในการรวม cancellation token หรือกำหนดชื่อไฟล์ผลลัพธ์เอง:
-
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 เมธอดแต่ไม่มี token สำหรับการยกเลิก:
-
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 สำหรับ .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);
}