【问题标题】:Downloading 4GB file from .net application从 .net 应用程序下载 4GB 文件
【发布时间】:2012-03-14 14:25:40
【问题描述】:

我的要求是从 .net 应用程序上传 4GB 文件并从 .net 应用程序下载相同的文件。我们能够使用 .net 应用程序上传和下载 4GB 文件。

所以要上传 4GB 文件,我们拆分了 4GB 文件,下载时我们使用 C# 中的 FileStream 对象合并文件。

现在,当我从我的 .net 应用程序中单击“下载”按钮时,我可以将文件保存在客户端计算机中。但是在保存文件流对象时,会写入字节字节并将文件保存到用户的计算机。这需要更多时间将文件保存到客户端机器。即使是 100MB 的文件也需要节省大约 2 小时。所以如果我保存 4GB 则需要很长时间。

提高速度的最佳方法是什么? 是否有可用的 Filestream 对象? 请帮助我使用 .net 应用程序从 Networkshare 下载 4GB 文件。 如果您还找到任何其他解决方案来上传和下载 .net 中的 4gb 文件,那就太好了。

我无法使用 asp .net 下载代码下载 4GB 文件。所以我们采用了拆分方法。 请帮助我提高以下代码的速度。我正在使用 Asp .net 3.5 应用程序。

上传时我的代码:

                    FileStream foption = new FileStream(strFileName, FileMode.Open);
                    len = foption.Length;
                    eachSize = (int)Math.Ceiling((double)len / x);
                    foption.Close();
                    FileStream inFile = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Read);
                    for (int i = 0; i < x; i++)
                    {
                        FileStream outFile = new FileStream(strDir + "\\" + i + ".zip", FileMode.OpenOrCreate, FileAccess.Write);
                        int data = 0;
                        byte[] buffer = new byte[eachSize];
                        if ((data = inFile.Read(buffer, 0, eachSize)) > 0)
                        {
                            outFile.Write(buffer, 0, data);
                        }
                        outFile.Close();
                    }

下载时我的代码

FileStream outFile = new FileStream("\\\\" + clientIPAddress + "\\upload\\output.zip", FileMode.OpenOrCreate, FileAccess.Write);
            for (int i = 0; i < 10; i++)
            {
                int data = 0;
                byte[] buffer = new byte[4096];
                FileStream inFile = new FileStream(strMediaPath + "\\" + i + ".zip", FileMode.OpenOrCreate, FileAccess.Read);
                while ((data = inFile.Read(buffer, 0, 4096)) > 0)
                {
                    outFile.Write(buffer, 0, data);
                }
                inFile.Close();
            }
            outFile.Close();

谢谢 埃德温

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我一开始看不到拆分文件的意义,您所做的只是保证在传输结束时进行另一个慢速磁盘复制操作以连接文件。

    不拆分文件将要求第一个代码块中的ilong 而不是int。 32 位整数将在 2GB 处分接,因为它们已签名。

    最后,你的缓冲区应该大很多。 4k 是我的第一台 TRS-80 计算机中的内容,这是一个 微小 数据块,可以在循环中读取和写入。试试更大的容量,比如 1MB。

    【讨论】:

    • 两个接球都很棒;我在我的机器上对 热缓存 进行了一些快速而肮脏的测试,发现 128kb 的速度稍快,但仅比 4kb 快 1.4 倍。冷缓存会有所不同,但这超出了我目前的兴趣范围。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多