1

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

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

在该StartClient方法中,每个Communicator对象使用由Controller. 建立连接后,它在内部创建一个线程并调用该ReadMessages方法不断从服务器读取,直到达到消息计数然后关闭。

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

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

到目前为止,它工作正常,但我担心,这不是实现此功能的最佳方式,因为我从未处理过对象。

我在考虑对象池,如果有可能有一个可以被不同线程重用的 Stream 对象池?

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

您能否帮我确定一种更好的方法来处理这里的情况,以便我可以重用该Communicator对象而不会影响性能?

4

1 回答 1

0

该方法将基于您需要阅读消息的频率 - 如果它偶尔是 n,我建议您重构您的通信器对象以使“ReadMessages”操作原子 - 即它将连接到服务器,创建网络流,阅读消息,然后处理所有内容。

于 2010-12-21T07:04:47.027 回答