我的實現有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);
}
}
}
}
}
}
你是說你的源文件夾和目標文件夾只在Web服務器上?爲什麼不使用File.Copy? – Vijay
'File.Copy'呈現相同的問題 –