Espero no ser muy pesado, pero en la PC tengo el Xailer 1.4 (trabajo mucho con la notebook) y alli es donde se pone muy lento y el consumo de memoria supera los 40mb (el proceso tarda 5 minutos) , debe ser que han hecho muchas correcciones desde esa version a la 1.5.6. (mil disculpas).
En la notebook tengo el Xailer 1.5.6 es muchiiisimo mas rapido, el proceso tarda 1 o 2 min, el consumo de memoria sube y llega a 24mb. Hice las modificaciones que me pasaste pero y no varia mucho si uso el metodo QueryValue, peeeero si uso el QueryArray no consume casi nada de memoria es lo que buscaba. Porque hay tanta diferencia ?
Te pediria si no es mucho pedir que pruebes ADO con ODBC (yo uso Interbase) y espero la version que usas (espero este disponible pronto).
Saludos Atte.
Ing. Christian Assenza
"Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje news:[email=
46c0aa41@ozsrv2.ozlan.local...]
46c0aa41@ozsrv2.ozlan.local...[/email]
Christian,
Me refiero a ADO directo, sin utilizar controlador ODBC.
No dudo por un momento que a ti te consuma memoria, pero desgraciadamente aquí funciona perfectamente. Te recomiendo que utilices ADO DIRECTO, es decir, SIN ODBC. Te indique la versión de Access para ODBC por si ese fuese el problema.
Intenta modificar el método QueryArray() de TAdoDataSource con el siguiente código:
METHOD QueryArray( cCommand, aHeaders ) CLASS XAdoDataSource
LOCAL oRS, oError
LOCAL aBuffer, aFields
LOCAL nFor, nFields
IF ! ::CheckConnection()
RETURN {}
ENDIF
aBuffer := {}
TRY
oRS := TOleAuto():New( "ADODB.RecordSet" )
CATCH oError
::NewError( oError:Description, oError:SubCode,, "ADODB:RecordSet" )
END
TRY
oRS:Open( cCommand, ::oConnection, adOpenForwardOnly, adLockReadOnly, adCmdText )
CATCH oError
::NewADOError( "ADODB:RecordSet:Open( '" + cCommand+ "' )" )
oRS := NIL
RETURN aBuffer
END
WITH OBJECT oRS
IF :RecordCount > 0
aBuffer := :GetRows()
IF Pcount() > 1
nFields := :Fields:Count
aHeaders := Array( nFields )
FOR nFor := 1 TO nFields
aHeaders[ nFor ] := :Fields( nFor - 1 ):Name
NEXT
ENDIF
ENDIF
:Close()
END WITH
oRS := NIL
RETURN aBuffer
Como puedes ver lo único que hago es poner el recordset a NIL para forzar su liberación de memoria. A lo mejor te ayuda en tu caso. En cualquier caso la modificación ya está hecha para la próxima versión que publiquemos.
Un saludo
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
"Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje news:[email=
46c094c2@ozsrv2.ozlan.local...]
46c094c2@ozsrv2.ozlan.local...[/email]
>
> Ignacio si use ADO en el ejemplo (no te entiendo) , lo que cambie ahora
> porque no te entendia fue la cadena ahora esta en asi :
>
> Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=C:XailerSamplesDataControlsNeptuno.mdb;Persis t Security
> Info=False
>
> Y ahora funciona rapido pero el consumo de memoria sube, aqui te mando unas
> imagenes del administrado de tarea. Que me recomendas revisar para
> solucionar el problema ?, Yo uso Intebase y uso ADO con el proveedor
> 'Microsoft OLE DB Provider for ODBC Drivers' (o sea como te mande el
> ejemplo) y se pone lento y el consumo de memoria sube y no baja, entiendo
> que debe ser algo que tengo mal en la pc o el S.O.
>
> SUPPPPPPPPPER GRACIAS
>
>
>
>
> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
> news:[email=
46bed5ce@ozsrv2.ozlan.local...]
46bed5ce@ozsrv2.ozlan.local...[/email]
>> Chris,
>>
>> Su ejemplo funciona perfectamente aquí, a toda velocidad y sin consumir
>> apenas memoria, al arrancar utiliza 12.180 KB y cuando ha terminado el
>> proceso utiliza 13.664 KB, y no existe ningún pico de conusmo alguno
>> aunque
>> realmente todo el proceso no lleva más de 2 segundos. Estoy utilizando el
>> controlador ODBC 'Microsoft Access Driver 4.00.6304.00'.
>>
>> En cualquier caso, le SUPPPPPPPPPER recomiendo que utilice ADO con tablas
>> access.
>>
>> Un saludo,
>>
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> [Soporte Xailer]
>>
>> "Christian" <
christianassenza@yahoo.com.ar> escribió en el mensaje
>> news:[email=
46be13e2@ozsrv2.ozlan.local...]
46be13e2@ozsrv2.ozlan.local...[/email]
>>> Buenos dias, se me ha presentado un problema raro. Tengo que aparear dos
>>> tablas muy grandes y dentro del ciclo while busco unos datos en otra
>>> tabla
>>> con el metodo QueryValue, y el consumo de memoria sube de manera
>>> descomunal, aqui prepare un pequeño ejemplo, y al preparar el ejemplo
>>> surgio otra cosa a mitad de proceso se ralentiza muy mucho, que puede ser
>>> ?.
>>> Si al comenzar el programa abris el Administrador de Tareas el consumo de
>>> memoria de 'ConsumodeMemoria' es de 11mb y a mitad de proceso sube a
>>> 40mb.
>>> Este ejemplo tiene que recorrer 800 registros y el apareo que tengo que
>>> hacer es con 2 tablas de 4000 registros, asi que imaginese el consumo de
>>> memoria, una ves que termina el proceso muy lentamente se reduce la
>>> cantidad de memoria consumida y el servidor de base de datos (ibserver)
>>> va
>>> lentamente subiendo la cantidad de memoria consumida.
>>> Que puede ser ?¿ que estara asiendo el servidor y puede ser que el
>>> QueryValue no libere la memoria o algo similar.
>>>
>>> El ejemplo necesita un DSN llamado NEPTUNO que se conecte al Neptuno.mdb
>>> de los ejemplos.
>>>
>>> Saludos Atte.
>>> Ing. Christian Assenza
>>>
>>>
>>>
>>
>>
>
>
>
>
--