对象池技术示例

更新:2007 年 11 月

此示例演示即时 (JIT) 激活和对象池在 .NET Framework 环境中的使用。服务器应用程序包含单个缓冲池对象,该对象表示单个日志文件。多个客户端应用程序可实例化缓冲池对象类,并调入该类,以显示在启用 JIT 激活并具有一个对象的最大池大小时,所有客户端调用均可通过单个对象实例进行路由。这会产生一个日志文件,该文件记录了 COM+ 活动和多个客户端调用。

有关使用这些示例的信息,请参见下面的主题:

使用命令提示生成示例

  1. 打开命令提示窗口,定位到 Technologies\ComponentServices\ObjectPooling 目录下语言特定的子目录之一。

  2. 根据所选的编程语言,在命令行中键入 msbuild ObjectPoolingCS.sln 或 msbuild ObjectPoolingVB.sln。

使用 Visual Studio 生成示例

  1. 打开 Windows 资源管理器,定位到 ObjectPooling 目录下语言特定的子目录之一。

  2. 根据所选的编程语言,双击 ObjectPoolingCS.sln 或 ObjectPoolingVB.sln 的图标,在 Visual Studio 中打开该文件。

  3. 在“生成”菜单上单击“生成解决方案”。OPDemoSvr.dll 和 OPDemo.exe 程序集将在默认的 \bin 或 \bin\Debug 目录中生成。

在 GAC 中注册并安装程序集

  1. 定位到包含生成的程序集的目录。

  2. 在命令行中键入 regsvcs OPDemoSvr.dll,以注册程序集。

  3. 在命令行中键入 gacutil –i OPDemoSvr.dll,以在 GAC 中安装程序集。

运行示例

  1. 打开命令提示窗口或 Windows 资源管理器,定位到包含新的可执行文件的目录。

  2. 在“所有程序”菜单的“管理工具”子菜单中,打开“组件服务”管理工具。

  3. 通过在左侧的 COM+ 资源管理器窗格中依次展开“组件服务”->“计算机”->“我的电脑”->“COM+ 应用程序”来定位 OPDemoSvr COM+ 应用程序。

  4. 通过展开“OPDemoSvr”\“组件”来定位 Microsoft.Samples.Technologies.ComponentServices.ObjectPooling.PooledLogFile 组件。右击 PooledLogFile 组件并从弹出菜单中选择“属性”。单击“激活”选项卡,然后可注意到对象池已启用。

    y820d3e2.alert_note(zh-cn,VS.90).gif说明:

    将该组件配置成最小池大小为 0,最大池大小为 1。这意味着无论从客户端代码实例化了多少个对象,在任何时候最多存在一个缓冲池对象。可以使用 ObjectPoolingAttribute 在示例代码中对这些属性进行显式设置。此处应用的创建超时设置为默认的 60 秒,因为示例代码不会显式请求其他值。

  5. 请注意“对象构造”编辑字段的内容。此字段包含基于磁盘的日志文件的名称,该日志文件将由示例缓冲池对象创建。其默认值为 OPSvrLogCS.txt 或 OPSvrLogVB.txt。您可以更改该名称或向文件名添加路径信息(例如 C:\OPSvrLogCS.txt)。如果您没有向文件名添加路径信息,则该文件将在当前 System32 目录中创建。

  6. 单击“确定”关闭 OPDemoServer 组件属性对话框。

  7. 通过 Windows 资源管理器或命令提示窗口启动 OPDemo.exe 的三个副本。例如,在“命令提示符”窗口中,定位到 C:\Documents and Settings\您的用户名\My Documents\Samples\Technologies\ComponentServices\ObjectPooling\VB\ObjectPooling\bin 目录并键入 opdemo.exe 三次。

  8. 在每个客户端应用程序中,单击“Start Writing”(开始写入)按钮。您将在客户端窗口中看到一个闪烁的星号,这表明正在将项写入 OPDemoServer 组件对象构造字符串中指定的日志文件。

  9. 在所有客户端应用程序开始写入后,等待几秒钟。然后,在每个客户端应用程序中单击“Stop Writing”(停止写入)按钮。

  10. 找到该日志文件,并在 Notepad.exe 应用程序或其他文本编辑器中打开该文件。您应看到一系列指示对 IObjectControl 的 COM+ 调用的语句。在这些调用的中间,您将找到由每个客户端应用程序(由其进程 ID 标识)写入的信息,从而证明了 COM+ 已通过对单个实例化对象的三次对象引用来协调这些调用。有关 IObjectControl 接口的更多信息,请参见示例代码注释和 Platform SDK。

    y820d3e2.alert_note(zh-cn,VS.90).gif说明:

    若要重命名或删除日志文件,必须退出客户端应用程序的所有实例,并关闭“组件服务”管理工具中的 OPDemoSvr 应用程序。为此,请在资源管理器的左侧窗格中右击该 COM+ 应用程序,然后从弹出菜单中选择“关闭”。

要求

**平台:**Windows 2000、Windows XP、Windows Server 2003

**.NET Framework 版本:**2.0、1.1、1.0

备注

此示例使用对象构造字符串来指定日志文件名称或者它的完全限定路径。即时 (JIT) 激活是一项 COM+ 服务,该服务允许客户端创建和保存无期限的对象引用,同时不需要在该引用后面存在实际的对象实例。COM+ 可以在使用者通过其对象引用调用对象时为使用者即时激活该对象。该激活过程可能包括创建新的对象实例,或包括向调用方传递对缓冲池对象的引用(与 COM+ 对象池结合使用时)。COM+ 可根据对象上下文的已完成位来停用对象。对于 .NET 所服务的组件,可以将 AutoCompleteAttribute 应用于类方法,以指示在从该方法退出时可停用该对象。

正如在组件服务管理工具中所看到的,C# 组件的名称为 OPDemoServerCS.PooledLogFile。其 Visual Basic 版本为 OPDemoServerVB.PooledLogFile。有关二进制文件的创建和注册步骤示例的更多信息,请查看源代码文件中的注释。

y820d3e2.alert_note(zh-cn,VS.90).gif说明:

在运行该示例之前,您必须先使用全局程序集缓存工具 (Gacutil.exe) 将 OPDemoSvr.dll 程序集安装到全局程序集缓存中。Gacutil.exe 位于 SDK\<版本号>\Bin 目录中。

COM+ 对象池是一项维护活动对象池的服务,以随时供请求一个为池配置的组件的客户端使用。该池能够以管理方式进行配置,也可以通过使用 ObjectPoolingAttribute 进行配置。池的属性包括最小和最大的池大小以及对象创建请求的超时时间。

针对 JIT 激活和对象池启用的组件能够通过实现 IObjectControl 接口来控制它们的重用方式。IObjectControl 方法仅由 COM+ 调用,以指示对象激活/停用过程中的关键事件,或确定是否可将该对象返回到对象池。此示例仅实现了 IObjectControl,以演示 COM+ 使用的接口。有关 JIT 激活和对象池的更多信息,请参见 Platform SDK 文档。

请参见

参考

CanBePooled

全局程序集缓存工具 (Gacutil.exe)

ObjectPoolingAttribute

JustInTimeActivationAttribute

ServicedComponent

System.EnterpriseServices

其他资源

实时激活

对象构造

编写服务组件