ADSI 特性缓存

ADSI 对象模型为每个 ADSI 对象提供客户端属性缓存。 属性缓存相当于内存中的一个表,该表包含已下载的大多数对象属性的名称和值。 某些属性(如操作属性)不会缓存。 ADSI 使用属性缓存来增强属性操作的性能,并为属性读取和写入操作添加事务功能。 对于使用没有用于设置属性的本机批处理机制的语言编写的客户端(如 Microsoft Visual Basic 开发系统),此功能至关重要。 如果没有 ADSI 属性缓存,此类客户端将不得不在每次读取或写入属性时访问服务器。

创建对象或首次绑定到对象时,该对象的属性缓存为空。 当调用 IADs::GetInfo 方法时,ADSI 将所请求的对象属性从基础目录服务加载到本地缓存中。 读取特定属性值且缓存为空时,ADSI 对 IADs::GetInfo 方法进行隐式调用。 当缓存被填满时,所有属性读取操作仅对缓存的内容起作用。

写入属性值时,新值将存储在本地缓存中,直到调用 IADs::SetInfo 方法为止。 调用 IADs::SetInfo 方法时,缓存中的属性将提交到基础目录服务。 调用 IADs::SetInfo 方法后,值将保留在缓存中,直到用另一个对 IADs::GetInfo 方法的调用显式刷新为止。

重要

必须谨慎使用 IADs::GetInfo 方法,因为即使缓存值已更改,此方法也将始终覆盖基础目录服务缓存中的属性值。 也就是说,它将通过调用 IADs::SetInfo 方法来覆盖缓存中已更改但未提交到几处目录服务的属性值。

 

下图显示了用于对缓存进行操作的不同方法。

adsi attribute cache