[c#]句柄数不断攀升的解决方案

更新时间:2023-07-14 03:53:08 阅读: 评论:0

[c#]句柄数不断攀升的解决⽅案
句柄只是⽤来标识应⽤程序中的不同对象和同类中的不同的实例的⼀个数字,通常情况下,句柄值对普通⽤户毫⽆⽤处,但是句柄数量却可以间接反映出⼀个程序⾥产⽣的对象实例的多少。句柄数越多,代表程序⾥new 出来的对象越多。但是在c#⾥,经常会遇到句柄数莫名其妙的增加。
赞美酒的句子DateTime lastTime1 = DateTime.Now.AddHours(1);
介绍一种事物作文
while (true)
{
var a = lastTime1 - DateTime.Now;
if (a.TotalHours <= 0)
红曲粉是什么
{
break;
}
//DoSomething!
Thread.Sleep(1000);
}
在DoSomeThing⾥,如果⽤⼀个委托,去更新窗体控件,会发现任务管理器⾥的“句柄数”⼀栏,值会⼀点点的增加。⽽且通常都不怎么降。⽐如:
兴字多音字组词
richTextBox1.Invoke(new EventHandler(delegate
{
label3.Text ="xxxx";
}));
不管这个匿名委托⾥有没有代码,句柄数都会增加
但是如果使⽤上下⽂同步对象给控件发送消息,这个问题就解决了
_syncContext.Post(ReFreshUI, a);
private void ReFreshUI(object state)
{
try
{
label3.Text = state.ToString();
}
catch世界名表品牌排行榜
{
}
}
⽽且我还发现⼀个有意思的问题。
那就是如果在循环⾥,添上对 StatusStripLabel控件进⾏更新的代码,句柄数也会增加,也是没有要停的意思。⼏分钟时间⾥居然升到了1000多。如果将这个控件换成Label控件,那么句柄数会保持不变。这算不算是StatusStripLabel这个控件的bug呢。
另外,还有⼀个可能导致句柄数增加的。就是很多⼈都会和我⼀样,写上这样的代码:
socket = new Socket(AddressFamily.InterNetwork, SocketType, SocketType == SocketType.Dgram ? ProtocolType.Udp : ProtocolType.Tcp);紫金牛的功效与作用
IAsyncResult result = socket.BeginConnect(remoteEP, null, null);
一颗水蜜桃if (result.AsyncWaitHandle.WaitOne(timeout, fal) && socket.Connected)
{
result.AsyncWaitHandle.Clo();
电视故障RemoteEndPoint = remoteEP;
return true;
}
经过测试发现。只要跑⼀轮这个代码,句柄数也会增加⼏个。⽽且跑完了也不会降下来。后⾯我想了下,result.AsyncWaitHandle就是⼀个WaitHandle对象,⽽我们知道这个对象是需要显式地释放掉才⾏的。
如果加上  result.AsyncWaitHandle.Clo();问题就可以完美的解决了,句柄数⼀般都不会上升,甚⾄可能降⼀点。

本文发布于:2023-07-14 03:53:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1095451.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:句柄   控件   对象   增加   程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图