2011-09-28 15 views
31

मैं एक फ़ाइल का आकार प्राप्त करने की सामान्य तरीके से जानते हैं कि एक FileInfo उदाहरण उपयोग करने के लिए होगा:क्या एक स्थिर विधि का उपयोग कर .NET में फ़ाइल का आकार प्राप्त करने का कोई तरीका है?

using System.IO; 
class SizeGetter 
{ 
    public static long GetFileSize(string filename) 
    { 
    FileInfo fi = new FileInfo(filename); 
    return fi.Length; 
    } 
} 

वहाँ FileInfo का एक उदाहरण बनाए बिना एक ही बात करने के लिए एक रास्ता है, एक स्थिर का उपयोग कर तरीका?

शायद मैं फ़ाइल आकार के हर बार एक नया उदाहरण बनाने के साथ अत्यधिक कठोर होने की कोशिश कर रहा हूं, लेकिन उदाहरण के लिए 5000+ फ़ाइलों वाली निर्देशिका के कुल आकार की गणना करने की कोशिश कर रहा हूं। जैसा कि जीसी के रूप में अनुकूलित किया जा सकता है, इसे अनावश्यक रूप से कर के बिना ऐसा करने का कोई तरीका नहीं होना चाहिए?

+2

आप यकीन है कि यह अपने अनुप्रयोग के टोंटी है कर रहे हैं:

तुम भी FileInfo वर्ग का स्रोत देख सकते हैं? मुझे लगता है तो परेशान क्यों नहीं। – Andrey

+6

@Andrey यह इतनी ज्यादा नहीं है क्योंकि यह एक बाधा है क्योंकि यह भाषा और कचरा कलेक्टर के कुशल उपयोग का सवाल है। ऐसी चीजें हमेशा पूछताछ के लायक होती हैं, खासकर अगर आप जीसी की बारीकियों से अपरिचित हैं। यह पहली बार नहीं होगा जब मुझ पर अधिक अनुकूलन का आरोप लगाया गया है, लेकिन मैं परेशान न होने की बजाय ऐसी चीजों के बारे में अत्यधिक चिंतित होने के पक्ष में गलती करता हूं। इसके अलावा, एक प्रश्न पूछने में कुछ मिनट नहीं लगते हैं। – Will

उत्तर

14

इसके बारे में चिंता न करें। सबसे पहले, .NET में आवंटन सस्ता है। दूसरा, वह वस्तु जीन 0 में होगी, इसलिए इसे बिना किसी ओवरहेड के एकत्र किया जाना चाहिए।

+2

मैंने यह पाया था, लेकिन पुराने सी ++ लड़के होने के नाते, अनुकूलन/दक्षता के बारे में कुछ पुरानी आदतें मर जाती हैं। – Will

+4

@ क्या मुझे एहसास होगा कि FileInfo का आंतरिक कार्य ऑब्जेक्ट के आवंटन और जीसी की तुलना में अधिक ओवरहेड जोड़ता है। इसके अलावा एक सही अंगूठे नियम है - अपना समय पहले बचाएं। यदि यह एक बाधा नहीं है, तो परेशान मत हो। आम तौर पर छोटे अनुकूलन आपके नियोक्ता द्वारा भुगतान किए जाने वाले पैसे के लायक नहीं होते हैं, जबकि आप अनुकूलित करने में व्यस्त थे (कम से कम नियोक्ता की आंखों में)। तो मेरी सलाह: इसे एक बुरी आदत समेकित करें और परेशान न करें। ;) ब्लॉग लिंक के लिए – Dmitry

15

इसके बारे में चिंता मत करो।

  • मैं कोई है जो .NET में ऑब्जेक्ट निर्माण की भूमि के ऊपर (C# Object Creation Time Trials) मापा के एक ब्लॉग पोस्ट पाया है, और, के रूप में यह पता चला है, बनाने 10,000 वस्तुओं 0.03 सेकण्ड लगे, यानी, प्रति वस्तु 3 μs । फ़ाइल सिस्टम से फ़ाइल की लंबाई को पढ़ने के लिए आवश्यक समय निश्चित रूप से उन 3 microseconds पर हावी होगा।

  • .NET फ्रेमवर्क में बहुत से स्थिर विधियां आंतरिक रूप से ऑब्जेक्ट्स और कॉल इंस्टेंस विधियां बनाती हैं (आप संदर्भ स्रोत को देखकर या कुछ प्रतिबिंब उपकरण का उपयोग करके इसे सत्यापित कर सकते हैं)। आप मानते हैं कि एक स्थिर विधि तेज है। ऐसी धारणा मत करो। यदि आपके पास एक ही काम करने के दो तरीके हैं, माप जो एक तेज़ है।

+0

+1; अच्छा पढ़ा, और स्पॉट चालू है क्योंकि मैं एक सी ++ - टू-सी # कन्वर्ट हूं :) यह अभी भी कुछ लोगों के लिए उपयोग किया जा रहा है जहां जीसी का संबंध है, और यदि यह वास्तव में सही है, तो आप सही हैं, मेरी चिंता अनचाहे है । धन्यवाद – Will

+0

आवंटन बहुत सस्ता है, लेकिन सफाई हो सकती है। –

3

तुम सच में, सच में एक स्थिर विधि की जरूरत है, देशी GetFileSize या GetFileSizeEx एपीआई का उपयोग करें। लेकिन ध्यान रखें कि CreateFile एपीआई से फाइल को हैंडल की आवश्यकता होगी।

http://referencesource.microsoft.com/#mscorlib/system/io/fileinfo.cs#4ee673c1a4ecad41

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

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