Rendimiento de ADS

Rendimiento de ADS

Postby Rafael Clemente » Mon Oct 22, 2007 5:08 pm

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
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Patricio Avalos Aguirre » Mon Oct 22, 2007 8:14 pm

Hola Rafael

Yo utilizo de esta manera los filtros

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

AdsSetAof( cFiltro )


para sacar filtro

Code: Select all  Expand view
AdsClearAof()


Espero que te sirva
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
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Postby Rafael Clemente » Mon Oct 22, 2007 8:30 pm

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
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Carlos Mora » Tue Oct 23, 2007 1:20 pm

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
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Postby Rafael Clemente » Tue Oct 23, 2007 3:11 pm

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  Expand view
.... 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
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby R.F. » Thu Oct 25, 2007 10:03 pm

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.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 63 guests