我正在使用.net 3.5中的app域的文档阅读并遇到SandboxInterop。文档说
获取或设置一个值,该值指示是否为应用程序域中的interop调用禁用接口缓存,以便在每次调用时执行QueryInterface。
但为什么我是否希望禁用QueryInterface的缓存?
(快速谷歌找不到任何解释方法?)
答案 0 :(得分:2)
在典型的操作中,通常没有理由担心缓存QueryInterface调用。
但是,其他方可能会创建组件,其中未完成的接口数与组件的操作相关联。此外,还有一些异常值,从COM对象接收的接口具有一个实现,可能使控制对象的生命周期变得更加困难。
例如,用ATL编写的组件可以用撕裂接口创建。这些撕裂在主对象的二进制布局中不可用,并且通常在与其父对象协调的另一个隐藏对象上实现。由于成功的QueryInterface调用隐式计为AddRef调用,因此如果缓存接口引用,则可以将撕裂提供程序的生命周期延长到其预期版本之后。此外,还可能存在这样的情况:对象仅提供特定界面的一次撕掉,其意图是通过该界面一次只有一个消费者。如果两个使用者在第二个请求失败时被发出相同的副本,则缓存的副本可能会违反该行为。
最后,更可能的情况是可能会跟踪每个QueryInterface调用以进行调试或记录。能够关闭缓存可能允许某人诊断出事件可能被延迟的问题。
以下是有关撕裂界面的一些链接供您参考。