c# 使用 FileStream /copy 将大数据 (105GB) 复制到网络共享会增加 RAM 消耗 [关闭]

问题描述 投票:0回答:1

当我使用网络共享(92.168.0.XXX\path)时,RAM 的消耗会增加。问题不在于像 (C:) 这样的驱动器。有谁知道它可能是什么?要复制的文件大小约为 100GB ...

public void copy (String _quelldatei, String _zieldatei)
        {
            FileStream fsout = new FileStream(_zieldatei, FileMode.Create);
            FileStream fsin = new FileStream(_quelldatei, FileMode.Open);
            byte[] data = new byte[1048576];//in MiB
            int readbyte;
            while ((readbyte=fsin.Read(data,0,data.Length))>0)
            {
                fsout.Write(data, 0, readbyte);
                BWkopieren.ReportProgress((int)(fsin.Position*100/fsin.Length));
            }
            fsin.Close();
            fsout.Close();
        }
c# filestream
1个回答
-1
投票

我看了你的代码,怀疑这一行。

BWkopieren.ReportProgress((int)(fsin.Position*100/fsin.Length));

这是 BackgroundWorker 的一部分,对吗?这可能会导致问题,因为您为每次迭代制作了太多报告。

也许将报告进度减少至少 10 秒,并为放松 CPU 进程添加延迟至少 10 毫秒,然后重试。

var lastReport = DateTime.Now;
while ((readbyte = fsin.Read(data, 0, data.Length)) > 0)
{
    fsout.Write(data, 0, readbyte);

    if(DateTime.Now - lastReport >= TimeSpan.FromSeconds(10))
    {
        BWkopieren.ReportProgress((int)(fsin.Position * 100 / fsin.Length));
        lastReport = DateTime.Now;
    }

    System.Threading.Thread.Sleep(10);
}
© www.soinside.com 2019 - 2024. All rights reserved.