Pregunta

Actualmente estoy construyendo una API que será utilizado por un servicio web.

Me preguntaba qué problemas rendimiento pude conocer si he construido mi API utilizando una gran cantidad de métodos estáticos .

La idea original era construir objetos de expertos que actúan como servicios.

En un entorno de usuario único este enfoque fue genial! Pero pronto voy a necesitar puerto a un entorno multiusuario / concurrente.

¿Qué tipo de problemas de rendimiento puede ser que me encuentro con este tipo de arquitectura?

Saludos,

Editar

Los métodos estáticos no retienen variables estáticas y no tienen efectos secundarios. Ellos simplemente ejecutar una rutina normal en el que todo se crea una instancia. (Es decir. Vars y objetos)

¿Fue útil?

Solución

No hay efecto particular sobre la concurrencia. Las mismas reglas son ciertas: la mutación de datos compartidos al mismo tiempo es malo. Si usted tiene los métodos de instancia pero no mutar nada, estás bien.

Hay una diferencia en el diseño general, sin embargo - los métodos estáticos casi siempre deben ser flujos seguros (es decir, que debe make los flujos seguros), mientras que los métodos de instancia por lo general no tienen que ser (aunque debe documentar hilo de seguridad de su clase).

Otros consejos

No estaría preocupado demasiado con los problemas de rendimiento (Knuth), estaría más preocupado por cuestiones de capacidad de prueba y el estado de la gestión en un entorno multiproceso, principalmente para reducir la complejidad de la codificación y el mantenimiento, que puede arrastrar a una proyectar peor que el problema de rendimiento de vez en cuando.

Puede estática no simuladas, por lo que el código que utiliza una API que se basa en los métodos estáticos en mi humilde opinión es relativamente no comprobable. No es realmente lo que estás pidiendo, pero por favor, pensar en las personas que van a utilizar su API.

Debe reducir los puntos donde se celebra datos compartidos entre los hilos a un mínimo absoluto. Esto reduce las posibilidades de problemas de threads. Es probable que perder un poco de eficiencia en hacer esto, pero se gana mucho en la facilidad de codificación y mantenimiento. Imagínese lo difícil que sería para escribir y probar una aplicación ASP.NET si todas las páginas eran estáticas. Sería una pesadilla. Usted podría encontrarse ir por ese camino como sus ganancias API características con el tiempo.

Además, utilizar un marco DI decente (I liek Unidad, puede ser la mejor cosa para salir de P & P).

Usted no tiene que estar preocupado por las variables locales en un método estático. Cada hilo tiene su propia pila y cada llamada al método creará una copia separada de la variable local en la pila. Por ejemplo, los métodos SqlHelper MS proporcionar en sus bloques de aplicación utilizan esta muy técnica.

La cuestión importante es variables estáticas. Yo casi nunca utilice variables estáticas, no he tenido la necesidad de hacerlo.

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