同步属性值
同步属性是一个声明性属性,用于指定激活组件时希望组件拥有的同步类型。 包含同步属性时,COM+ 将代表你处理同步的详细信息;不必进行任何其他调用。
根据其要求,对象可以共享其调用方同步、要求新同步或在不同步的情况下运行。
COM+ 提供以下同步属性值:
已禁用”。 禁用同步属性时,COM+ 会忽略组件在确定对象上下文时的同步要求。 因此,对象可能会也可能不会共享其调用方上下文(和同步)。
通常,当知道组件永远不会访问资源管理器时,应使用此属性值。 将 COM 组件迁移到 COM+ 时,必须禁用同步属性,以保持与未配置 COM 组件相同的行为。 未配置组件是 COM+ 应用程序中尚未安装的 COM 组件。
不受支持。 无论其调用方的状态是什么,具有此值的对象都不会参与同步。 此设置仅适用于非事务组件,并且不使用 COM+ 实时 (JIT) 激活服务。
。 如果存在,具有此值的对象将参与同步。 如果希望对象在其调用方同步中共享,但不需要自行同步,则声明此值。
将同步属性设置为 Supported 的一个合理原因是,在系统资源方面,此设置的成本可能更低。 但是,由于需要保护组件免受并发调用的困扰,编写组件会更加困难。 将同步属性设置为 Supported 的影响在于,在某些情况下,可能会以未同步的方式创建对象的实例。 如果组件的线程模型为“可用”或“两者”,则必须使用某种锁定机制来保护实例数据。 如果线程模型是单元 (STA),则无需保护实例数据。
必需。 设置此属性时,COM+ 可确保将同步根据组件创建的所有对象。 实际上,每当 COM+ 创建组件的实例时,都将确保一次只有一个线程经过此实例。
当 COM+ 激活对象时,会查看其调用方的同步状态。 如果调用方已同步,COM+ 会流到调用方同步边界,以包含新对象。 否则,COM+ 将开始同步。
Requires New。 具有此值的对象必须参与新同步,其中 COM+ 将代表调用中涉及的所有组件管理上下文和单元。 COM+ 会自动启动与调用方同步不同的新同步。
将同步属性设置为 Requires New 的一个合理原因是,此设置可用于更高效地对组件的实例进行外部调用。 但是,它还会使在对象与创建它的对象之间的调用在系统资源方面更加昂贵。
例如,假设对象及其创建者对象共享同一同步边界的情况。 如果客户端 A 调用创建者对象,而客户端 B 调用对象,则第二次调用必须等至第一次调用完成。 如果设置了 Requires New,则会在单独的同步边界中创建对象。 在这种情况下,可以同时处理来自其他对象的调用。 但是,创建者对象对对象的调用需要更多的系统资源,因为它们必须跨越同步边界。
相关主题