![]() |
Consulta sobre Web services y Delphi
Saludos a todos los que hacen parte de este foro.
Tengo una aplicación que contiene un modulo cliente y uno servidor. El modulo de servidor lee cada 5 segundos información de varios web services y la almacena en unos Tclientdataset, para que el modulo cliente pueda utilizar estos datos. Mi duda es: Es normal que aún cuando estoy liberando (con Free()) todos los objetos que se crean (con Create()) para el llamado a los webservices la memoria virtual del proceso crezca aproximada mente un mega cada 2 horas? Uno de los procesos que mas hace crecer la memoria virtual es el siguiente:
|
Es muy difícil responder. Sin embargo, he visto que al final asignas un nil a una variable. Recuerda que con eso no liberas memoria.
Me han recomendado muchas veces la herramienta Valgrind, aunque nunca la he usado por vagancia. Quizá te sirva para encontrar dónde reserva memoria que luego no libera. |
Aumenta la Memoria Virtual al utilizar el WebService
Al igual que el colega @Gercondi, tengo un Ws que corre entre los servicios de Windows y al realizar las tareas de consumir parametros y devolver resultados el Proceso crece y sigue creciendo a menos que cada tanto reinicie mi Servicio con un net restart WSDemonConuslta; esto pasa inclusive cuando libero los objetos que cree en el proceso con variable:=nil; variable.Free, pero sin importancia.
Algún aporte? |
Como dije hace cuatro años, es difícil responder. Y también, asignar "nil" no libera memoria. El siguiente código no libera memoria:
Es más, te dará un error puesto que estás intentando llamar a un método de un objeto que no existe (el objeto nil no existe). El código debería ser este:
O lo que es lo mismo:
|
Si invocas a free sobre un objeto que es nil no se eleva una excepción
|
Cita:
|
Totalmente seguro
El metodo free esta implementado asi (o muy similar, sacando los IFDEF segun la plataforma)
Esto es totalmente seguro, jamas te va a dar error:
Ahora, el problema es que el destructor no deja la instancia "limpia" (no asigna nil cuando termina, no deja la memoria en 0000) Esto si te eleva una excepcion AcessViolation:
|
Ok. Ahora sí me quedó claro. Será entonces eso, que no "limpio" la variable de referencia. Gracias. :)
|
La franja horaria es GMT +2. Ahora son las 21:52:31. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi