0

Windows 服务 - C# - VS2010

我有多个 FileWatcher 服务实例。每个人都在目录中寻找不同的扩展名。我有一个单独的路由器服务,它监视 zip 文件的目录并将扩展名重命名为服务查看的值之一。

例子:

有问题的目录(所有 FileWatcher 服务都监视此目录)包含以下文件:

a.zip、b.zip、c.zip

FileWatcher1 查找 *.000 的扩展名,FileWatcher2 查找 *.001 的扩展名,FileWatcher3 查找 *.002 的扩展名

路由器将看到 .zip 文件并更改 zip 文件的文件扩展名,但它应该保持顺序,以便将相同数量的工作委派给每个 FileWatcher。

另外,如果有两个 zip 文件被丢弃,它会改变 a.zip -> a.000 和 b.zip -> b.001,但如果 5 分钟后又有一批 zip 文件被丢弃,它应该知道将下一个文件重命名为 *.002。

我的一切工作正常,但现在我需要将顺序部分实现到路由器并且不确定最佳实现方式(当前路由器正在将每个扩展名更改为 *.000,因此只有一个 FileWatcher 正在完成工作)。我知道这可能被认为是一种廉价的方式,但这是我们目前真正需要的。任何帮助,将不胜感激。

4

2 回答 2

0

路由器可以只保留一个计数器并为每个新文件执行 mod 3(或 N,其中 N 是观察者的数量)操作吗?

于 2012-07-24T19:30:46.710 回答
0

或许换一种看待它的方式。你有没有想过有一个单一的观察者,然后使用一个线程池?我建议这样做的原因是您必须开始查看字段的大小和复杂性以充分分配工作。您可能会开始将更多工作推到 .000,因为当它仍在忙于处理第一个作业的大量数据时,它排在后面,而 .001 可能是空闲的,因为它正在处理一个小文件。

如果你真的想解决下一个分机的问题,为什么不保留一个带有下一个分机号码的静态变量。我不是 100% 确定 Router Filewatcher 是否会在一个接一个地看到新文件时运行多个线程,但我不这么认为。如果确实发生了这种情况,那么您将需要在访问静态变量时添加一些线程安全代码。

于 2012-07-24T19:40:40.367 回答