连接到COM对象是否昂贵?

时间:2014-07-11 14:43:14

标签: com ole powerbuilder

我实际上参与了用PowerBuilder编写的遗留系统维护。

我的实际目标是处理连接到COM对象时可能出现的错误。

COM对象是用VB.NET编写的,主要是Web服务。

我已经定义了一个基础工厂,它通过PB函数ConnectToNewObject()处理COM对象的实例化。

因此,当我实例化一个COM对象时,我得到一个oleobject的实例。

在要替换的代码中,我可以看到使用的oleobject可能会被立即销毁。在其他一些地方,它不是。为了增加混乱,有时它以前是断开的。

所以我可以遇到:

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

或:

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

所以我想知道以这种方式实例化一个对象是否很费力。

  1. 在破坏之前断开连接是否最好?
  2. 最好摧毁任何未退回的油脂物质?
  3. 最好将它们定义为singletons
  4. 我对PowerBuilder很满意,虽然我不是专家。对于这些问题,我不知道PB如何处理事情。

3 个答案:

答案 0 :(得分:3)

从官方文档:Shutting down and disconnecting from the server

  

您可以依赖垃圾收集来销毁OLEObject变量。   销毁变量会自动断开与服务器的连接

     

最好使用垃圾收集来销毁对象,但是如果   你想立即释放变量使用的内存   你知道它没有被应用程序的另一部分使用,   您可以显式断开和销毁OLEObject变量

所以你可以保持破坏与断开连接。至于破坏本身,它取决于对象的类型。您不必执行此操作,尤其是对于进程内对象。通常,它用于COM对象,例如Microsoft Word或Excel(当你想要确保exe文件在你希望它消失时真的消失了)。

答案 1 :(得分:2)

你应该在破坏之前断开连接并销毁任何已经创建的东西。

我不知道将它们定义为单身是否会有所不同。

答案 2 :(得分:2)

我同意马特的评论。从理论上讲,脚本结束时会自动销毁局部变量。话虽这么说,我认为大多数开发人员会像在你的第一个例子中那样在DisconnectObject之后立即编译破坏。