Page 1 of 1

Rendimiento de ADS

Posted: Mon Oct 22, 2007 5:08 pm
by Rafael Clemente
Estoy probando ADS (versión de evaluación para 2 usuarios). Tengo una LAN de tres ordenadores, uno de los cuales contiene los datos del programa. Los demás leen de él.

Mi prueba consiste en aplicar un SET FILTER para "TALLER"$CLIENTE en una tabla de unos 7000 registros y presentar los resultados en un TxBrowse(). Resultados:

Sin activar ADS:
Un usuario. Tiempo de acceso: 3 seg (muy bueno)
Dos usuarios - 40 SEGS!!!

Activando ADS:
Un usuario: 14 segundos
Dos usuarios: 14 segundos

Utilizar ADS mejora la respuesta en el caso de dos usuarios pero todavía me parece bastante lenta, teniendo en cuenta que la tabla no es especialmente grande. ¿Alguien tiene experiencia con ADS y me puede decir si estos tiempos son mejorables y cómo?

Gracias,
Rafael

Posted: Mon Oct 22, 2007 8:14 pm
by Patricio Avalos Aguirre
Hola Rafael

Yo utilizo de esta manera los filtros

Code: Select all

cFiltro := 'taller$ "'+Cliente + '"'
//siendo cliente un variable
//o sea deberia quedar asi taller $ "pedro"

AdsSetAof( cFiltro )
para sacar filtro

Code: Select all

AdsClearAof()
Espero que te sirva

Posted: Mon Oct 22, 2007 8:30 pm
by Rafael Clemente
Patricio: Muchas gracias por su comentario. Yo utilizo una sintaxis similar
(por cierto, en mi ejemplo "TALLER"$CLIENTE prenetnde filtrar todos los clientes como "TALLERES LOPEZ", "GRANDES TALLERES XXX", etc; "Taller" el el String a buscar; CLIENTES es el campo; pero es un detalle sin importancia)

Mi preocupación es que el filtro con ADS resulta mucho más lento de lo que yo suponía. Yo esperaba una respuesta en menos de un segundo y se toma casi 15!. A tí también te responde tan lentamente? Puede ser porque yo estoy utilizando la versión de demo? O hay algún ajuste que he olvidado?

Rafael

Posted: Tue Oct 23, 2007 1:20 pm
by Carlos Mora
Rafael,

¿podrías postear el trozo de código que usas para hacer las pruebas? Es para ver si está correctamente parametrizado.

Un punto a destacar es que una vez que consumió los 15 segundos iniciales, el resto del tiempo es (debería ser) instantaneo, ya que ya ha creado el filtro como mapa en el servidor, lo que no ocurre con versiones no cliente servidor.

Un saludo,

Carlos

Posted: Tue Oct 23, 2007 3:11 pm
by Rafael Clemente
Carlos:
Me es un poco difícil postear todo el código porque está bastante imbricado en el programa, pero no tiene ningún misterio. En resumen es así:

Code: Select all

.... etc
oBrw := TcBrowse():New(...)   // El browse de clientes. Tiene seis columnas.
Redefine Get   cBuscar Of Self Valid ::Filtrar(cBuscar, oBrw)   // Un campo get para buscar el cliente.  Lo busca al pulsar intro
.... etc
//--------------------------------------------------------------------
Method Filtrar(cBuscar, oBrw)  // Presentar todos los clientes que CONTENGAN el string cBuscar y refrescar el Browse oBrw 
Select CLIENTES
cFiltro := "'"+Alltrim(Upper(cBuscar)) + "' $ Upper(NOMBRE)"
bFiltro := cToBlock(cFiltro)
DbSetFilter(bFiltro, cFiltro)
CLIENTES->(dbGoTop())
oBrw:GoTop()
oBrw:Refresh()
Return .T.
No utilizo Data Dictionary ni ninguna otra característica avanzada de ADS. Tan solo lo he instalado en el PC que tiene los datos y he copiado las tres DLLs a las carpetas de programa en todos los ordenadores.

Efectivamente, al pulsar Intro el primer registro filtrado aparece inmediatamente en la primera línea del Browse. El resto de líneas se mantienen como antes, o sea, sin filtrar. Al cabo de los 15 segundos, se refresca el Browse: Desaparecen de golpe las lineas no relevantes y aparecen de golpe los -por ejemplo- cuatro o cinco registros restantes que sí cumplen la condición de filtro.

Antes de comprar la versión comercial de ADS sólo quiero saber si este comportamiento es normal para la versión de prueba y la de pago es más rápida o si es que estoy haciendo algo mal.

Gracias por vuestro tiempo

Rafael

Posted: Thu Oct 25, 2007 10:03 pm
by R.F.
Rafael:

Esta mal tu filtro:

tienes que hacer esto:

cFiltro := "'TALLER' $ CLIENTE"
bFiltro := "{||"+cFiltro+"}"

Estoy asumiendo que estas buscando la palabra "TALLER" dentro del campo CLIENTE, nota como solo la palabra taller lleva comillas sencillas, y que toda la expresion de filtro es una sola cadena.

Ahora, puedes usar la funcion AdsSetAof() o bien un DBSETFILTER() de esta manera:

alias->(DBSETFILTER(&bFiltro,cFiltro)

Saludos desde Chile, la proxima semana en Buenos Aires.