2011-06-28 14 views
5

मेरे पास कई प्रक्रियाएं हैं जो FileSystemObject का उपयोग करती हैं। मुझे लगता है कि यह काफी सुविधाजनक है।मौजूदा फ़ाइलसिस्टम ऑब्जेक्ट पास करें या कई उदाहरण बनाएं

प्रश्न: क्या प्रत्येक प्रक्रिया को फाइलसिस्टम ऑब्जेक्ट का अपना उदाहरण बनाने के बजाय, इन अन्य प्रक्रियाओं के लिए "मुख्य" प्रक्रिया से "मुख्य" प्रक्रिया से फ़ाइल सिस्टम सिस्टम के मौजूदा उदाहरण को पास करना समझदारी है?

उदाहरण: यह किसी भी तरह से बेहतर यह करने के लिए है:

Sub MainSub() 
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") 
    Call OtherSub(FSO, myargs) 
    ' call other subs and functions that use FileSystemObject 
End Sub 

Sub OtherSub(FSO, myargs) 
    ' Do stuff with FSO 
    ' call other subs and functions that use FileSystemObject 
End Sub 

जो मैं कम से कम एक प्रोग्रामर देखा है करते हैं, बल्कि निम्नलिखित है, जो है जो मैं आमतौर पर की तुलना में:

Sub MainSub() 
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") 
    Call OtherSub(myargs) 
    ' call other subs and functions that use FileSystemObject 
End Sub 

Sub OtherSub(myargs) 
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") 
    Call OtherSub(myargs) 
    ' Do stuff with FSO 
    ' call other subs and functions that use FileSystemObject 
End Sub 

मैं पूर्व में ऐसा करने का विचार देख सकता हूं कि यह संभावित रूप से FileSystemObject के कई उदाहरणों से जुड़े ओवरहेड को कम कर देता है। लेकिन यह हर बार एक तर्क के रूप में एफएसओ पास करने के लिए बहुत बोझिल लगता है। और गंभीरता से, उपरांत वास्तव में बड़ा है?

उत्तर

1

मेरी राय में कई एफएसओ बनाने का ओवरहेड समस्या नहीं है; लेकिन "आपको खुद को दोहराना नहीं चाहिए" और प्रत्येक CreateObject("System.FileSystemObject") [ओओपीएस] रन टाइम त्रुटि का जोखिम बढ़ाता है। हुड के तहत बिल्कुल एक फ़ाइल सिस्टम और एक फ़ाइल सिस्टम ऑब्जेक्ट होता है, इसलिए यदि सी/सी ++ प्रोग्रामर को एसटीडीओयूटी या सीईआर का उपयोग करने की अनुमति है, तो वीबीस्क्रिप्ट/वीबीए प्रोग्रामर को वैश्विक एफएसओ का अधिकार है (आप कुछ भी नहीं कर सकते एक सिंगलटन एफएसओ के लिए जो अन्य उप-कार्यों में अपनी कार्यप्रणाली को बदलता है - होल्डिंग चर को ज़ैपिंग को छोड़कर)।

1

मैं नहीं बल्कि उप करने के लिए उप से चारों ओर पैरामीटर प्रदान करने की तुलना में एक कक्षा में चीजों को रैप करने के लिए ...

Set c = New MyClass 
c.MainSub 

Class MyClass 

    Dim fso 

    Sub Class_Initialize 
     Set fso = CreateObject("Scripting.FileSystemObject") 
    End Sub 

    Sub Class_Terminate 
     Set fso = Nothing 
    End Sub 

    Public Sub MainSub()  
     OtherSub myargs 
     ' call other subs and functions that use fso 
     ' or use fso here 
    End Sub 

    Public Sub OtherSub myargs 
     ' Do stuff with fso here or call another sub in the class 
    End Sub 
End Class 

पसंद करते हैं।

+1

नकली ओओपी। मुझे यह पसंद है। –

2

मैंने हाल ही में ऐसा कुछ किया है, और मैं व्यक्तिगत रूप से जहां भी संभव हो एक फ़ाइल सिस्टम ऑब्जेक्ट का उपयोग करना पसंद करता हूं। मैं इसे फ़ंक्शन के बीच फ़ाइल हैंडल पास करने के बारे में सोचता हूं, जो खुले फ़ाइल हैंडल को लिखता है।

अपने कार्यों/उप-वर्ग को परिभाषित करते समय, ByRef कीवर्ड का उपयोग कर फ़ाइल सिस्टम ऑब्जेक्ट को पास करना सुनिश्चित करें।

एकमात्र समय यह अस्वीकार्य होगा यदि आप फ़ाइल पदानुक्रम के माध्यम से नेविगेट कर रहे हैं, और आपको उसी निर्देशिका को बनाए रखने के लिए एफएसओ की आवश्यकता है। हालांकि, यह ध्यान दिया जाना चाहिए कि एक ही एफएसओ की स्मृति आवश्यकताएं आज के कंप्यूटरों में नगण्य हैं, और आपको केवल एक प्रदर्शन लाभ दिखाई देगा यदि आपको रिकर्सिव फ़ंक्शन का उपयोग करने की आवश्यकता है या बार-बार ऐसे फ़ंक्शन को कॉल करें जो इन ऑब्जेक्ट्स को बनाता/नष्ट कर देता है।

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