У меня есть многопоточное приложение, которое взаимодействует с сервером через TCP-соединение. Приложение будет развернуто как служба Windows.
Это было реализовано следующим образом: есть Controller
, который создает Communicator
объекты, назначает номер порта, количество сообщений и т. д. свойства Communicator
и вызывает его метод StartClient
для начала диалога с сервером.
В методе StartClient
каждый объект Communicator
создает соединение с сервером, используя номер порта и URL-адрес, указанные в Controller
. После установления соединения он внутри создает поток и вызывает метод ReadMessages
, который продолжает чтение с сервера до тех пор, пока не будет достигнуто количество сообщений, а затем закрывается.
В зависимости от условий выполнения может потребоваться повторное использование объекта Communicator
для повторного обращения к серверу, и, следовательно, метод ReadMessages
будет вызываться снова.
Первоначально мы вызывали метод Dispose()
для объектов NetworkStream, StreamReader и StreamWriter, когда метод ReadMessages
завершался, но в сценарии повторного подключения он выдавал ошибку "Не удается получить доступ к удаленному объекту". Итак, мы закомментировали вызов метода Dispose
для тестирования.
На данный момент он работает нормально, но я обеспокоен тем, что это не лучший способ добиться этой функциональности, поскольку я никогда не избавляюсь от объектов.
Я думал о пуле объектов: возможно ли иметь пул объектов Stream, которые можно было бы повторно использовать в разных потоках?
Одним из способов решения этой проблемы может быть создание нового экземпляра объектов Stream каждый раз, когда Communicator
подключается к серверу, но я думаю, что это будет дорогостоящая операция.
Не могли бы вы помочь мне определить лучший подход к решению этой ситуации, чтобы я мог повторно использовать объект Communicator
без снижения производительности?