PowerBuilder 11.5和C#COM组件的内存问题

时间:2011-06-28 14:40:45

标签: c# com-interop powerbuilder

首先,对不起我的英语。

我正在使用C#(实现IDisposable)开发一个COM组件,以便在PowerBuilder中使用它:

OLEObject lole_comComponent

lole_comComponent = Create OLEObject
lole_comComponent.ConnectToNewObject("MyComComponent")

[Do some stuff...]

lole_component.DisconnectObject()
destroy lole_component
GarbageCollect()

使用此代码,关闭de app时会触发COM Component的析构函数。我已经为调用私有Dispose方法的组件添加了一个方法。像这样:

OLEObject lole_comComponent

lole_comComponent = Create OLEObject
lole_comComponent.ConnectToNewObject("MyComComponent")

[Do some stuff...]

lole_component.Close()  // this method calls Dispose(true)
lole_component.DisconnectObject()
destroy lole_component

GarbageCollect()

在这两个示例中,都没有释放组件使用的内存。

如何释放COM组件使用的内存?

我正在使用PowerBuilder 11.5.1 Build 4740。

1 个答案:

答案 0 :(得分:1)

我承认在这种情况下,谁拥有内存,PowerBuilder或控件时模糊不清,但是一个可能有用(或没有)的事实是PowerBuilder倾向于挂起内存它被分配来自操作系统。理论上说内存请求是性能昂贵的操作,因此它不是经历请求和释放内存的循环(PB不知道你接下来要做什么),它只是挂在它请求的内存上而不是现在需要。

HTH,

特里。