我即将实现原型 FileSystemWatcher 解决方案。我有一个目录来监视文件的创建,以及吸收创建的文件并将其插入数据库的任务。粗略地说,这将涉及读取和处理 6 或 7、80 个字符文本文件,这些文件以 150 毫秒的速度出现,每隔几秒就会出现一次,很少需要处理 2MB 的二进制文件。这很可能是一个 24/7 的过程。
根据我对 FileSystemWatcher 对象的了解,最好将其事件排入一个线程中,然后在另一个线程中将它们出列/处理。我现在的困惑是执行处理的线程的更好创建机制是什么。我可以看到的选择是:
每次我收到 FSW 事件时,我都会手动创建一个新线程(是的,我知道 .. 愚蠢的架构,但我不得不说)。
每当我收到 FSW 事件时,就在 CLR 线程池中进行处理
在启动时,为处理创建一个专用的第二个线程并使用生产者/消费者模型来处理工作。主线程将请求入队,第二个线程将其出队并执行工作。
我倾向于将第三种方法作为首选方法,因为我知道工作线程总是需要的——而且可能更多,因为我对线程池没有感觉。