小编Dom*_*omi的帖子

byte []的空闲内存

我目前正在努力解决c#中的内存使用问题.

我目前正在处理的工具能够上传和下载文件.为此,它使用字节数组作为文件内容的缓冲区.在上传或下载操作之后,我可以处理WebResponse和Stream(+ Reader/Writer)对象,但是字节数组永远保留在内存中.它超出范围我甚至'空'它,所以我猜垃圾收集永远不会运行.

在搜索时,我发现很多文章建议永远不要手动运行GC,但是有一个简约的后台应用程序,不断占用100甚至1000 MB的RAM(不断增加你使用它的时间越来越长)是不错的.

那么,如果不推荐使用GC,还能在这种情况下做些什么?

编辑3 /解决方案:我最终使用了一个16kb字节缓冲区,它填充了来自文件i/o的数据.之后,将缓冲区内容写入RequestStream,并采取进一步的操作(更新进度条等).

编辑2:这似乎与LOH有关.我将在周五进行测试并在此处记录结果.

编辑:这是代码,也许我错过了参考?

    internal void ThreadRun(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        UploadItem current = Upload.GetCurrent();

        if (current != null)
        {
            string localFilePath = current.src;
            string fileName = Path.GetFileName(localFilePath);
            elapsed = 0;
            progress = 0;

            try
            {
                string keyString = Util.GetRandomString(8);

                worker.ReportProgress(0, new UploadState(0, 0, 0));

                FtpWebRequest req0 = Util.CreateFtpsRequest("ftp://" + m.textBox1.Text + "/" + keyString, m.textBox2.Text, m.textBox3.Text, WebRequestMethods.Ftp.MakeDirectory);

                req0.GetResponse();

                FtpWebRequest req1 = Util.CreateFtpsRequest("ftp://" + m.textBox1.Text + "/" …
Run Code Online (Sandbox Code Playgroud)

c# memory-management

3
推荐指数
2
解决办法
6623
查看次数

标签 统计

c# ×1

memory-management ×1