Есть проблем. Пишу многопоточное приложение, для доступа к БД (Oracle) используется ADO.
Коннекция открывается одна — в основном потоке. В рабочих потоках, используя эту коннекцию, открываются рекордсеты.
В принципе — все канает. За исключением одного — при каждом использовании рекордсета теряется память (до 200к за раз, хотя это от запроса зависит).За двое суток работы приложения выжралась вся виртуальная память на компе.
Close делать не забываю, естественно. Более того — не помогает даже создание рекордсета перед каждым использованием и уничтожение после... Опытным путем выяснил, что если коннекцию открывать в каждом потоке свою, то память не теряется. Можно в принципе и так поступить, но как-то криво это...
Пробовал делать маршаллинг интерфейса коннекции — не помогает.
Чтобы такого можно сделать, чтобы память не терялась? Или это бага ADO-шная, и ничего тут не поделать?
Заранее спасибо за ответы.
Здравствуйте, ВладКо, Вы писали:
ВК>Коннекция открывается одна — в основном потоке. В рабочих потоках, используя эту коннекцию, открываются рекордсеты.
Вроде как при передаче коннекции между потоками ADO её клонирует.
Здравствуйте, EvilChild, Вы писали:
EC>Здравствуйте, ВладКо, Вы писали:
ВК>>Коннекция открывается одна — в основном потоке. В рабочих потоках, используя эту коннекцию, открываются рекордсеты. EC>Вроде как при передаче коннекции между потоками ADO её клонирует.
Здравствуйте, ВладКо, Вы писали:
ВК>Как? У объекта Connection нет метода Clone.
Это да, но при попытке выполнения одновременных запросов к базе ADO создаёт дополнительные соединения.
Здравствуйте, EvilChild, Вы писали:
ВК>>Как? У объекта Connection нет метода Clone. EC>Это да, но при попытке выполнения одновременных запросов к базе ADO создаёт дополнительные соединения.
Да? Может быть, не знаю... Где почитать можно?
И все-таки, как клонировать соединение?
Ты бы не мог кусочек кода привести, который спасет отца русской демократии?