Lotus C API Toolkit 是 Notes/Domino 公布出来的一系列基于 Notes/Domino 的 API 编程接口和数据结构,用户可以用来开发自主应用程序来访问 Domino 的数据库,在 Domino 二次开发中被广泛的应用。Lotus C API 的内存管理机制是其核心内容之一,是开发高效实用的 Domino 应用程序的必备知识。
本文主要详细介绍了 Domino 数据库在内存中的存贮结构,以及 Lotus C API 提供的有关内存管理的常用数据结构和 API 接口,并通过实例说明如何遵循其内存管理机制进行高效实用的应用程序开发。
在介绍 Lotus C API 内存管理机制之前,首先来了解一下典型的 Domino 数据库的存贮模型(如图 1)。一个 Domino 的数据库由数据库的头信息和多个 note 数据结构组成。数据库头信息包括 title
, categories
, class
, design class
, ID
, Replica info
等,用于描述该数据库的相关属性。头信息之后是多个 note 数据结构。note 是 Domino/Notes 用来存贮和各种信息的通用数据结构。note 可以分为 design notes (forms, views, folders, navigators, outlines, pages, framesets, agents, and resources), data documents, profiles documents, access control list
和 collections (indexes)
。一个 note 又可以分为 note 头信息和多个 item。note 头信息包括 database handle
, note ID
, originator ID
, note class
, note flag
等。note 中的 item 由多个属性,如 item name
, type
, length
等,以及存贮的数据信息 content
组成。
如图 1 所示,Lotus C API Toolkit 使用了“容器”(container)模型来构造 Domino 的数据库存贮模型:一个 Domino 数据库可以包含多个 notes,每个 note 又包含多个 item,以此类推。关闭一个 container 对象的时候会自动地关闭和释放包含在该 container 内的所有对象。例如,如果你调用 Lotus C API 打开一个 database,并在该 database 中创建了一个 document,当关闭该 database 的时候,创建的 document 也会被关闭并释放其存贮空间。因此,特别注意的是,在关闭容器对象之前,一定要保存包含在该容器中的对象。此外,当调用 Lotus C API 函数 NotesTerm
结束一个 Notes session 时,所有在该 seesion 周期内分配的内存会全部释放。
本文转自:IBM developerWorks 中国