עבודה עם קבצי PST גדולים
עיבוד קבצי Personal Storage Table (PST) גדולים עלול להפחית את הביצועים ולהגדיל את השימוש בזיכרון. Aspose.Email עבור Java מציע מספר טכניקות ו-API המאפשרים למפתחים לגשת, לעבד ולנהל את נתוני תיבת הדוא"ל ביעילות מבלי להעמיס על משאבי המערכת.
השתמש בשיטות איטרטיביות לניווט בתיקיות ובהודעות
כאשר עוברים על תיקיות והודעות, עדיף להשתמש בשיטות שמחזירות Iterable. זה מצמצם עומס זיכרון ומשפר את הביצועים.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Process message
}
}
}
השתמש ב-MessageInfo למאפייני הודעה בסיסיים
אם אתה צריך רק פרטי הודעה בסיסיים, השתמש ב MessageInfo במקום לטעון את ההודעה המלאה. זה מהיר יותר וצורך פחות זיכרון.
for (MessageInfo messageInfo : folder.enumerateMessages()) {
System.out.println("Subject: " + messageInfo.getSubject());
System.out.println("To: " + messageInfo.getDisplayTo());
System.out.println("Importance: " + messageInfo.getImportance());
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
הימנע מחילוץ הודעות מלאות אלא אם הכרחי
לא להשתמש ב‑ ExtractMessage או EnumerateMapiMessages מתודות לכל ההודעות אלא אם אתה צריך את כל המאפיינים.
במקום זאת, שקול:
a) אחזור מזהי הודעות
השתמש enumerateMessagesEntryId כדי לקבל את כל מזהי ההודעות בתיקייה. לאחר מכן ניתן לחלץ באופן סלקטיבי תכונות, הודעות או קבצים מצורפים.
for (String id : folder.enumerateMessagesEntryId()) {
// Retrieve a property using ID (extractProperty),
// Extract a MapiMessage (extractMessage),
// Extract message attachments (extractAttachments),
// Save message to a stream (saveMessageToStream).
}
b) חילוץ תכונה בודדת
השתמש ExtractProperty אם אתה צריך רק תכונה ספציפית שחסרה ב‑ MessageInfo.
for (String msgId : folder.enumerateMessagesEntryId()) {
String transportMessageHeaders =
pst.extractProperty(
org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()
).getString();
}
c) חילוץ קבצים מצורפים בלבד
אם נדרש רק קבצים מצורפים, השתמש ב‑ ExtractAttachments.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
השתמש בקריטריוני חיפוש כדי לסנן הודעות
סינון הודעות באמצעות קריטריוני חיפוש מצמצם את מספר ההודעות הטעונות ומשפר ביצועים.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
MessageInfoCollection unread = folder.getContents(builder.getQuery());
}
}
שמירת הודעות ל‑Stream
במקום לחלץ ולשמור הודעות אחת אחת, השתמש ב‑ SaveMessageToStream לשיפור ביצועים.
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}
השתמש במתודות בקבוצות כשניתן
כשאתה צריך להוסיף או מחיקה פריטים מרובים, עדיפות למתודות בקבוצות על פני פעולות פרטניות. זה מצמצם עומס ומשפר ביצועים.