1

我们有一个图像处理工作流程产品。通过我们在作业中的处理,通常可以运行 10,000->100,000 张图像。可能有不止一项工作待定。

目前,所有的图像处理都是在我们的自制图像库中执行的,这是一个托管的 C++ 库,与 .NET 兼容。它在用户的应用程序空间中运行。我的意思是,如果您以“PeteSmith”身份登录,图像将在 Pete Smiths 的帐户上运行。

目前,我们一次只允许这种图像处理的一个实例。客户要求我们提供一个新版本,一个允许多个实例同时运行的版本,所以我们现在正在研究如何做到这一点的问题。

从“用户帐户”获取处理并使用“系统帐户”在后台进行处理的想法很有吸引力。它很有吸引力,因为 Windows 服务自然地由操作系统事件管理,例如登录和注销以及其他系统资源使用事件警报。

在我看来,我们需要做的只是管理少量定义明确的事件,这些事件由 Microsoft 详细记录。这一切都很好。但我需要了解的是,从我们客户的角度来看,我们的图像处理代码的服务植入对性能意味着什么。在他们看来,他们需要处理得更多、更快。

问题我应该如何考虑权衡:

1) 使用服务运行作业与运行仅在 Pete Smith(用户)帐户上运行的软件的 N 个不同“实例”?

2) 与运行仅在 Pete Smith(用户)帐户上运行的软件的 N 个不同“实例”相比,允许 N 个服务运行 N 个不同的作业(不需要串扰)?

4

1 回答 1

0

那么,图像处理需要一定量的CPU和IO资源来进行处理。这个数量不会因为你开始你的过程的方式和地点而改变。

服务与否的区别应该由所需的使用模式来决定。如果您希望应用程序继续自动处理图像,无论是否有人登录,您都应该作为服务运行,但如果使用更像是“选择图像,开始处理并等待结果”风格,您应该选择客户端应用程序。

目前尚不完全清楚您的客户为什么要运行多个实例。是因为他们想让一个实例完成繁重的处理工作,同时为另一个实例配置处理吗?或者他们是否想要运行多个实例,因为处理量很大并且他们想要并行运行多个?

在这两种情况下,我都会考虑在应用程序的后台线程上运行计算。如果无法使用线程(可能是由于库中的某些全局共享状态),我的第二个最佳选择是在新进程中启动每个处理并等待主进程上的结果。

于 2013-06-06T05:16:08.247 回答