gpt4 book ai didi

asyncsocket - 在所有情况下都必须调用 EndRead() 吗?

转载 作者:行者123 更新时间:2023-12-04 11:59:29 26 4
gpt4 key购买 nike

与使用(双向)NetworkStream 的异步 IO 相关,MSDN说“每次调用 BeginRead 都必须调用一次 EndRead。”

即使对于 EndRead() 将抛出异常的情况,例如在发出 BeginRead() 后关闭 NetworkStream 的情况下,这是否也是正确的?

我不想要抛出异常的开销,但我也不希望泄漏由 BeginRead() 保留的操作系统宝贵资源。

我也知道可以在流状态测试和条件 EndRead() 之间关闭流,但是如果在我们知道流关闭时可以省略 EndRead(),那么在大多数情况下这将节省异常处理.

我做错了吗?

谢谢!

最佳答案

GCHandle s 固定缓冲区和一些其他非托管资源由完成端口回调释放。非托管 OVERLAPPED结构将徘徊直到IAsyncResult最终确定。如果您的应用程序中的网络负载不大,这可能是可以容忍的,但如果您的应用程序每秒处理许多连接,这可能会成为一个问题,因为只有在完整的 GC 收集和单独的线程上才会发生终结。

注意:这些是使用 Reflector 获得的实现细节。买者自负。

关于asyncsocket - 在所有情况下都必须调用 EndRead() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com