我有一个多线程应用程序,它通过TCP连接与服务器通信。应用程序将部署为windows服务。
实现它的方式是,有Controller,它创建Communicator对象,为Communicator分配端口号、消息计数等属性,并调用其StartClient方法开始与服务器的对话。
在StartClient方法中,每个Communicator对象使用Controller指定的端口号和url创建到服务器的连接。在建立连接之后,它在内部创建一个线程,并调用ReadMessages方法,该方法一直从服务器读取,直到满足消息计数,然后被关闭。
根据运行时条件,可能需要重用Communicator对象来再次与服务器对话,因此将再次调用ReadMessages方法。
最初,当Dispose()方法完成时,我们一直在为NetworkStream、StreamReader和StreamWriter对象调用ReadMessages方法,但是在重新连接场景中,它会抛出“无法访问已处理的对象”错误。因此,我们注释掉了用于测试的Dispose方法调用。
到目前为止,它工作良好,但我担心,这不是实现这种功能的最佳方式,因为我从来没有处理对象。
我在想从对象池的角度来看,是否可以有一个可以被不同线程重用的Stream对象池?
解决这一问题的一种方法是每次Communicator与服务器连接时创建一个Stream的新实例,但我认为这将是一个昂贵的操作。
您能帮我找出一种更好的方法来处理这里的情况吗?这样我就可以重用Communicator对象而不影响性能了?
发布于 2010-12-21 07:04:47
这种方法将基于您需要多久读取消息的频率--如果偶尔出现n,我建议您重新考虑通信器对象的因素,使"ReadMessages“操作成为原子操作--即它将连接到服务器,创建网络流,读取消息,然后处理所有内容。
https://stackoverflow.com/questions/4496760
复制相似问题