我正在创建一个文件复制程序,它将使用ROBOCOPY命令复制大小约为50 KB的大量文件(~100,000).
对于每个文件,我创建一个新进程并传递ROBOCOPY命令和参数如下:
using (Process p = new Process)
{
p.StartInfo.Arguments = string.Format("/C ROBOCOPY {0} {1} {2}",
sourceDir, destinationDir, fileName);
p.StartInfo.FileName = "CMD.EXE";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种更好的方法,而不是为每个文件创建一个流程,这在性能和设计方面都很好.有人可以提出更好的方法吗?
NetworkStream从流类型的TCP套接字读取C#时,BinaryReader.ReadChar偶尔会引发异常System.ArgumentException: The output char buffer is too small to contain the decoded characters, encoding 'Unicode (UTF-8)'
所有缓冲区都有其默认大小(没有一个是手动设置的),并且设置更大的缓冲区大小不会影响该问题。
完全令人沮丧的是:
使用断点并逐步通过ReadCharcall 行时,不会发生异常
如果ReadChar先于该异常,则不会发生该异常Thread.Sleep(1000)(但仍会在较小的超时时发生)
使用BinaryReaderon 时不会发生异常FileStream,在该位置存储了TCP服务器答案的所有精确字节。
那么,从套接字流中缓冲单个字符可能是与时间相关的问题?