2012-10-19 121 views
1

我創建了一個服務,將某個目錄中的某些文件類型移動到另一個文件類型,這在本地運行良好,而且在我的網絡上運行速度非常快。在不同的網絡上,雖然它的工作速度非常慢(500mb文件需要6 1/2分鐘),但通過資源管理器複製並粘貼到文件夾中的相同文件在大約30/40秒內完成。C#File.Move服務緩慢通過網絡

發生文件移動的代碼片段。

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); 
} 

我擔心的代碼是罰款(因爲它按預期工作的其他網絡上),所以這個問題可能是網絡,在某些形狀或形式。有沒有人有任何常見的技巧檢查,服務作爲本地系統(或網絡服務)運行,並且似乎沒有訪問問題。還有什麼其他因素會影響這個(網絡/硬件除外)。

我想要的是它具有與我在資源管理器中見過的相似的傳輸速度。任何指針不勝感激。

+0

我認爲你需要使用ftp或任何這樣的文件傳輸協議通過網絡移動文件.. – dotNETbeginner

回答

0

首先 互相ping通以檢查延遲,以便查看問題是全局性的,還是與您的軟件有關。

cmd ping 192.168.1.12 -n 10 

如果它在網絡上的一個問題,按照此:

  1. 重新啓動HUB /路由器
  2. 是在一臺PC使用WiFi與低信號?
  3. 是否有任何防病毒功能打開並監控網絡活動?

如果沒有上述解決您的問題,那麼請嘗試使用WireShark能夠進一步調查該問題。

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