我编写了一个c#控制台应用程序,用于从AS400机器上的共享目录复制大量小型XML文件(大约80000个文件,每个文件大约300KB,总大小约3GB)到windows机器上的共享目录。
两台机器在同一个局域网中,但是复制需要花费很多时间。我需要循环遍历文件,因为我需要更新数据库中的表,我知道这可能是瓶颈,但不包括SQL更新;有没有更快的方法来传输这些文件?
public void CopyFiles()
{
DirectoryInfo IFS = new DirectoryInfo(@"\AS400MachineShareFolder");
string NewPath = @"\WindowsMachineShareFolder";
Directory.CreateDirectory(NewPath);
foreach (FileInfo xmlFile in IFS.GetFiles())
{
var newFullPath = string.Format(@"{0}{1}", NewPath, xmlFile.Name);
// SQL Update
// Copy File
xmlFile.CopyTo(newFullPath, true);
}
}
如果你的程序在机器C上运行,并且它将文件从机器A传输到机器B,那么除了在多个线程或进程中进行复制之外,你在这里做不了什么。
如果你可以在两台机器上运行你的程序,你可以做一些巧妙的技巧,比如压缩文件,这样你就可以传输一个(或几个)大文件,而不是数千个小文件。
AS/400上的文件在哪里?如果在/QDLS文件系统中,这可能是您的主要问题。
另外,如果你实际使用的是AS/400;而不是更现代的硬件& &;操作系统。
最后,假设您有现代硬件,您可以要求IBM i人员检查网卡上的设置。
如果文件作为blob存储在DB2表中,而不是作为流文件存储在IFS上,那么应该可以获得更好的性能。