¿El recolector de basura limpia las referencias del servicio web o debo llamar a desechar en la referencia de servicio después de que haya terminado de llamar a cualquier método que llame?¿Debo disponer de una referencia de servicio web en ASP.NET?
Respuesta
En lugar de preocuparse por deshacerse de sus servicios web, puede guardar solo una instancia de cada servicio web, usando singleton pattern. Los servicios web son apátridas, por lo que se pueden compartir de forma segura entre conexiones y subprocesos en un servidor web.
Aquí hay un ejemplo de una clase de servicio web que puede usar para contener referencias a las instancias de su servicio web. Este singleton es flojo y seguro para subprocesos. Se recomienda que si haces que tus singletons sean flojos, también se mantengan seguros para hilos siguiendo la misma lógica. Para obtener más información acerca de cómo hacer esto, lea el artículo C# In Depth en Implementing Singletons.
Además, tenga en cuenta que puede tener problemas con los servicios web de WCF. Recomiendo leer en WCF's instance management techniques article, específicamente en la sección singleton, para más detalles.
public static class WS
{
private static object sync = new object();
private static MyWebService _MyWebServiceInstance;
public static MyWebService MyWebServiceInstance
{
get
{
lock (sync)
{
if (_MyWebServiceInstance == null)
{
_MyWebServiceInstance= new MyWebService();
}
}
return _MyWebServiceInstance;
}
}
}
Y luego cuando se necesita acceder a su servicio web, usted puede hacer esto:
WS.MyWebServiceInstance.MyMethod(...)
o
var ws = WS.MyWebServiceInstance;
ws.MyMethod(...)
he utilizado con éxito este patrón en varios proyectos y se ha funcionado bien, pero como tvanfosson menciona en los comentarios a continuación, una estrategia aún mejor sería usar un marco DI para administrar sus instancias de servicios web.
Creo que DataService hereda Dispose from Component.
¿Qué estás tratando de lograr aquí?
Si le preocupa el rendimiento, me preocuparía más la capacidad de respuesta del servidor que aloja el servicio web y la velocidad de la red, ya que pueden afectar drásticamente el tiempo que tiene que esperar para completar la llamada al servicio web (a menos es asincrónico). Los ejemplos en MSDN no llaman 'Dispose' y es bastante obvio que el recolector de basura hará su trabajo, así que a menos que trabaje en un sistema en tiempo real que necesita procesar más de 100,000 registros en memoria cada segundo, entonces tal vez no necesidad de encontrar una forma de disponer de los recursos o administrar la memoria.
Mi pregunta era más de un * should * lo hace punto de vista como apposed a un do you have to do it punto de vista. Mi principal preocupación es la pérdida de memoria, que degradaría lentamente el rendimiento a lo largo del tiempo. – BeaverProj
Los objetos que implementen IDispose se deben eliminar manualmente para ayudar al recolector de basura.
Si su objeto es efímero, utilice un bloque using
. Para los objetos que se pueden conservar, asegúrese de que el objeto que los retiene se deshaga de ellos cuando también se eliminan.
- 1. Agregue referencia de servicio al servicio ASP.NET Web API
- 2. Referencia Web vs. Servicio Referencia
- 3. Cómo agregar una referencia de servicio web en una DLL
- 4. Servicio web sin agregar una referencia?
- 5. ¿Por qué ASP.NET intenta generar una clase temporal para una referencia de servicio web?
- 6. ¿Diferencia entre referencia web y referencia de servicio?
- 7. ¿Cómo generar una referencia de servicio web sin INotifyPropertyChanged?
- 8. ¿Debo disponer de un stringwriter? o reutilizar de alguna manera?
- 9. Visual Studio/SOAP - 'Agregar referencia de servicio' frente a 'Agregar referencia de servicio web'
- 10. Métodos de página ASP.NET vs servicio web
- 11. Consumir el servicio web SOAP en ASP.NET
- 12. ¿Cuál es la diferencia entre una referencia web y una referencia de servicio?
- 13. ¿Debo guardar una referencia a FileSystemWatcher?
- 14. Asp.Net 3.5 ¿Enrutamiento al servicio web?
- 15. Enviar una imagen de Android a un servicio web ASP.NET
- 16. Parámetros opcionales en el servicio web ASP.NET
- 17. Cualquier referencia al servicio web de tiempo de Internet gratuito
- 18. ¿Cómo disponer una lista de objetos desechables?
- 19. Cómo llamar a un servicio web mediante programación en asp.net
- 20. Servicio web ASP.NET dentro de la aplicación Autenticación de formularios
- 21. ASP.Net MVC con servicio web como modelo?
- 22. ¿Qué archivos necesito registrar después de agregar una referencia de servicio web?
- 23. arquitectura/estructura del servicio web ASP.NET
- 24. ¿Dónde entró el servicio web ASP.NET en .Net Framework 4.0?
- 25. ASP.NET MVC Autenticación de formularios contra el servicio web externo
- 26. aplicación de servicio Web Asp.Net falta en Visual Studio 2010
- 27. Usando ASP.NET MVC como servicio web
- 28. ¿Por qué tendría que llamar a disponer de controles ASP.NET?
- 29. ASP.NET JSON servicio web Respuesta formato
- 30. Autenticación del servicio web ASP.NET desde una aplicación para iPhone
Gracias! Definitivamente implementaré un uso ahora. – BeaverProj
@DanHerbert, tenemos control de revisión de su pregunta públicamente disponible ... por lo que no necesita saturar su publicación con un montón de cosas tachadas. Está distrayendo – mmcdole
¿Puede escribirnos un libro entero sobre esto? estás casi allí ... – Jobo