2011-09-28 13 views
7

Hay un servicio alojado WCF auto que debe trabajar el 99% del tiempo. A veces tenemos algunos problemas de memoria como éste:problemas de memoria Heap

memory leaks

Pero el servicio está funcionando como de costumbre después de que las cuestiones. ¿Cómo podemos manejar esto? Todos los consejos y puntos para hacer servicios sólidos que sobrevivirán en diferentes situaciones excepto son muy bienvenidos.

+0

¿Tiene código administrado puro, o tiene el código no administrado o de interoperabilidad? –

+0

Todo el código está administrado. Y usamos [dotConnect for Oracle from devArt] (http://www.devart.com/dotconnect/oracle/) como biblioteca de capa de datos. – kseen

+0

¿Por qué bloqueó el volcado ASCII? ¿Sabes que se puede reconstruir completamente usando los códigos a la izquierda? – Dani

Respuesta

3

no estoy muy seguro de dónde está el problema reside, pero fugas de memoria puede ser una razón.

Todo el código se maneja. Y usamos dotConnect para Oracle desde devArt como la biblioteca de capa de datos .

Supongamos que se administra todo el código, pero no puede haber partes no administradas. Sin embargo, debe llamar al método Dispose para todos los objetos desechables después de usarlos, no creo que estén correctamente desechados una vez que salgan del alcance. La mejor práctica es no permitir que los objetos desechables salgan del alcance sin llamar a su método Dispose. Puede usar declaraciones 'using' si las está usando como variables locales.

DbConnection es un buen ejemplo para objetos desechables, asegúrese de que dispone de la totalidad de las conexiones (objetos desechables).

+2

1, un buen consejo, Oracle DAL de sí requieren la Desechar ya que utilizan código no administrado. Es una lástima, ya que las conexiones de Oracle de disposición y comandos suele ser la más operación que consume tiempo en una aplicación (IMHE) –

0

Si se trata de un problema WCF (no estoy seguro de qué hacer con su volcado), le sugiero que active el seguimiento del lado del servidor WCF, y eche un vistazo a las excepciones si hay alguna (y edite su pregunta podemos ayudarte más)

Aquí hay un enlace que explica cómo hacer esto:

How to enable WCF tracing

0

¿Cuáles son sus comportamientos Servicio particularmente ConcurrencyMode y InstanceContextMode.

Si tiene varios como ConcurrencyMode y InstanceContext establecen en (PerCall o PerSession (por defecto)) se puede definitivamente que tenga problemas si tiene grandes estructuras de datos o recursos no vendida.

si está utilizando concurrencia múltiple tratar InstanceContextMode Individual [ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]

0

¿Está 100% Ninguno de ustedes tiene dependencias código no administrado? He visto algo muy similar a esto, y estaba sucediendo porque estábamos desasignando la memoria que otro proceso también intentaría desasignar más tarde.