在多线程服务器应用程序中使用 ABBYY FineReader Engine
在服务器应用程序中使用 ABBYY FineReader Engine 设有具体条件:
- 多个独立请求必须在一个进程内的多个线程中同时进行处理
- Engine 在高性能多 CPU 计算机上的服务器操作系统下运行
- 和特殊账户一起使用(网络服务、本地服务、ASPNET)
开发 ABBYY FineReader Engine 12 时考虑到了以上具体条件,在 API 中包括了可让您作为服务器进程的一部分或者在单独进程中获取线程安全的 FineReader Engine 对象的工具。在多进程中使用 FineReader Engine 可让您创建一个对象池,其同时工作并使用服务器计算机的全部 CPU 算力。这是在大多数服务器方案中的最优做法。
将 Engine 对象载入服务器应用程序
将 Engine 载入服务器应用程序中的最优方法是通过 COM 将其作为一个进程外服务器载入单独的进程中。该方法可自动消除与多线程相关的所有难题:ABBYY FineReader Engine 对象的所有操作通过 COM 予以序列化,从而可让您在多个进程中创建多个 Engine 实例,并从服务器进程内同时处理它们。此外,该方法操作简单。Engine 对象可通过使用 OutprocLoader 对象进行加载,该对象可实现 IEngineLoader 接口。
C# 代码
不过,该方法比较大的缺点是对于特殊账户有权限 OutprocLoader。但对于服务器产品,特殊账户或是注册 FREngine.dll 都不是特别重要,因为通常来说,服务器应用程序是由富有经验的管理员安装到少量计算机上的。
注:
-
账户权限可以通过 DCOM Config 实用工具进行设置(在命令行中键入DCOMCNFG,或者选择 控制面板 > 管理工具 > 组件服务)。在控制台树中,找到 组件服务 > 计算机 > 我的计算机 > DCOM Config文件夹,右键单击 ABBYY FineReader Engine 12.2 Loader (Local Server),然后单击 属性。屏幕上将打开一个对话框。单击 安全 选项。在 启动权限 下,单击 自定义,然后单击 编辑,指定可以启动应用程序的账户。
注意,在 64 位操作系统上,注册的 DCOM 应用程序可在32位 MMC 控制台中使用,该控制台可使用以下命令行运行:
"mmc comexp.msc /32"
-
要在终端用户计算机上安装应用程序时注册 FREngine.dll,请使用以下命令行:
regsvr32 /s /n /i:"<Inc 文件夹路径 >" "<FREngine.dll 的路径>"
-
我们建议您使用网络许可证来调试和运行服务器应用程序。
此外,您可以使用 IHostProcessControl 接口来管理主机进程的优先级,并控制其活动状态。
也可使用其它 ABBYY FineReader Engine 加载方法。不过,它们的一些特点严重限制了其在服务器应用程序中的使用。
- ABBYY FineReader Engine 可以通过 COM 作为进程内服务器在当前进程中进行加载。该方法也可自动消除与多线程相关的所有难题(ABBYY FineReader Engine 对象的所有操作通过 COM 予以序列化)且操作简单。不过,该方法不允许您使用 Engine 对象的多个实例组织同时处理,从而在许多方面限制了服务器的性能。该方法的另一个缺点是,在终端用户的计算机上安装应用程序时需要注册 FREngine.dll。
- FREngine.dll 可以手动加载。这是加载库的标准方法。该方法要求 Engine 对象的所有操作在初始化 Engine 对象的同一个线程内执行。此外,不允许每个进程初始化超过一个 Engine 对象。这极大地限制了服务器的性能。为此原因,我们不建议使用该方法。该方法的一个优点是,在终端用户的计算机上安装应用程序时不需要注册 FREngine.dll。
若要了解在 ABBYY FineReader Engine 中可用的这三种加载方法的详细说明,请参见 加载 Engine 对象的不同方式。
示例
EnginesPool 代码示例提供了在多线程应用程序中实施处理器池的方法,您可以以该示例为参考开始开发自己的应用程序。
另请参阅
17.09.2024 15:14:41