Me imagino que el GetBytes función() ya está bien optimizado para esto. No puedo pensar en ninguna sugerencia para mejorar la velocidad de tu código existente.
EDITAR - Ya sabes, no sé si esto es más rápido o no. Pero aquí hay otro método que utiliza el BinaryFormatter:
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, someString);
byte[] bytes = ms.ToArray();
ms.Close();
socket.Send(bytes);
La razón creo que esto podría ser más rápido es que se salta la etapa de codificación. Tampoco estoy completamente seguro de que esto funcione correctamente. Pero puedes intentarlo y ver. Por supuesto, si necesita la codificación ASCII, esto no ayudará.
Solo tuve otro pensamiento. Creo que este código devolvería el doble de bytes que el uso de GetBytes con codificación ASCII. La razón es que todas las cadenas en .NET usan unicode detrás de escena. Y, por supuesto, Unicode usa 2 bytes por carácter, mientras que ASCII usa solo 1. Por lo tanto, es probable que BinaryFormatter no sea lo adecuado en este caso porque duplicaría la cantidad de datos que está enviando por el socket.
Puede que quiera hacer un perfil de la aplicación antes de pasar demasiado tiempo aquí. Las reacciones intestinales son que esto no suena como un cuello de botella de rendimiento, pero no hay forma de saber sin números duros. – Rob
+1 por el sentimiento, pero esto está en el cuello de botella y cada nano cuenta aquí – Nosrama
¿El cuello de botella es la cantidad de datos que está enviando por el cable o la conversión? – kibibu