Ваши розетки не проблема. Они используют очень мало памяти. Скорее, проблема заключается в том, как вы относитесь к входящим и исходящим данным
Вы выделяете новые (байтовые) буферы для каждой операции?
Вместо этого создайте пул буферов. Позвольте пулу создать новый буфер, если он пуст. Не забудьте вернуть буфер, когда закончите.
Что вы делаете, когда получаете данные в буфер?
Вы строите строку? Если у вас много входящих данных или больших строк, вы можете переключиться на StringBuilder. string.Format ("{0} kdkd {1} jdjd {2}", var1, var2, var3) выделяет меньше памяти, чем var1 + "kdkd" + var2 + "jdjd" + var3 .
Как вы оборачиваете сокет?
У вас есть толстый класс с большим количеством вещей в нем? Тогда проблема в вашем жирном классе.