C#通过网络传输大量小文件

时间:2014-06-13 07:49:16

标签: c# ibm-midrange file-transfer

我已经编写了一个C#控制台应用程序,用于将AS400计算机上的共享目录中的大量小型XML文件(大约80000个文件,每个大约300KB,总大小约3GB)传输到Windows上的共享目录机。

这两台机器在同一个局域网上,但复制需要花费数小时。我需要遍历文件,因为我需要更新数据库中的表,我知道这可能是瓶颈,但不包括SQL更新;是否有更快的方式来传输这些文件?

    public void CopyFiles()
    {
        DirectoryInfo IFS = new DirectoryInfo(@"\\AS400Machine\ShareFolder\");

        string NewPath = @"\\WindowsMachine\ShareFolder\";

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

2 个答案:

答案 0 :(得分:5)

如果您的程序在计算机C 上运行,并且它将文件从计算机A 传输到计算机B ,那么您就不多了可以在这里做,除了在多个线程或进程中进行复制。

如果你可以在两台机器上运行你的程序,你可以做一些漂亮的技巧,比如压缩文件,这样你就可以传输一个(或几个)大文件,而不是数千个小文件。

答案 1 :(得分:1)

AS / 400上的文件在哪里?如果在/ QDLS文件系统中,那可能是您的大部分问题。

另外,如果您实际使用的是AS / 400;而不是更现代的硬件和OS。

最后,假设您有现代硬件,您可能会要求IBM i人员检查网卡上的设置。我在新的1GBit硬件配置的原始硬件上看到了10Mbit半双工。