No solo viable, sino realmente bueno, en mi experiencia. He desarrollado varios servidores MMO con C #, y debo decir que nunca me arrepentí de la elección del idioma y la plataforma.
Hay muchas bibliotecas y herramientas excelentes para C # y .NET en general: redes, registros, mapeo O / R, etc. Y, en comparación con Java, C # es más expresivo y menos detallado (algunas personas podrían discutir sobre esto, sin embargo ... )
La "sobrecarga" de GC que asusta a algunas personas no es realmente un problema, a menos que usted lo maltrate con miles de millones de asignaciones por segundo. Como ejemplo, nuestro servidor actual asigna hasta 50 mb / segundo bajo una carga pesada, y GC no introduce ningún retraso notable. Sin embargo, tuvimos que usar la agrupación de objetos en lugares estratégicos; lo más importante, los objetos que representan los paquetes de red se agrupan y no se recolectan basura. Aún así, incluso con la agrupación desactivada, GC no es el mayor problema.
Como ejemplo de lo genial que es C #, esto es lo que implementamos recientemente. Nuestro servidor ejecuta varios servicios WCF, que el cliente del juego usa para tareas que no son críticas para el tiempo, y también los usamos para la administración del servidor. Resulta que es muy fácil hacer un servicio WCF para simplemente devolver nuestros objetos del juego a la persona que llama. Así que hicimos eso, luego creamos un pequeño complemento para LINQPad que se conecta a nuestro servidor, y ahora podemos ejecutar consultas como
from character in Service.GetOnlineCharacters()
where character.LocationManager.LocationId==5 && character.Attributes.Level<10
select new { character.Id, character.Nick }
¡En un servidor en vivo, nada menos! No creo que puedas hacer esto con ninguna otra plataforma. No en el trabajo de un par de días, al menos.