C#编写的WinForm程序,运行一段时间后越来越卡,怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#编写的WinForm程序,运行一段时间后越来越卡,怎么办?相关的知识,希望对你有一定的参考价值。

是程序结构的问题么?开始很流畅的说。。。
是不是有什么清空什么什么东西的语句啊?怎么写?
怎么开线程。。。怎么关掉。。。
我现在是用了timer,也用了dispose(),不过程序光开着不做任何事,都会变慢。。。怎么回事呢

肯定是你代码逻辑有问题啦~

最简答的一个方法 GC.Collect(); 垃圾回收

最好检查一下你的所有变量的作用域

并且检查一下不要再循环中初始化对象那样很慢
你不贴代码谁也不知道怎么回事

对象被dispose()不见得资源就全被释放了,.net依据一定机制去释放资源,对象被dispose()了也不会马上就释放资源
参考技术A 把要打包的内容添加到解决方案,运行后确定没有错误,则可以进行打包操作如下:选择你的解决方案,右击选属性在弹出的页面左侧一列有一个按钮“发布”设置应用程序文件,需要的dll要选择‘包括''系统必备',如果安装目标上不能确定是否安装了.net2.0要把.netframwork2.0包括进来确定选择好发布位置(第一个选择路径那儿就是)点击立即发布即可如果生成dll则在‘应用程序’->输出类型,选择‘类库’webservice:建立项目的时候选择c#->asp.netweb服务应用程序 参考技术B 新建一个没返回值,没参数的函数,用于存放你的线程方法,
然后在主函数里初始化一个Thread类,把刚才那个方法放进去初始方法中,
然后调用Start方法将线程启动,关闭线程的话,一般是不用的,因为系统会自动回收了。
参考技术C 你有没有开线程,而且没关掉;
关于释放资源我也不懂,推荐个博客
http://lj102800.blog.163.com/blog/static/13431543720100122245059/
参考技术D 其实timer就是实现了多线程的,所以用的时候最好用完释放资源,不然用久了
系统都可能死机的

C# winform中timer函数如何停止,点运行后可再次启动周期事件

在MenuStrip1控件中,在Form1窗体没有添加timer1控件
运行RunMenu_Click
private void RunMenu_Click(object sender, EventArgs e)

//到达时间的时候执行事件,周期为10秒;
System.Timers.Timer timer1 = new System.Timers.Timer(10 * 1000);
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
timer1.AutoReset = true; //设置一直执行(true)
timer1.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件

RunMenu.Enabled = false;
StopMenu.Enabled = true;

private void timer1_Tick(object sender, EventArgs e)

//是连接sql,插入数据操作

停止StopMenu_Click,停止timer应该怎么实现呢
private void StopMenu_Click(object sender, EventArgs e)

??timer1 .Enabled = false; ??吗,timer1没有此参数。
RunMenu.Enabled = true;
StopMenu.Enabled = false;

运行可以,就是停止StopMenu不会写,Form1窗体没timer1控件
StopMenu_Click 函数应该怎么写,谢谢!!
嗯,得把timer1拿出来定义辉比较行的通。
但是按一楼的在函数外实例化不成功。汗....
应该怎么实例化啊

在外面定义一个变量,不要实例化
System.Timers.Timer timer1;
然后:
private void RunMenu_Click(object sender, EventArgs e)

//到达时间的时候执行事件,周期为10秒;
timer1 = new System.Timers.Timer(10 * 1000);
//这里不要定义变量!
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
timer1.AutoReset = true; //设置一直执行(true)
timer1.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件

RunMenu.Enabled = false;
StopMenu.Enabled = true;

最后:
private void StopMenu_Click(object sender, EventArgs e)

timer1.Stop();
//这里停止计时
RunMenu.Enabled = true;
StopMenu.Enabled = false;
参考技术A //到达时间的时候执行事件,周期为10秒;
System.Timers.Timer timer1 = new System.Timers.Timer(10 * 1000);
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
private void RunMenu_Click(object sender, EventArgs e)


timer1.AutoReset = true; //设置一直执行(true)
timer1.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件

RunMenu.Enabled = false;
StopMenu.Enabled = true;

private void timer1_Tick(object sender, EventArgs e)

//是连接sql,插入数据操作

停止StopMenu_Click,停止timer应该怎么实现呢
private void StopMenu_Click(object sender, EventArgs e)

timer1 .Enabled = false;
RunMenu.Enabled = true;
StopMenu.Enabled = false;

这样就行了,把Timer1拿出来
不然会提示你Timer1未定义
参考技术B timer1.stop();

以上是关于C#编写的WinForm程序,运行一段时间后越来越卡,怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

VS工具下C#编写的WinForm程序运行缓慢问题

C# winForm窗体程序 锁定问题求赐教。

C#编写的程序 使用Webbrowser控件,占用大量内存?

C# winform程序运行几个小时后,程序未响应。如何排除这个问题?

c# winform程序发布后运行时出现的一个问题

c# winform打包后,安装上之后没法运行?