2011-06-21 7 views
5

Acabo de notar que mi servicio de Excel se ejecuta mucho más rápido. No estoy seguro si está pasando una condición ambiental. Hice un cambio en el método. Donde antes eraC# - ¿Puede WebMethodAttribute afectar negativamente el rendimiento?

class WebServices{ 
[ WebMethod(/*...*/) ] 
public string Method(){} 
} 

Ahora se quita su atributo y el método se trasladó a otra clase

class NotWebService { 
public string Method(){} 
} 

Pero, he hecho porque el método es no llamada o se utiliza como un servicio. En cambio, se llamó a través de

WebServices service = new WebServices(); 
service.Method(); 

y dentro del mismo conjunto. Ahora cuando llamo al método

NotWebService notService = new NotWebService(); 
notService.Method(); 

Parece que el tiempo de respuesta ha aumentado. ¿El WebMethodAttribute tiene el potencial de ralentizar las llamadas locales?

Respuesta

2

De hecho, el atributo WebMethod agrega mucha funcionalidad para exponer el método a través de un servicio web XML.

Parte de la funcionalidad que hace que sobrecarga son las siguientes características consideradas como parte de la materia configurable para un método web:

  • BufferResponse
  • CacheDuration
  • Sesión Manejo
  • el tratamiento de transacciones

F o más información que acaba de comprobar los WebMethod attribute documentation

Saludos,

0

Sé que esto es una vieja pregunta, pero para evitar la desinformación que siento la necesidad de responder a ella de todos modos.

No estoy de acuerdo con la evaluación de wacdany.

Un método marcado como un método web no debería tener una sobrecarga adicional si se llama directamente como un método, en lugar de a través de HTTP. Después de todo, compila exactamente el mismo lenguaje intermedio, aparte de la presencia de un atributo personalizado.

Ahora, agregar un atributo personalizado puede afectar el rendimiento si es uno de los que es especial para el compilador o el tiempo de ejecución. WebMethodAttibute no es ninguno de los dos.

A continuación consideraría si hay algún gasto adicional especial para construir el objeto de servicio web. Si ha agregado un constructor puede haber algunos, pero de manera predeterminada no hay una sobrecarga real, ya que los constutores de las clases base son triviales.

Por lo tanto, si realmente estuviera llamando al método directamente, no debería haber una sobrecarga real, a pesar de que también se puede acceder como una acción del servicio web. Si experimentó una diferencia significativa, sería conveniente verificar si estaba construyendo la clase real WebServices, y no de alguna manera inadvertidamente utilizando un proxy de servicio web, quizás debido a la adición de una referencia de servicio web a su proyecto.

Cuestiones relacionadas