Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到COM对象是否昂贵?_Com_Ole_Powerbuilder - Fatal编程技术网

连接到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