3

我正在构建一个 Windows 服务应用程序,该应用程序将包含扫描图像的目录作为输入。我的应用程序将遍历所有图像,并且对于每个图像,它将执行一些 OCR 操作以获取条形码、发票编号和客户编号。

一些背景资料:

  1. 应用程序执行的任务是相当 CPU 密集型的
  2. 有大量图像要处理,扫描的图像文件很大(~2MB)
  3. 该应用程序在具有 16GB RAM 的 8 核服务器上运行。

我的问题:

由于它正在处理文件系统上的图像,因此我不确定如果我以一种将使用 .NET 并行任务的方式更改我的应用程序是否真的会有所作为。

有人可以给我建议吗?

非常感谢!

4

2 回答 2

1

我认为答案是“视情况而定”。

我会尝试使用某种类型的性能监控(甚至是任务管理器中的性能监控)来运行应用程序,看看 CPU 有多高。

如果 CPU 已用尽;并行运行它会提高性能。如果没有,磁盘就是瓶颈,如果没有其他更改,您可能不会获得太多(如果有的话)收益。

于 2011-04-26T22:00:27.057 回答
1

如果处理一个图像比从磁盘读取 N 个图像花费的时间更长,那么同时处理多个图像是一个胜利。如图所示,您可以在 100 毫秒(包括寻道时间)内从磁盘读取 2 MB 文件。图一秒将8张图片读入内存。

因此,如果您的图像处理每张图像花费的时间超过一秒,那么 I/O 就不是问题。同时进行。如果需要,您可以按比例缩小(即如果处理需要 1/2 秒,那么您最好只使用 4 个并发图像)。

You should be able to test this fairly quickly: write a program that randomly reads images off the disk, and calculate the average time to open, read, and close the file. Also write a program that processes a sample of the images and compute the average processing time. Those numbers should tell you whether or not concurrent processing will be helpful.

于 2011-04-26T22:30:46.547 回答