В моем реальном приложении у меня есть VB6 DLL, которая вызывается из классических ASP-страниц. Приложение вызывает нестандартную базу данных.
Я хочу иметь класс пула соединений, который будет постоянно существовать. Я установил флаги компиляции, чтобы DLL
оставался в памяти, но, несмотря на это, пул периодически уничтожался.
Я уже пытался изменить время ожидания сеанса ASP и количество потоков на процессор, ни одна не работает.
Предыдущий респондент сказал мне, что ODBC может обрабатывать поведение пула для меня, но это бесполезно в этом проекте, так как мне приходится взаимодействовать с базой данных через некоторые специальные объекты базы данных.
Фрагмент кода ASP
<%
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: >>> основной номер - 106369,578
25/12/2009 18:03:07: >>> инициализация называется - 106369,578
25.12.2009 18:03:07: >>> TestClass2 init - 106369.578
25/12/2009 18:03:07: >>> TestA - 106369,578
25/12/2009 18:03:07: >>> Завершение TestClass2 - 106369,578
25/12/2009 18:38:04: >>> Основной номер - 108467.261
25/12/2009 18:38:04: >>> Вызов инициализирован - 108467.276
25/12/2009 18:38:04: >>> TestClass2 init - 108467.276
25/12/2009 18:38:04: >>> TestA - 108467.276
25/12/2009 18:38:04: >>> Завершение TestClass2 - 108467.276
Обратите внимание, что main()
вызывается дважды, но только если между ними очень длинный период простоя. Метод Terminate
класса TerminateDetect
никогда не вызывается.
Вопрос
Что происходит с DLL? Если эта архитектура не работает, как я могу создать пул соединений?