在我的实际应用程序中,我有一个从经典ASP页面调用的VB6 DLL。该应用程序调用非标准数据库。
我想拥有一个永久保持活力的连接池类。我设置了编译标志以将DLL
保留在内存中,但尽管如此,池也会被定期销毁。
我已经尝试更改ASP会话超时和每个处理器的线程数,但都不起作用。
之前的一位受访者告诉我,ODBC可以为我处理池行为,但在这个项目中没有用,因为我必须通过一些定制的数据库对象与数据库进行通信。
<%
set obj1 = server.CreateObject("LukeTestProj.TestClass2")
obj1.TestA
% >
MainFn.bas
Option Explicit
Dim x As TerminateDetect
Sub Main()
LogMessage "main called" ‘simple write to file function
Set x = New TerminateDetect
End Sub
TestClass2.cls
Option Explicit
Public Sub TestA()
LogMessage "TestA"
End Sub
Public Sub TestB()
LogMessage "TestB"
End Sub
Private Sub Class_Initialize()
LogMessage "TestClass2 init"
End Sub
Private Sub Class_Terminate()
LogMessage "TestClass2 terminate"
End Sub
TerminateDetect.cls
Option Explicit
Private Sub Class_Initialize()
LogMessage "Initialise called"
End Sub
Private Sub Class_Terminate()
LogMessage "Terminate called"
End Sub
示例日志文件包含
25/12/2009 18:03:07:&gt;&gt;&gt;主要叫 - 106369.578
25/12/2009 18:03:07:&gt;&gt;&gt; Initialise叫 - 106369.578
25/12/2009 18:03:07:&gt;&gt;&gt; TestClass2 init - 106369.578
25/12/2009 18:03:07:&gt;&gt;&gt; TestA - 106369.578
25/12/2009 18:03:07:&gt;&gt;&gt; TestClass2终止 - 106369.578
25/12/2009 18:38:04:&gt;&gt;&gt;主要叫 - 108467.261
25/12/2009 18:38:04:&gt;&gt;&gt; Initialise叫 - 108467.276
25/12/2009 18:38:04:&gt;&gt;&gt; TestClass2 init - 108467.276
25/12/2009 18:38:04:&gt;&gt;&gt; TestA - 108467.276
25/12/2009 18:38:04:&gt;&gt;&gt; TestClass2终止 - 108467.276
请注意,main()
被调用两次,但前提是它们之间有很长的空闲时间。永远不会调用Terminate
类的TerminateDetect
方法。
DLL发生了什么?如果此体系结构不起作用,我该如何构建连接池?
答案 0 :(得分:2)
这是一个经典的测试问题。您将修改ASP会话超时,但您很可能已将整个应用程序池空闲超时留在20分钟。您需要打开运行应用程序的应用程序池属性并延长空闲超时。
您可能希望将ASP会话超时返回到其原始值,而不是您真正想要修改的值。它不是单个会话的生命周期,您希望延长其应用程序的生命周期,即使您想要延长空闲时间。你甚至可能在现实世界中质疑它。