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
Rendimiento de ADS
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Hola Rafael
Yo utilizo de esta manera los filtros
para sacar filtro
Espero que te sirva
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 )
Code: Select all
AdsClearAof()
Saludos
Patricio
__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Patricio
__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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
(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
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
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
¿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
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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í:
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
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.
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
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.
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.
Saludos
R.F.
R.F.