我目前编写了一个程序,其中包含一个监视网络路径的 FileSystemWatcher。
这些文件都是 .txt 的。大多数文件在 200k 到 3 MB 之间,因为如果将文件直接保存到监视文件夹中,而不是被复制,我会收到错误,我正在根据这个答案构建一个计时器:
FileSystemWatcher 在文件保存之前触发 - 你如何“暂停”这个过程?
现在房间里有一个问题,我需要非常快地处理这些事件,所以我真的应该使用用户提到的 1000 毫秒还是更低的值可以?更具体地说:我应该选择的最小值是多少,一方面要快,另一方面要保存?
也许对我的问题有更好的解决方案?
€:我现在选择使用https://stackoverflow.com/a/3822355/3664953作为解决方案。因为有可能我必须一次处理几个文件,所以我选择在 TPL 中使用它。我在活动中使用的代码:
private void OnCreate(object sender, FileSystemEventArgs e)
{
var fi = new FileInfo(e.FullPath);
Console.WriteLine(e.Name + " " + DateTime.Now);
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
DoWork(fi);
}
);
}
我用来不会因为太快而遇到异常的代码:
private void DoWork(FileInfo file)
{
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
while(true)
{
if (IsFileLocked(file) == false)
{
break;
}
if(sw.ElapsedMilliseconds >= 30000)
{
_log.Status(Log.LL.Error, String.Format("Datei {0} ist gesperrt und kann nicht
importiert werden.", file.Name));
return;
}
}
...
目前我遇到的唯一问题是,如果创建/复制了 100 个文件,它会变得非常慢,这会导致我的 MSSQL 稍后返回超时。但这不是我必须处理的问题:)
Ty 为我指明了正确的方向 Neolisk。