Недавно я столкнулся с проблемой - у меня была функция, которая создавала документ в другой базе данных и возвращала его... Точнее должна была возвращать, но ничего не возвращала. Я бешено сидел и пытался понять, почему так происходит. Оказалось, что если в Sub'e, который вызывает данную функцию, нет объекта базы, в которой функция создает документ, то будет возвращено Nothing.
Причину этого явления очень доходчиво объяснил
Akupaka в этом сообщении:
это связанно с тем, что лотус убивая объект БД чистит память под объектами, полученными из этой БД
Поэтому в функцию, которая создает документ в какой-либо базе данных, имеет смысл передавать объект той самой базы, в которой необходимо создать документ
2 комментария:
Как вариант, в функцию можно не передавать объкт БД, этот объект БД может быть просто инициализарован (задублирован) в локальной переменной вызывающего функцию кода, правда, этого немного скрывает связь и кто-то может просто удалить инициализацию БД в вызывающем коде, как лишнюю...
Еще можно объявить переменную БД в функции с помощью слова Static, тогда она тоже останется в памяти и возвращаемый результат будет корректным, правда, я не исследовал, что будет если эту же функцию вызвать для другой БД, и что будет твориться в памяти, если функцию вызывать множество раз, по-идее, память под переменную будет занята единожды, но кто знает :)
Еще хороший вариант - кеширование часто используемых объектов. Для этого необходим как минимум один глобальный объект, например list, в котором можно содержать другие объекты документов, баз и другие нужные данные. и перед инициализацией нового объекта, можно спросить у списка, нет ли у него уже инициализированного нужного объекта, если есть, то взять из списка, иначе создать и положить в список...
Вы не правы. Пишите мне в PM.
Отправить комментарий