ShowDialog内存泄露问题

  • ShowDialog

ShowDialog

显示窗口有show和ShowDialog方法
调用ShowDialog方法显示窗口,
除非手动关闭,否则程序永远不执行ShowDialog往后的代码;
(后面的 Application.OpenForms[k].Close()方法,关闭窗口代码无效,不会执行)
且切换窗口后,内存一直增加

            int i = 0;while (true){if (i < Application.OpenForms.Count){Application.OpenForms[i].Hide();//隐藏窗口i++;}else{break;}}//反射创建窗口实例Form helloWorld = (Form)Activator.CreateInstance("WindowsFormsApp1", "WindowsFormsApp1." + openForm).Unwrap();//显示窗口helloWorld.ShowDialog();int k = 0;while (true){if (k < Application.OpenForms.Count){Application.OpenForms[k].Close();//关闭窗口k++;}else{break;}}

解决方案
1.可以定义一个全局窗口来控制窗口的跳转,这个方法很麻烦,且后期占用内存;
2.目前使用委托+异步+反射来实现

新建一个类,专门用来放委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection;
using System.Diagnostics;
using System.Threading;namespace WindowsFormsApp1
{class DelegateForm{public delegate void DoWorkHandler(string openForm);public  DoWorkHandler handlerF2 = (openForm) =>{FormCollection collection1 = Application.OpenForms;Task.Factory.StartNew(() => {int i = 0;while (true){if (i < Application.OpenForms.Count){Application.OpenForms[i].Hide();i++;}else{break;}}});Task.Run(() => {Form helloWorld = (Form)Activator.CreateInstance("WindowsFormsApp1", "WindowsFormsApp1." + openForm).Unwrap();helloWorld.ShowDialog();});};}
}

跳转的窗口
直接创建实例然后调用 handlerF2(“Form2”) 方法


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static WindowsFormsApp1.DelegateForm;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Control.CheckForIllegalCrossThreadCalls = false; //加载时 取消跨线程检查// 创建委托实例DelegateForm nc1 = new DelegateForm();//参数一需要打开的窗口nc1.handlerF2("Form2");}}
}

切换按钮,内存增加到一定值后保持不变

大神们有更好的方法解决ShowDialog方法内存泄露的问题,请下方留言

c#调用ShowDialog方法内存泄露相关推荐

  1. Java 内存泄露以及避免方法

    转载自  Java 内存泄露以及避免方法 内存泄露:      是指在程序运行过程中会不断的分配内存空间,那些不再使用的内存空间应该即时回收它们,从而保证可以保证系统可以再次使用这些内存.如果存在无用 ...

  2. windows内存泄露定位方法

    windows内存泄露定位方法 内存泄露(Memory Leak)是C/C++程序经常遇到的一个棘手问题.简单来说,内存泄露就是没有释放本来应该释放的内存. 可以把解决内存泄露问题分成两步,第一步是定 ...

  3. java没错泄露_Java内存泄露问题

    内存泄露 很多人在谈论内存泄露问题,当然对于c/c++来说,这个应该是老掉牙的问题,但是很多Java人员也越来越多得讨论这个问题,我这里写个小结,希望对大家有一定的参考价值. 必须先要了解的 1.c/ ...

  4. python 内存泄漏分析工具_记一次调试python内存泄露的问题

    这两天由于公司需要, 自己编写了一个用于接收dicom文件(医学图像文件)的server. 经过各种coding-debuging-coding-debuging之后, 终于上线了, 上线后心里美滋滋 ...

  5. ATS插件开发中内存泄露问题的解决方法探讨

    接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...

  6. java substring 性能_《Java程序性能优化》subString()方法的内存泄露

    String的构造 首先了解下String的构造,String内部使用char [] value 来存储字符. 需要注意 offset和count在1.7已经没有了. /** The value is ...

  7. Android App定位和规避内存泄露方法研究

    from:http://site.douban.com/android/widget/notes/350758/note/167481484/ 工作中刚好用到,网上搜到的,觉得不错,与大家分享 And ...

  8. vs内存泄露检测方法

    方法一. 1.头文件: #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>  注意  #incl ...

  9. vs调试c语言检查内存泄露,VisualStudio中检查内存泄露方法

    项目工程中存在内存泄露,被折磨了一晚上,终于查了出来,因为之前没有相关的经验,还比较生疏,在此记录下来,方便以后查找. 对于malloc出的内存的检测方法 这篇文章中详细地记录了从检查到找到确定位置到 ...

最新文章

  1. Koa 本地搭建 HTTPS 环境
  2. [diary]一下子更新了这么多
  3. eclipse修改默认工作空间
  4. Java并发编程:深入剖析ThreadLocal
  5. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
  6. message from server: Host 'XXXX' is not allowed to connect to this MySQL server
  7. 单位阶跃信号是周期信号吗_手机信号变成“HD”,是代表没有信号吗?你的手机正在被扣费...
  8. 简单分析KafKa工作原理
  9. sqlserver把小数点后面多余的0去掉
  10. JAVA中实用的一个工具类--Hutool
  11. 360数科张家兴:金融科技的本质是线上化和自动化
  12. viper4android百度云盘,【图片】打造安卓最强音效,ViPER4Android【西南模范吧】_百度贴吧...
  13. 16. 收款(Accepting Money)
  14. mysql 批量查询插入,MySQL批量插入查询出来的数据
  15. Centos服务器ssh登录设置密钥对登录
  16. 前端学习笔记-JS数据类型
  17. macOS 控件教程(1)
  18. 安卓APP自动更新实现
  19. 【21天算法学习】折半插入排序
  20. php 招聘要求 转载

热门文章

  1. Flash绘画技巧:绘制女孩头像
  2. LabVIEW程序安全性保护详解(VI密码保护与删除)
  3. JS中window.onload事件详解
  4. svn篇1:svn下载安装
  5. 查看自己电脑的网络物理地址
  6. startsWith() 方法
  7. 天池“幸福感预测”比赛-2019
  8. 做预算,这几种降本降风险的用工模式必收藏!
  9. ShareSDK新浪微博登录时报错 (21322) error:redirect_uri_mismatch
  10. Python3网络爬虫:我要爬帅哥!!!(爬取帅哥图)