C# 保存.txt文件所需的时间?

C# 保存.txt文件所需的时间?,c#,timer,system.timers.timer,C#,Timer,System.timers.timer,我目前正在编写一个程序,其中包含一个监视网络路径的FileSystemWatcher 这些文件都是.txt文件。大多数文件都在200k到3MB之间,因为如果文件直接保存到关注的文件夹中而不是复制,我会出错,因此我将根据以下答案构建计时器: 现在有一个问题在房间里,我需要这些事件处理得非常快,所以我真的应该使用用户提到的1000毫秒还是一个较低的值好吗?更具体地说:我应该选择的最小值是什么,一方面是快速的,另一方面仍然是保存的 也许有更好的办法解决我的问题 欧元:我现在选择将其用作解决方案。因为

我目前正在编写一个程序,其中包含一个监视网络路径的FileSystemWatcher

这些文件都是.txt文件。大多数文件都在200k到3MB之间,因为如果文件直接保存到关注的文件夹中而不是复制,我会出错,因此我将根据以下答案构建计时器:

现在有一个问题在房间里,我需要这些事件处理得非常快,所以我真的应该使用用户提到的1000毫秒还是一个较低的值好吗?更具体地说:我应该选择的最小值是什么,一方面是快速的,另一方面仍然是保存的

也许有更好的办法解决我的问题

欧元:我现在选择将其用作解决方案。因为有可能我必须同时处理几个文件,所以我选择在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。

可能的重复当FSW事件触发时,做任何花哨的事情都没有意义,您访问该文件的可能性非常小。所以不必麻烦,只需将文件的路径添加到线程安全的集合中即可。你可以做得很快。无论您以后做什么,都会很开心,包括尝试访问文件,这可能需要几分钟或几小时。@neolik-请注意,链接问题的公认解决方案并不提供解决方案,而是提供无限同步等待。。。结合Hans Passant的建议,使用单独的文件队列来检查它可能会起作用。(请注意,如果有
async
代码等待文件不再锁定,这会很有趣-可能会导致代码看起来更漂亮)。@AlexeiLevenkov:我并不是说所有可能的解决方案都很漂亮。虽然是,也许我错过了一些东西-没有全部读过。问题的关键是有多种方法可以解决这个问题,OP想要如何解决这个问题是一个决策点。