1

我目前编写了一个程序,其中包含一个监视网络路径的 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。

4

0 回答 0