2017-03-14 70 views
0

我的實現有2個服務器,一個是我的ASP.NET MVC項目所在的Web服務器,另一個是數據所在的服務器(AWS)。C#在網絡中複製文件時性能下降

我有一個複製例程,需要大約3分鐘在我的本地機器上運行,所以我不認爲它沒有任何問題,但是當它在服務器上需要超過45分鐘。

此例程在Web服務器中執行,並使用模擬通過Active Directory域訪問AWS服務器。源文件夾和目標文件夾都位於AWS服務器的同一文件夾中,因此它不是通過網絡複製文件,複製過程在同一文件夾內完成。

這個例程做了哪些附加操作,以便複製一個文件夾需要多次複製,否則只需要3分鐘就可以複製文件夾?

這是我運行代碼:

using (new Impersonation("domain.com", "Administrator", "password")) 
{ 
    Directory.CreateDirectory(webFolder.Replace(@"\", "\\")); 
    foreach (string dirPath in Directory.GetDirectories(templatePath, "*", SearchOption.AllDirectories)) 
       Directory.CreateDirectory(dirPath.Replace(templatePath, webFolder)); 

    foreach (string newPath in Directory.GetFiles(templatePath, "*.*", SearchOption.AllDirectories)) 
       FCopy(newPath, newPath.Replace(templatePath, webFolder)); 
} 


static void FCopy(string source, string destination) 
    { 
     int array_length = (int)Math.Pow(2, 10); 
     byte[] dataArray = new byte[array_length]; 
     using (FileStream fsread = new FileStream 
     (source, FileMode.Open, FileAccess.Read, FileShare.None, array_length)) 
     { 
      using (BinaryReader bwread = new BinaryReader(fsread)) 
      { 
       using (FileStream fswrite = new FileStream 
       (destination, FileMode.Create, FileAccess.Write, FileShare.None, array_length)) 
       { 
        using (BinaryWriter bwwrite = new BinaryWriter(fswrite)) 
        { 
         for (; ;) 
         { 
          int read = bwread.Read(dataArray, 0, array_length); 
          if (0 == read) 
           break; 
          bwwrite.Write(dataArray, 0, read); 
         } 
        } 
       } 
      } 
     } 
    } 
+0

你是說你的源文件夾和目標文件夾只在Web服務器上?爲什麼不使用File.Copy? – Vijay

+0

'File.Copy'呈現相同的問題 –

回答

0

我的源和目標文件夾之後的事情都在AWS服務器跨網絡,然後也數據流在同一文件夾內,因爲你的數據將流向何處你的應用程序正在執行嗎?我不確定在這段代碼中有什麼好的解決方案。但如果你可以使用PowerShell腳本,可以提高你的代碼性能至少1.5倍。以下腳本:

爲了獲得在PowerShell命令提示符下執行PowerShell腳本所需的權限,請使用以下命令,然後將數據從源複製到目標。

的Set-ExecutionPolicy RemoteSigned就是

複製 - 項目 - 路徑\服務器B \ C $ \程序\ TEMP \ test.txt的-Destination \服務器A \ C $ \程序\ TEMP \ test.txt的;