我有一个多线程应用程序,它通过 TCP 连接与服务器通信。该应用程序将部署为 Windows 服务。
它的实现方式是,Controller
它创建Communicator
对象、分配端口号、消息计数等属性,Communicator
并调用它的StartClient
方法来开始与服务器的对话。
在该StartClient
方法中,每个Communicator
对象使用由Controller
. 建立连接后,它在内部创建一个线程并调用该ReadMessages
方法不断从服务器读取,直到达到消息计数然后关闭。
根据运行时条件,可能需要重用Communicator
对象以再次与服务器通信,因此ReadMessages
将再次调用该方法。
最初,当方法完成时,我们一直在调用Dispose()
NetworkStream、StreamReader 和 StreamWriter 对象的ReadMessages
方法,但是在重新连接的情况下,它曾经抛出“无法访问已处理的对象”错误。因此,我们注释掉了Dispose
用于测试的方法调用。
到目前为止,它工作正常,但我担心,这不是实现此功能的最佳方式,因为我从未处理过对象。
我在考虑对象池,如果有可能有一个可以被不同线程重用的 Stream 对象池?
解决这个问题的一种方法是在每次Communicator
与服务器连接时创建一个 Stream 对象的新实例,但我认为这将是一项昂贵的操作。
您能否帮我确定一种更好的方法来处理这里的情况,以便我可以重用该Communicator
对象而不会影响性能?