连接到COM对象是否昂贵?
实际上,我参与了一个已经编写好的遗留系统维护 我的实际目标是处理连接到对象时可能发生的错误连接到COM对象是否昂贵?,com,ole,powerbuilder,Com,Ole,Powerbuilder,实际上,我参与了一个已经编写好的遗留系统维护 我的实际目标是处理连接到对象时可能发生的错误 COM对象是在VB.NET中编写的,主要是Web服务 我已经定义了一个基本工厂,它通过PB函数处理COM对象的实例化 因此,当我实例化一个COM对象时,我得到一个 在要替换的代码中,我可以看到使用的对象可能会立即被销毁。在其他一些地方,情况并非如此。更令人困惑的是,有时它以前是断开的 因此,我可以遇到: oleobject lole_new_com_object lole_new_com_object =
COM
对象是在VB.NET中编写的,主要是Web服务
我已经定义了一个基本工厂,它通过PB函数处理COM对象的实例化
因此,当我实例化一个COM
对象时,我得到一个
在要替换的代码中,我可以看到使用的对象可能会立即被销毁。在其他一些地方,情况并非如此。更令人困惑的是,有时它以前是断开的
因此,我可以遇到:
oleobject lole_new_com_object
lole_new_com_object = create oleobject
lole_new_com_object.ConnectToNewObject("MyAssembly.MyNamespace.MyClass")
...
lole_new_com_object.DisconnectObject() // Disconnect before destroy...
destroy lole_new_com_object
或:
所以我想知道这样实例化一个对象是否很昂贵
虽然我不是专家,但我对PowerBuilder很熟悉。对于这些问题,我不知道PB是如何处理的。您应该在销毁之前断开连接,并销毁任何已创建的
我不知道将它们定义为单例是否有任何区别。在销毁之前,您应该断开连接,并销毁任何已创建的
我不知道把他们定义为单身是否会有什么不同。我同意马特的评论。理论上,当脚本结束时,局部变量会自动销毁。话虽如此,我认为大多数开发人员都会在断开连接对象后立即编写销毁代码,如第一个示例所示。我同意Matt的评论。理论上,当脚本结束时,局部变量会自动销毁。话虽如此,我认为大多数开发人员会在断开连接对象后立即编写销毁代码,如第一个示例所示。来自官方文档: 您可以依靠垃圾收集来销毁OLEObject变量。 销毁变量会自动断开与服务器的连接 最好使用垃圾收集来销毁对象,但如果 您希望立即释放变量使用的内存,然后 您知道应用程序的另一部分没有使用它, 可以显式断开并销毁OLEObject变量
这样,您就可以在不断开连接的情况下保留销毁功能。至于销毁本身,则取决于对象的类型。您不必这样做,尤其是对于进程内对象。通常,它用于COM对象,如Microsoft Word或Excel(当您想要确保exe确实消失时,当您想要它消失时)。来自以下官方文档: 您可以依靠垃圾收集来销毁OLEObject变量。 销毁变量会自动断开与服务器的连接 最好使用垃圾收集来销毁对象,但如果 您希望立即释放变量使用的内存,然后 您知道应用程序的另一部分没有使用它, 可以显式断开并销毁OLEObject变量 这样,您就可以在不断开连接的情况下保留销毁功能。至于销毁本身,则取决于对象的类型。您不必这样做,尤其是对于进程内对象。通常,它用于COM对象,如Microsoft Word或Excel(当您想要确保exe确实消失时,当您想要它消失时)。我认为这两个答案(Matt、Roland)都有优点。老实说,我不认为会有很多开销,但这可能取决于在实际启动应用程序实例时创建的OLE对象。对于SAP BAPI解决方案,我们在销毁OLE之前一直等到应用程序退出,但在第一次创建OLE时也没有明显的延迟。所以我认为这取决于你打开的应用程序。我认为两个答案(马特、罗兰)都有优点。老实说,我不认为会有很多开销,但这可能取决于在实际启动应用程序实例时创建的OLE对象。对于SAP BAPI解决方案,我们在销毁OLE之前一直等到应用程序退出,但在第一次创建OLE时也没有明显的延迟。所以我认为这取决于你打开的应用程序。
oleobject lole_new_com_object
lole_new_com_object = create oleobject
lole_new_com_object.ConnectToNewObject("MyAssembly.MyNamespace.MyClass")
...
// No disconnect...
destroy lole_new_com_object