जारी नहीं करता है हमारे आवेदन में, हम System.IO.Packaging.Package वर्ग का उपयोग कर एक एक्सपीएस फ़ाइल पढ़ रहे हैं। जब हम किसी पैकेजपार्ट की स्ट्रीम से पढ़ते हैं, तो हम कार्य प्रबंधक से देख सकते हैं कि एप्लिकेशन की मेमोरी खपत बढ़ जाती है। हालांकि, जब पढ़ा जाता है, तो स्मृति खपत धारा से पढ़ने से पहले जो कुछ भी था उससे वापस नहीं आती है।पठन स्मृति
समस्या समझने के लिए, मैं एक साधारण कोड का नमूना है कि आप आवेदन WPF अकेले एक स्टैंड में उपयोग कर सकते हैं लिखा था।
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_package = Package.Open(@"c:\test\1000pages.xps", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
private void ReadPackage()
{
foreach (PackagePart part in _package.GetParts())
{
using (Stream partStream = part.GetStream())
{
byte[] arr = new byte[partStream.Length];
partStream.Read(arr, 0, (int)partStream.Length);
partStream.Close();
}
}
}
Package _package;
private void Button_Click(object sender, RoutedEventArgs e)
{
ReadPackage();
}
}
ReadPackage() विधि सभी पैकेजपार्ट ऑब्जेक्ट्स स्ट्रीम सामग्री को स्थानीय सरणी में पढ़ेगी। नमूना में, मैंने एप्लिकेशन के मेमोरी खपत परिवर्तन को आसानी से देखने के लिए पैकेज स्रोत के रूप में 1000 पेज एक्सपीएस दस्तावेज़ का उपयोग किया था। मेरी मशीन पर, स्टैंड स्टैंड अकेले ऐप की मेमोरी खपत 18 एमबी से शुरू होती है और विधि को कॉल करने के बाद 100 एमबी तक बढ़ जाती है। विधि को फिर से कॉल करने से स्मृति की खपत फिर से बढ़ सकती है लेकिन यह 100 एमबी तक गिर सकती है। हालांकि, यह अब 18 एमबी तक नहीं गिरता है।
क्या किसी ने पैकेजपर्ट का उपयोग करते समय इसका अनुभव किया है? या मैं इसे गलत इस्तेमाल कर रहा हूँ? मुझे लगता है कि पैकेजपार्ट का आंतरिक कार्यान्वयन पढ़ने वाले डेटा को कैश कर रहा है।
धन्यवाद!
मुझे नहीं पता कि यह सवाल क्यों कम किया गया था। –