星先 2015-01-15 06:57 采纳率: 75%
浏览 2710
已结题

OOM,多次操作FileStream造成内存溢出

public static string GetLocation(string typename, string itemid, string certname, object imgno, object imgname, byte[] byData, out string errMsg)
        {
            //GC.Collect();
            string strfile = "";
            try
            {
                strfile = String.Format("{0}\\fileImages", Application.StartupPath);
                if (!Directory.Exists(strfile))
                {
                    Directory.CreateDirectory(strfile);
                }
                strfile = String.Format("{0}\\{1}_{2}_{3}_{4}_{5}_{6}", strfile, DateTime.Now.ToString("yyyyMMdd"), typename, itemid, certname, imgno, imgname);
                if (!File.Exists(strfile))
                {
                    FileStream fs = File.Create(strfile);
                    fs.Close();
                    fs.Dispose();
                    File.WriteAllBytes(strfile, byData);
                }
                errMsg = "";
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
            }
            finally
            {
                GC.GetTotalMemory(true);
            }
            return strfile;
        }

监测内存的时候,发现程序运开始调用这里后,操作图片与fs时,内存只增不减,即使做了上述的释放操作,也没有效果。
各位帮忙给指点下。。

  • 写回答

4条回答 默认 最新

  • Tiger_Zhao 2015-01-15 07:14
    关注

    正常。
    垃圾回收机制就是Dispose()只是标记对象可释放而已,等到空闲时或者内存不足时,才会真正进行释放。
    所以一段时间内,连续创建对象并Dispose(),内存用量是只增不减的。

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?