c#调用ShowDialog方法内存泄露
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方法内存泄露相关推荐
- Java 内存泄露以及避免方法
转载自 Java 内存泄露以及避免方法 内存泄露: 是指在程序运行过程中会不断的分配内存空间,那些不再使用的内存空间应该即时回收它们,从而保证可以保证系统可以再次使用这些内存.如果存在无用 ...
- windows内存泄露定位方法
windows内存泄露定位方法 内存泄露(Memory Leak)是C/C++程序经常遇到的一个棘手问题.简单来说,内存泄露就是没有释放本来应该释放的内存. 可以把解决内存泄露问题分成两步,第一步是定 ...
- java没错泄露_Java内存泄露问题
内存泄露 很多人在谈论内存泄露问题,当然对于c/c++来说,这个应该是老掉牙的问题,但是很多Java人员也越来越多得讨论这个问题,我这里写个小结,希望对大家有一定的参考价值. 必须先要了解的 1.c/ ...
- python 内存泄漏分析工具_记一次调试python内存泄露的问题
这两天由于公司需要, 自己编写了一个用于接收dicom文件(医学图像文件)的server. 经过各种coding-debuging-coding-debuging之后, 终于上线了, 上线后心里美滋滋 ...
- ATS插件开发中内存泄露问题的解决方法探讨
接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...
- java substring 性能_《Java程序性能优化》subString()方法的内存泄露
String的构造 首先了解下String的构造,String内部使用char [] value 来存储字符. 需要注意 offset和count在1.7已经没有了. /** The value is ...
- Android App定位和规避内存泄露方法研究
from:http://site.douban.com/android/widget/notes/350758/note/167481484/ 工作中刚好用到,网上搜到的,觉得不错,与大家分享 And ...
- vs内存泄露检测方法
方法一. 1.头文件: #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> 注意 #incl ...
- vs调试c语言检查内存泄露,VisualStudio中检查内存泄露方法
项目工程中存在内存泄露,被折磨了一晚上,终于查了出来,因为之前没有相关的经验,还比较生疏,在此记录下来,方便以后查找. 对于malloc出的内存的检测方法 这篇文章中详细地记录了从检查到找到确定位置到 ...
最新文章
- Koa 本地搭建 HTTPS 环境
- [diary]一下子更新了这么多
- eclipse修改默认工作空间
- Java并发编程:深入剖析ThreadLocal
- Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
- message from server: Host 'XXXX' is not allowed to connect to this MySQL server
- 单位阶跃信号是周期信号吗_手机信号变成“HD”,是代表没有信号吗?你的手机正在被扣费...
- 简单分析KafKa工作原理
- sqlserver把小数点后面多余的0去掉
- JAVA中实用的一个工具类--Hutool
- 360数科张家兴:金融科技的本质是线上化和自动化
- viper4android百度云盘,【图片】打造安卓最强音效,ViPER4Android【西南模范吧】_百度贴吧...
- 16. 收款(Accepting Money)
- mysql 批量查询插入,MySQL批量插入查询出来的数据
- Centos服务器ssh登录设置密钥对登录
- 前端学习笔记-JS数据类型
- macOS 控件教程(1)
- 安卓APP自动更新实现
- 【21天算法学习】折半插入排序
- php 招聘要求 转载
热门文章
- Flash绘画技巧:绘制女孩头像
- LabVIEW程序安全性保护详解(VI密码保护与删除)
- JS中window.onload事件详解
- svn篇1:svn下载安装
- 查看自己电脑的网络物理地址
- startsWith() 方法
- 天池“幸福感预测”比赛-2019
- 做预算,这几种降本降风险的用工模式必收藏!
- ShareSDK新浪微博登录时报错 (21322) error:redirect_uri_mismatch
- Python3网络爬虫:我要爬帅哥!!!(爬取帅哥图)