回调函数如何强制回收CPU资源

Y御剑逍遥Y 2019-06-01 07:39:15
本人编写一个小程序,主要使用webclient向服务器不断get,使用downloaddata异步方式,主程序每300ms get一次,使用回调函数接收数据,数据量不大,每次收到约1500字节。
但是问题来了,我发现系统回调线程自动退出的速度没有,发送的快,VS2015的程序性能监视器上能看到,导致运行很长时间后,CPU占有率不断升高,最后计算机就变得很卡。
程序运行初期CPU占有率只有2%,最后可以到80%。
我想如果我回调函数执行完,强制退出线程,不知如何做到,请各路大神不吝赐教,谢谢。
...全文
193 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y御剑逍遥Y 2019-08-23
  • 打赏
  • 举报
回复
引用 8 楼 wanghui0380的回复:
不是强制退出线程,而是怎么把用好webclient。类似这种东西能using就using,不能using就只能全局1个,或者全局池化。 300ms一次生产一次,但消费释放慢,所以堆叠。利用池化刻意限流可以的。 这个问题,几乎在微软所有的版本的相关类都有类似问题,httprequest,webclient,httpclient基本上都有这问题。曾经的一次生产事故,我们把这几个都试遍了,发现他们都有同样的问题 httpclient类的一次讨论 https://www.oschina.net/news/77036/httpclient
受教了,谢谢你提供的资料
exception92 2019-08-23
  • 打赏
  • 举报
回复
主要使用webclient向服务器不断get -》可以去查看一下tcp的连接数。难不成目前是不断的get,是不断的创建线程导致的。
wanghui0380 2019-08-23
  • 打赏
  • 举报
回复
不是强制退出线程,而是怎么把用好webclient。类似这种东西能using就using,不能using就只能全局1个,或者全局池化。 300ms一次生产一次,但消费释放慢,所以堆叠。利用池化刻意限流可以的。 这个问题,几乎在微软所有的版本的相关类都有类似问题,httprequest,webclient,httpclient基本上都有这问题。曾经的一次生产事故,我们把这几个都试遍了,发现他们都有同样的问题 httpclient类的一次讨论 https://www.oschina.net/news/77036/httpclient
Y御剑逍遥Y 2019-08-22
  • 打赏
  • 举报
回复
引用 5 楼 jhonsonzhang的回复:
我觉得是你的异步委托有问题,导致死循环了。回调函数里面的条件不满足,就在那儿耗着。你代码加个if .....else return .应该就流畅了。但是可能你得不到需要的结果。所以回头还是需要找你异步委托时候的代码。
我把注册委托的代码放着timer里了,所以每次timer执行一次,委托就多注册一个,N次后就完蛋了
Y御剑逍遥Y 2019-08-22
  • 打赏
  • 举报
回复
的确是,代码的顺序有问题
jhonsonzhang 2019-06-05
  • 打赏
  • 举报
回复
我觉得是你的异步委托有问题,导致死循环了。回调函数里面的条件不满足,就在那儿耗着。你代码加个if .....else return .应该就流畅了。但是可能你得不到需要的结果。所以回头还是需要找你异步委托时候的代码。
Y御剑逍遥Y 2019-06-03
  • 打赏
  • 举报
回复
回调函数只是接收数据 并无死循环,函数如下
Private Sub depth_DownloadDataCallback(ByVal sender As Object, ByVal e As DownloadDataCompletedEventArgs)
If e.Cancelled = False AndAlso e.Error Is Nothing Then
Dim data() As Byte = CType(e.Result, Byte())
Dim textData As String = utf8.GetString(data)
TextBox1.Text = textData
Timer1.Enabled = True
End If
End Sub
Y御剑逍遥Y 2019-06-03
  • 打赏
  • 举报
回复
,感谢您的回答 thread.Abort 可以写在回调函数中吗?是否可以给个列子参考下,谢谢了
threenewbee 2019-06-01
  • 打赏
  • 举报
回复
线程里只要没有死循环,执行完了都会自动退出 或者可以用 thread.Abort 强制终止 在线程里用 try ... catch ThreadAbortException 拦截这个异常添加清理的代码

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧