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

本文关键字:小文 文件 网络传输 | 更新日期: 2023-09-27 18:08:22

我编写了一个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);
        }
    }

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

如果你的程序在机器C上运行,并且它将文件从机器A传输到机器B,那么除了在多个线程或进程中进行复制之外,你在这里做不了什么。

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

AS/400上的文件在哪里?如果在/QDLS文件系统中,这可能是您的主要问题。

另外,如果你实际使用的是AS/400;而不是更现代的硬件& &;操作系统。

最后,假设您有现代硬件,您可以要求IBM i人员检查网卡上的设置。

如果文件作为blob存储在DB2表中,而不是作为流文件存储在IFS上,那么应该可以获得更好的性能。