asp.net performance httphandler

asp.net - Algo más rápido que HttpHandlers?



performance (3)

No estoy seguro de cuál es su situación exacta, pero si toda su página está procesando algunos datos, realmente no necesita una página aspx o un manejador de http. Puede escribir un servicio web ASMX o un servicio WCF para hacer lo que necesita y es probable que esto suponga menos gastos generales. El servicio WCF ni siquiera tiene que estar alojado en ASP.NET. Puede alojarlo desde un servicio de Windows o una aplicación de consola, y llamarlo en proceso utilizando conductos con nombre. Esto probablemente reduciría la sobrecarga para llamar al código de procesamiento de datos de manera significativa.

¿Cuál es la forma más rápida de ejecutar un método en un sitio web ASP.NET?

El escenario es bastante simple: tengo un método que se debe ejecutar cuando se golpea una página web. Nada más está sucediendo en la página, el único resultado representado es un mensaje "hecho". Quiero que el procesamiento sea lo más rápido posible.

Cada golpe es único, por lo que el almacenamiento en caché no es una opción.

Mi plan es usar un HttpHandler y configurarlo en web.config (mypage.ashx) en lugar de una página regular .aspx. Esto debería reducir significativamente los gastos generales.

Entonces mi pregunta es realmente: ¿hay una forma más rápida de lograr esto que usar HttpHandlers?


Si realmente tiene que usar asp.net, también puede enganchar en el paso AuthorizeRequest e interceptar la solicitud desde allí, hacer su procesamiento y escribir su respuesta Done directamente.


Dependiendo de lo que esté haciendo, no esperaría ver una gran mejora con solo usar un HttpHandler. Comenzaría simplemente escribiendo HttpHandler y viendo cómo funciona. Si necesita que sea más rápido, intente ver más de cerca las cosas que realmente está haciendo mientras procesa la solicitud y ver qué se puede optimizar. Por ejemplo, si está haciendo un registro en una base de datos, intente escribir en una base de datos local en lugar de hacerlo en una red. Si todavía no es lo suficientemente rápido, entonces tal vez busque escribir algo de nivel inferior. Hasta ese momento, me quedaría con lo que sea más fácil para ti.

Como referencia, he escrito un servidor de anuncios en ASP.NET (usando HttpHandlers) que puede servir un anuncio (incluida la orientación y el registro de la impresión en una base de datos local) en 0-15ms bajo carga. Pensé que estaba procesando bastante, pero ese es un tiempo de respuesta bastante bueno en mi humilde opinión.

Actualización después de varios meses :

Si borra todos los HttpModules que están incluidos por defecto, esto eliminará una buena cantidad de gastos generales. De forma predeterminada, los siguientes HttpModules están incluidos en cada sitio a través del archivo web.config a nivel de máquina:

  • SalidaCache
  • Sesión (para el estado de la sesión)
  • WindowsAuthentication
  • FormsAuthentication
  • PassportAuthentication
  • RoleManager
  • UrlAuthorization
  • FileAuthorization
  • AnonymousIdentification
  • Perfil
  • ErrorHandler
  • Modelo de servicio

Como dije antes, mi servidor de anuncios no usa ninguno de estos, así que acabo de hacer esto en el web.config de esa aplicación:

<httpModules> <clear /> </httpModules>

Si necesita alguno de estos, pero no todos, puede eliminar los que no necesita:

<httpModules> <remove name="PassportAuthentication" /> <remove name="Session" /> </httpModules>

ASP.NET MVC Nota: ASP.NET MVC requiere el módulo de estado de sesión a menos que haga algo específico para solucionarlo. Consulte esta pregunta para obtener más información: ¿Cómo puedo desactivar el estado de la sesión en ASP.NET MVC?

Actualización para IIS7: Desafortunadamente, las cosas no son tan simples en IIS7. Aquí se explica cómo borrar los módulos HTTP en IIS7