首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有必要清理SocketAsyncEventArgs.Completed吗?

有必要清理SocketAsyncEventArgs.Completed吗?
EN

Stack Overflow用户
提问于 2014-11-24 05:16:26
回答 1查看 659关注 0票数 1

因此,我有一个带有SocketAsyncEventArgs池的IOCP项目,它使它们可以重用,并减少了SocketAsyncEventArgs.的繁重分配任务。

我假设当SocketAsyncEventArgs.Completed事件被调用时,保持可重用(未被释放),连接在链中的已完成的事件不会自动设置为null。因此,如果不希望多次触发特定事件,则必须手动清除事件。

我对SocketAsyncEventArgs.Completed的假设正确吗?或者它是内部管理的?

下面的代码可能会更清楚地解释:

代码语言:javascript
复制
void Foo(SocketAsyncEventArgs e) // Call-back 
{
     DoJob(e);

     // Should I do it? 
     // e.Completed -= Foo;
}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 08:13:38

使用SocketAsyncEventArgs类的正确方法是在创建实例时添加一次处理程序。完成后,您只需将实例返回到池。不需要删除处理程序;只是在从池中提取新实例时,不需要再次添加处理程序。

不要忘记还有其他字段--即那些与您正在处理的特定完成相关的字段--您确实希望被清除。完成当前操作后,可以在将实例返回到池之前清除它们,也可以等到下次使用时从池中检索实例。在将值返回到池之前,最好清除这些值,因为对于引用类型值,如果对象不再在其他地方使用,则可以确保它们是可收集的,而不是让池中的“幻影”引用保持其可访问性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27098274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档