Data-Pull 模型和 Data-Push 模型

异步名字对象的客户端可以在数据拉取和数据推送模型之间进行选择,以驱动异步 IMoniker::BindToStorage作和接收异步通知。 在数据拉取模型中,客户端驱动绑定作,名字对象仅在读取时向客户端提供数据。 换句话说,在首次调用 IBindStatusCallback::OnDataAvailable之后,名字对象不会向客户端提供任何数据,除非客户端已使用已提供的所有数据。

由于数据仅在请求时下载,因此选择数据拉取模型的客户端必须确保及时读取此数据。 如果使用 URL 名字对象的 Internet 下载,则如果客户端在请求更多数据之前等待太久,则绑定作可能会失败。

在数据推送模型中,名字对象驱动异步绑定作,并在有新数据可用时持续通知客户端。 客户端可以选择是否在绑定作期间的任何时间点读取数据,但名字对象将推动绑定作完成,而不管怎样。

此外,在使用异步名字对象时,需要记住遵循 COM 规则进行内存分配,具体如下:

  • 每当 COM 接口或函数调用将缓冲区(字符串或其他)返回到其客户端时,客户端都负责通过调用 CoTaskMemFree来释放内存。
  • 每当 COM 接口或函数需要来自其客户端的缓冲区时,客户端必须使用 CoTaskMemAlloc 分配该缓冲区,被调用方必须释放该缓冲区。

在分配传递给异步名字对象的字符串或缓冲区时,请务必遵循这些规则,并记住释放异步名字对象返回的内存。 有关完整详细信息,请参阅 管理内存分配 和相关主题。

异步名字对象