如何释放ActiveX的资源
各位高手,小弟目前做了一个程序,尝试在ASP中使用ActiveX DLL查询数据库MsSQL中的内容,可以正确返回所得数据,但数据库与W2wp所占的内存资源不断增加。
尝试使用AdoConnection.free来释放资源,断开与MsSQL的连接时,发现次DLL只能使用一次。在同一个页面中调用相同的function 会发生错误。
于是小弟使用DataModule,将ADOConnectoin 放置与此Object之上。
请问:如何解决MsSQL与W3wP不断增张的内存资源。如何及时断开与MsSQL的数据库连接。
附加部分代码:
//////////////////////////////////////////////
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
begin
try
DataMod:=TDataMod.Create(nil);
finally
end;
///////////////////////////////////////////////
procedure TCHR.OnStartPage(const AScriptingContext: IUnknown);
var
FScriptingContext : IScriptingContext;
begin
inherited OnStartPage(AScriptingContext);
try
FScriptingContext := AScriptingContext as IScriptingContext;
ConnectionString:=FScriptingContext.Application_['ConnectString'];
if not DataMod.ADOConnection.Connected then
begin
DataMod.ADOConnection.ConnectionString:= ConnectionString;
DataMod.ADOConnection.Open;
end;
except
on E:Exception do
begin
SaveHtmlFileToSystem('TCHR.OnStartPage.Error is '+E.Message);
end;
end;
end;
function TCHR.rstGetBySQL(const SQL: WideString): OleVariant;
var
ADODataSet:TADODataSet;
begin
//InitConnection;
try
ADODataSet:=TADODataSet.Create(nil);
ADODataSet.Connection:=DataMod.ADOConnection;
ADODataSet.CommandType:=cmdText;
ADODataSet.CommandText:=SQL;
ADODataSet.Open;
result:=ADODataSet.Recordset;
except
on E:Exception do
SaveHtmlFileToSystem(e.Message )
end;
end;
procedure TCHR.OnEndPage;
begin
try
inherited OnEndPage;
except
On E:Exception do SaveHtmlFileToSystem(E.Message);
end;
end;