这里写自定义目录标题

            myImageCodecInfo = GetEncoderInfo("image/jpeg");myEncoder = Encoder.Quality;myEncoderParameters = new EncoderParameters(1);Int64 ratio = Convert.ToInt64(TextBlock_Compress.Text);myEncoderParameter = new EncoderParameter(myEncoder, ratio);myEncoderParameters.Param[0] = myEncoderParameter;Bitmap bitMap = null;//Bitmap map2 = new Bitmap(img2);if (fused){//using (Image img1 = Image.FromFile(sourcefiles[i_1])){Image img1 = Image.FromFile(sourcefiles[i_1]);//Bitmap map1 = new Bitmap(img1);//using ()){ Image img2 = Image.FromFile(sourcefiles[i_1 + 1]);var width = img1.Width + img2.Width;var height = img1.Height;// 初始化画布(最终的拼图画布)并设置宽高bitMap = new Bitmap(width, height);// 初始化画板//using (){Graphics g1 = Graphics.FromImage(bitMap);// 将画布涂为白色(底部颜色可自行设置)g1.FillRectangle(System.Drawing.Brushes.White, new System.Drawing.Rectangle(0, 0, width, height));//在x=0,y=0处画上图一g1.DrawImage(img1, 0, 0, img1.Width, img1.Height);//在x=0,y在图一往下10像素处画上图二g1.DrawImage(img2, img1.Width, 0, img2.Width, img2.Height);g1.Dispose();}img1.Dispose();img2.Dispose();                        }}}elsebitMap = new Bitmap(MyImg)if (FileSuffix == "png" || FileSuffix == "bmp" || FileSuffix == "jpg" || FileSuffix == "dds"){//Image img = new Bitmap(MyImg);if (Rb2png.IsChecked == true){if (Cum_Textbox.IsEnabled == true){if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + Cum_Textbox.Text + detect_time + ".png", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + Cum_Textbox.Text + detect_time + "_NOK.png", myImageCodecInfo, myEncoderParameters);}else{if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + detect_time + ".png", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + detect_time + "_NOK.png", myImageCodecInfo, myEncoderParameters);}}else if (Rb2jpg.IsChecked == true){if (Cum_Textbox.IsEnabled == true){if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + Cum_Textbox.Text + detect_time + ".jpg", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + Cum_Textbox.Text + detect_time + "_NOK.jpg", myImageCodecInfo, myEncoderParameters);}else{if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + detect_time + ".jpg", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + detect_time + "_NOK.jpg", myImageCodecInfo, myEncoderParameters);}}else if (Rb2BMP.IsChecked == true){if (Cum_Textbox.IsEnabled == true){if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + Cum_Textbox.Text + detect_time + ".bmp", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + Cum_Textbox.Text + detect_time + "_NOK.bmp", myImageCodecInfo, myEncoderParameters);}else{if (Img_Name.Substring(0, 1) == "0")bitMap.Save(path + detect_time + ".bmp", myImageCodecInfo, myEncoderParameters);elsebitMap.Save(path + detect_time + "_NOK.bmp", myImageCodecInfo, myEncoderParameters);}}}else{MessageBox.Show("文件格式错误,请拖入图片文件(png,bmp,jpg)");}if (bitMap != null)bitMap.Dispose();      myEncoderParameter.Dispose();myEncoderParameters.Dispose();//GC.Collect();

需要注意的是,在这段代码中,除了使用new新建的目标会在循环中出现内存泄漏之外,Graphics g1,Image img1,Image img2这几个新建的画图同样会在循环时造成内存泄漏,
现归纳三个方法防止泄漏:
一是每个目标使用完成后在末尾添加.Dospose()
二是在所有目标使用完成后,在结尾添加GC.Collect()
三是在创建目标时使用using,以使其在使用完成后自动释放

# 学习记录1(C#-解决内存泄漏的几种方法)相关推荐

  1. Android 性能优化 - 彻底解决内存泄漏

    起源 有趣的灵魂千奇百怪,内存泄漏的也是各式各样 我在15年写过一遍 文章 < android中常见的内存泄漏和解决办法>http://blog.csdn.net/wanghao20090 ...

  2. Android 如何有效的解决内存泄漏的问题

    前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...

  3. js内存泄漏的几种常见情况

    内存泄漏 内存泄漏是指不再用到的内存,没有及时释放.既不能使用,又不能回收. 导致内存泄漏的几种常见情况 1.意外形成全局变量 解决方法:加上 'use strict' 启用严格模式来避免这类问题, ...

  4. 内存泄漏的8种情况(附代码示例)

    一. 内存泄漏(memroy leak)         严格来说,只有对象不会再被程序用到了,但是GC又不能回收它们的情况,才叫内存泄漏         宽泛的讲,实际情况中很多时候一些不太好的实践 ...

  5. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

  6. Win11的两个实用技巧系列之解决dns异常的三种方法、win10/win11卡顿的三种解决办法

    电脑dns异常怎么修复win10? Win10解决dns异常的三种方法 电脑dns异常怎么修复win10?最近有很多win10用户遇到dns配置错误的问题,这让用户非常苦恼,下面我们就来看看Win10 ...

  7. vue开发环境和生产环境里面解决跨域的几种方法

    vue开发环境和生产环境里面解决跨域的几种方法 参考文章: (1)vue开发环境和生产环境里面解决跨域的几种方法 (2)https://www.cnblogs.com/pass245939319/p/ ...

  8. linux查看进程占用的内存大小,查看进程占用内存大小的几种方法,占用内存几种方法...

    查看进程占用内存大小的几种方法,占用内存几种方法 1. pmap -x pid 2. ps -aux | grep 进程名 ps -e -o 'pid,comm,args,pcpu,rsz,vsz,s ...

  9. 【JVM高级特性与最佳实践(第3版)-周志明】-学习记录之【自动内存管理】

    写在前面,不是原创,是周志明老师书里得内容,方便个人随时学习查看,因为发布得时候没有这个选项,只能选原创 一.概述 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作 ...

最新文章

  1. Can't connect to MySQL server on 'localhost' (10061)的解决办法!
  2. 吴恩达DeepLearningCourse2-改善深层神经网络:超参数调试、正则化以及优化
  3. 简单排序算法(Java实现)
  4. Delete Edges
  5. CF5E-Bindian Signalizing【单调栈】
  6. windows7系统损坏修复_【软件资讯】还在用win7?微软Windows 7系统正式停止技术支持...
  7. linux下的C语言开发(进程创建)
  8. Python-Spyder中文包正式发布!
  9. 【服务器正在运行中】以及【切换到】等错误问题的解决
  10. 手游php,PHP响应式手游APP软件游戏中心下载网站整站源码(自适应手机移动端) dedecms内核...
  11. 矩阵连乘问题算法思想_算法分析与设计——矩阵连乘问题
  12. 如何让word中清晰的图片无损导出为pdf?
  13. 【全新二开】首发淘宝京东唯品会自动抢单APP系统源码 修复众多BUG
  14. 谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理
  15. Greenplum 分布键 distribute hash分布和随机分布
  16. 小程序获取微信绑定的手机号
  17. c 中服务器多次接受消息,c/s模拟高并发服务器端线程池接收问题
  18. 软考和PMP认证对比,哪个含金量高?
  19. JS splice的用法
  20. vm进入bios设置的方法

热门文章

  1. 声网实时连麦互动助力CCtalk万人互动课堂
  2. zabbix 监控-华为路由器(ASG2100)
  3. 网线,交换机基础命令
  4. Spring Security优劣之我见
  5. linux升级gfortran版本,Ubuntu下GCC、G++和gfortran版本切换
  6. 淘宝触屏版宝贝详情改造(一)
  7. STM32学习过程一
  8. Android studio实现番茄钟
  9. 矢量分析中含有▽算子的恒等式记法
  10. iOS开发:在苹果开发者官网回复邮件的时候,上传附件一定要用英文命名的原因