繁体   English   中英

视窗。 服务多个实例处理来自同一单个目录重复的文件

[英]Windows. Service multiple instances processing files from same single directory duplication

我有.net Windows服务,该服务从文件夹获取图像文件列表并进行一些转换,然后将转换后的文件发送到另一个目录。 我想通过添加另一个观看同一文件夹的serVice实例来实现更高的吞吐量。 我希望2个实例独立处理文件,而不进行任何重复处理。 可以使用哪些模式? 文件锁定是否可以解决此问题? 不想使用数据库或任何其他消息传递平台。 如果需要,我可以使用文本文件等创建同步。

  1. 如果使用.net,我将考虑创建多个线程(在.net中使用TPL),这些线程将用于并行处理文件。 这样,您就可以控制整个过程。 因此,无需跟踪哪个进程(exe)正在处理文件,没有数据库,没有锁定等。

  2. 但是,如果您希望有多个进程来处理文件,则同步处理的一种方法是使用互斥锁。

我将在解决方案1中使用此选项。即在一项服务中使用TPL(多线程)。 并且也使用Mutexes。 这样,您可以受益于多个线程和多个服务。 希望这就是你所追求的。

https://msdn.microsoft.com/zh-CN/library/bwe34f1k(v=vs.110).aspx

在处理任何文件之前,请创建一个具有特定名称的Mutex,如果已授予所有权,则继续处理该文件。 如果未授予所有权,则可以放心地假设另一个进程或另一个线程(在同一应用程序内)已获取此互斥锁的锁,这意味着另一个进程/线程已在处理文件。

样例代码:

var fileMutex = new Mutex(true, "File Name", out mutexWasCreated);
if (mutexWasCreated){
    //Some other process/thread is processing this file, so nothing to do
}
else {
    //Start processing the file
}

如果一个服务(exe)发生故障,则线程将死亡,这意味着互斥体将被释放,并且这些文件将可供另一进程处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM