C#File.Move服务网络速度慢

时间:2012-10-19 16:14:56

标签: c# networking file-transfer

我创建了一个服务,将某个目录中的某些文件类型移动到另一个文件类型,这在我的网络上可以很好地在本地工作。虽然它工作速度非常慢(500mb文件需要6 1/2分钟),但在同一个网络上,但是通过资源管理器复制并粘贴到文件夹中的相同文件在大约30/40秒内完成。

文件移动发生的片段。

currentlyProcessing.Add(currentFile.FullName);
try
{
    eventMsg("Attempting to move file","DEBUG");

    File.Move(oldFilePath, newFilePath);
    eventMsg("File Moved successfully","DEBUG");


}
catch (Exception ex)
{
    eventMsg("Cannot Move File another resource is using it", "DEBUG");
    eventMsg("Move File Exception : " + ex, "DEBUG");

}
finally
{ 
    if(File.Exists(currentFile.FullName + ".RLK"))
    {
        try
        {
            File.Delete(currentFile.FullName + ".RLK");
        }
        catch (IOException e)
        {
            eventMsg("File Exception : " + e, "DEBUG");
        }

    }
    currentlyProcessing.Remove(oldFilePath);
}

我担心代码很好(因为它在其他网络上按预期工作)所以问题可能是网络,某种形式或形式。有没有人有任何常见的检查技巧,该服务作为本地系统(或网络服务)运行,似乎没有访问问题。还有哪些因素会影响这一点(网络/硬件除外)。

我想要的是具有与我在资源管理器中见过的相似的传输速度。任何指针都非常感激。

2 个答案:

答案 0 :(得分:0)

首先 相互ping通以检查延迟,以便您可以查看问题是在网络中是全局问题还是与您的软件有关。

cmd ping 192.168.1.12 -n 10

如果网络出现问题,请按照以下步骤操作:

  1. 重新启动HUB /路由器
  2. 其中一台PC使用低信号WiFi吗?
  3. 是否已启用任何反病毒并监控网络活动?
  4. 如果上述方法都无法解决您的问题,请尝试使用WireShark进一步调查此问题。

答案 1 :(得分:0)

对于具有如此巨大尺寸的文件,我建议尽可能使用它们,特别是因为网络延迟始终是通过互联网上传/下载文件的一个重要因素。 您可以使用 System.IO.Packaging 压缩文件。请看这里Using System.IO.Packaging to generate a ZIP file,具体来说:

using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate))
        {
            string destFilename = ".\\" + Path.GetFileName(fileToAdd);
            Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
            if (zip.PartExists(uri))
            {
                zip.DeletePart(uri);
            }
            PackagePart part = zip.CreatePart(uri, "",CompressionOption.Normal);
            using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
            {
                using (Stream dest = part.GetStream())
                {
                    CopyStream(fileStream, dest);
                }
            }
        }

此外,如果可能,您可以像其他一些用户一样提及FTP。查看CodePlex上的Renci SSHNet library