बड़ी PST फाइलों के साथ काम करना
बड़े Personal Storage Table (PST) फ़ाइलों को प्रोसेस करने से प्रदर्शन घट सकता है और मेमोरी उपयोग बढ़ सकता है। Aspose.Email for Java कई तकनीकें और API प्रदान करता है जो डेवलपर्स को मेलबॉक्स डेटा को कुशलतापूर्वक एक्सेस, प्रोसेस और प्रबंधित करने की अनुमति देते हैं, बिना सिस्टम संसाधनों को अधिक लोड किए।
फ़ोल्डर और संदेशों के traversal के लिए Iterable विधियों का उपयोग करें
फ़ोल्डर और संदेशों पर इटररेट करते समय, उन विधियों को प्राथमिकता दें जो लौटाती हैं 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) संदेश IDs प्राप्त करना
उपयोग करें enumerateMessagesEntryId एक फ़ोल्डर में सभी संदेश IDs प्राप्त करने के लिए। फिर आप चुनिंदा रूप से प्रॉपर्टी, संदेश या अटैचमेंट निकाल सकते हैं।
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());
}
}
संदेशों को स्ट्रीम में सहेजें
संदेशों को एक-एक करके निकालने और सहेजने के बजाय, उपयोग करें SaveMessageToStream बेहतर प्रदर्शन के लिए।
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}
संभव होने पर बुल्क मेथड्स का उपयोग करें
जब भी आपको आवश्यकता हो जोड़ें या हटाएँ एकाधिक आइटमों के लिए, व्यक्तिगत ऑपरेशनों के बजाय बुल्क मेथड्स को प्राथमिकता दें। इससे ओवरहेड कम होता है और प्रदर्शन बढ़ता है।