我有几个使用FileSystemObject的过程。我觉得这很方便。

问题:将FileSystemObject的现有实例从“主”过程传递给这些其他过程作为参数,而不是让每个过程都创建自己的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的多个实例相关的开销。但是每次必须通过FSO作为论点似乎非常麻烦。严重的是,管理费用真的那么大吗?

最佳答案

在我看来,创建许多FSO的开销不是问题;但是“您不应该重复自己”,并且每个CreateObject( "System.FileSystemObject" ) [oops]都会增加运行时错误的风险。在底层,只有一个文件系统和一个文件系统对象,因此,如果允许C/C++程序员使用STDOUT或cerr,则VBScript/VBA程序员有权使用全局 FSO(您不能做任何事情)更改为单例FSO,该FSO会更改其在其他子功能中的工作方式-除了更改保持变量外)。

关于vba - 传递现有的FileSystemObject或创建多个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6510662/

10-13 02:37