首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkStream池

NetworkStream池
EN

Stack Overflow用户
提问于 2010-12-21 06:23:01
回答 1查看 644关注 0票数 1

我有一个多线程应用程序,它通过TCP连接与服务器通信。应用程序将部署为windows服务。

实现它的方式是,有Controller,它创建Communicator对象,为Communicator分配端口号、消息计数等属性,并调用其StartClient方法开始与服务器的对话。

StartClient方法中,每个Communicator对象使用Controller指定的端口号和url创建到服务器的连接。在建立连接之后,它在内部创建一个线程,并调用ReadMessages方法,该方法一直从服务器读取,直到满足消息计数,然后被关闭。

根据运行时条件,可能需要重用Communicator对象来再次与服务器对话,因此将再次调用ReadMessages方法。

最初,当Dispose()方法完成时,我们一直在为NetworkStream、StreamReader和StreamWriter对象调用ReadMessages方法,但是在重新连接场景中,它会抛出“无法访问已处理的对象”错误。因此,我们注释掉了用于测试的Dispose方法调用。

到目前为止,它工作良好,但我担心,这不是实现这种功能的最佳方式,因为我从来没有处理对象。

我在想从对象池的角度来看,是否可以有一个可以被不同线程重用的Stream对象池?

解决这一问题的一种方法是每次Communicator与服务器连接时创建一个Stream的新实例,但我认为这将是一个昂贵的操作。

您能帮我找出一种更好的方法来处理这里的情况吗?这样我就可以重用Communicator对象而不影响性能了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-21 07:04:47

这种方法将基于您需要多久读取消息的频率--如果偶尔出现n,我建议您重新考虑通信器对象的因素,使"ReadMessages“操作成为原子操作--即它将连接到服务器,创建网络流,读取消息,然后处理所有内容。

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

https://stackoverflow.com/questions/4496760

复制
相关文章

相似问题

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