2010-01-21 15 views
8

मैं सर्वर एक WriteFile का उपयोग कर इस फाइल dowloading पर एक 5Mb पीडीएफ मुझे एक 15MB डाउनलोड, जहां के रूप में transmitfile सही 5Mb फ़ाइल आकार देता है ...सी # Response.WriteFile बनाम Response.TransmitFile फ़ाइल आकार मुद्दों

है देता है यह लिखने के लिए सर्वर पर स्मृति में किसी तरह की असंपीड़न के कारण है? बस आश्चर्य है कि अगर किसी को भी एक ही बात हो रहा देखा था ...

जा रहा है

कोड (ps केवल यह क्योंकि हम IIS7 के लिए ?? चला गया देखा) ...

if (File.Exists(filepath)) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/octet-stream"; 
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\""); 
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString()); 

    //HttpContext.Current.Response.WriteFile(filepath); 
    HttpContext.Current.Response.TransmitFile(filepath); 

    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.Close(); 
} 
+0

मैं सिर्फ एक ही बग मिला है। आईआईएस पर संपीड़न सेटिंग्स इसे प्रभावित नहीं करती हैं। – geofftnz

उत्तर

7

TransmitFile - लिखते स्मृति फ़ाइल को बफर किए बिना सीधे HTTP प्रतिक्रिया आउटपुट स्ट्रीम पर निर्दिष्ट फ़ाइल।

WriteFile - निर्दिष्ट फ़ाइल सीधे HTTP प्रतिक्रिया आउटपुट स्ट्रीम पर लिखता है।

मैं कहूंगा कि अंतर होता है क्योंकि ट्रांसमिट फ़ाइल इसे बफर नहीं करती है। फ़ाइल लिखना बफरिंग (अफियाक) का उपयोग कर रहा है, मूल रूप से अस्थायी रूप से डेटा को ट्रांसमिट करने से पहले डेटा धारण कर रहा है, क्योंकि यह सटीक फ़ाइल आकार का अनुमान नहीं लगा सकता क्योंकि यह इसे भागों में लिख रहा है।

2

आप परिभाषा के अनुसार समझ सकते हैं।

Response.TransmitFile वी.एस. Response.WriteFile:

  • TransmitFile: यह विधि यह सर्वर पर आवेदन करने के लिए स्मृति लोड किए बिना ग्राहक के लिए फ़ाइल भेजता है। फ़ाइल का आकार डाउनलोड होने पर इसका उपयोग करने का यह आदर्श तरीका है।

  • WriteFile: यह विधि क्लाइंट को भेजने से पहले सर्वर की स्मृति में डाउनलोड होने वाली फ़ाइल को लोड करती है। फ़ाइल का आकार बड़ा है, तो आप ASPNET कार्यकर्ता प्रक्रिया को पुन: प्रारंभ हो सकता है हो सकता है *

संदर्भ: -। TransmitFile VS WriteFile

संबंधित मुद्दे