Pregunta

Quiero crear un simple servidor proxy http que hace algunos muy básicos de procesamiento en los encabezados http (es decir,si encabezado x == y, hacer z).El servidor puede necesitar el apoyo de cientos de usuarios.Puedo escribir el servidor en C# (bastante fácil) o c++ (mucho más difícil).Sin embargo, sería una versión de C# tienen un buen desempeño como C++ versión?Si no, sería la diferencia en el rendimiento de ser lo suficientemente grande que no tendría sentido escribir en C#?

¿Fue útil?

Solución

Puede utilizar inseguro Código de C# y los punteros en el cuello de botella crítico de puntos para hacer que se ejecute más rápido.Aquellos que se comportan tanto como el código de C++ y creo que ejecuta tan rápido.

Pero la mayoría del tiempo, C# es JIT-ted a súper-rápido ya, no creo que habrá muchas diferencias con lo que todo el mundo ha dicho.

Pero una cosa que usted puede ser que desee considerar es: Código administrado (C#) operaciones de cadena son bastante lento en comparación con el uso de punteros de manera efectiva en C++. Hay más de optimización de trucos con C++ punteros que con CLR cadenas.

Creo que he hecho algunos puntos de referencia antes, pero no recuerdo donde la he puesto.

Otros consejos

¿Por qué esperar mucho más altos de rendimiento de la aplicación de C++?

No es inherente a la desaceleración del agregado una aplicación en C#, cuando lo estás haciendo bien.(no demasiados caído referencias frecuentes a la creación de objetos/caer por llamada, etc).

La única vez que una aplicación de C++ realmente supera a un equivalente aplicación en C#, es cuando se puede hacer (muy) operaciones de bajo nivel.E. g.casting raw de memoria punteros, ensamblador en línea, etc.

El compilador de C++ puede ser mejor para la creación de un código rápido, pero sobre todo esto se pierde en la mayoría de las aplicaciones.Si usted tiene realmente una parte de la aplicación que debe ser cegadoramente rápido, trata de escribir una C llame para que el punto caliente.

Sólo si la mayoría de que el sistema se comporta demasiado lentamente, usted debe considerar lo escrito en C/C++.Pero hay muchos escollos que pueden matar a tu rendimiento en el código de C++.

(TLDR:C++ experto puede crear "más rápido" código C# de expertos, pero un mediocre C++ programador puede crear más lento código de mediocre C# uno)

Yo esperaría que la versión de C# a ser casi tan rápido como el C++ uno, pero con menor consumo de memoria.En algunos casos, el código administrado en realidad es MUCHO más rápido y usa menos memoria en comparación con los no optimizado C++.El código de C++ puede ser más rápido si escrito por expertos, pero rara vez se justifica el esfuerzo.

Como una nota del lado puedo recordar un rendimiento de "competencia" en la blogosfera entre Michael Kaplan (c#) y Raymond Chan (C++) para escribir un programa, que hace exactamente la misma cosa.Raymond Chan, quien es considerado uno de los mejores programadores del mundo (Joel) logró escribir más rápido C++ después de una larga lucha de la reescritura de la mayor parte del código.

El servidor proxy puede describir trataría principalmente con datos de cadena y creo que es razonable para implementar en C#.En tu ejemplo,

if header x == y, do z

la parte más lenta en realidad podría estar haciendo lo que sea 'z' y tendrás que hacer que el trabajo, independientemente de la lengua.

En mi experiencia, el diseño y la implementación tiene mucho más que ver con el desempeño de hacer la elección del lenguaje/framework (sin embargo, las habituales advertencias se aplican:por ejemplo, no puedes escribir un controlador de dispositivo en C# o java).

Yo no pensaría dos veces antes de escribir el tipo de programa que usted describe en un lenguaje administrado (sea Java, C#, etc).En estos días, las mejoras de rendimiento que obtienen utilizando un menor nivel de idioma (en términos de la proximidad de hardware) es a menudo fácilmente compensado por el tiempo de ejecución de las habilidades de un entorno administrado.Por supuesto, esto viene de una C#/python developer así que no estoy exactamente imparcial...

Si usted necesita una manera rápida y fiable servidor proxy, puede tener sentido para probar algunas de las que ya existen.Pero si ha personalizado las características que se requieren, entonces usted puede construir su propio.Puede que desee para recoger más información sobre la carga esperada:cientos de usuarios puede ser un par de solicitudes de un minuto o un centenar de solicitudes por segundo.

Suponiendo que usted necesita para servir bajo o alrededor de 200 consultas en una sola máquina, C# con facilidad, deben satisfacer sus necesidades, incluso las lenguas conocidas por ser lento (por ejemplo,Ruby) puede fácilmente con la bomba de un par de cientos de solicitudes por segundo.

Aparte de la actuación, hay otras razones para elegir a C#, por ejemplo,es mucho más fácil escribir los desbordamientos de búfer en C++ de C#.

Es el servidor http se va a ejecutar en una máquina dedicada?Si sí, yo diría que ir con C# si es más fácil para usted.Si usted necesita para ejecutar otras aplicaciones en la misma máquina, usted tendrá que tomar en cuenta la huella de la memoria de su aplicación y el hecho de que la GC se ejecutará en "random" de veces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top