Programa muy lento en red

Programa muy lento en red

Postby Rafael Clemente » Thu Jul 26, 2007 2:15 pm

Estoy utilizando FWH 2.6 para hacer una aplicación cuya pantalla principal básicamente contiene un TxBrowse() de una tabla de Clientes con unos 4000 registros. Para ver solamente un subset de los clientes, aplico un simple filtro por ejemplo: SET FILTER TO Poblacion="B" (Ya sé que podría utilizar Scopes, pero por otras razones, he de emplear SET FILTER)

Mi sistema incluye dos PCs conectados en red local de 100 Mb. Los datos de clientes se encuentran en uno de los dos PCs, pero pueden ser accedidos desde cualquiera de los ordenadores. Como veis, un montaje de lo más simple.

Y ahora viene mi pregunta: Cuando aplico un filtro desde el PC que contiene los datos, la respuesta es casi instantánea; pero cuando lo hago desde el otro PC, el filtro es lentísimo (hasta 5 segundos o más). Recuendo hace años, cuando una aplicación similar escrita en DOS/Clipper respondía con toda rapidez desde cualquier PC.

¿Qué puedo estar olvidando? ¿Alguna variable de entorno? ¿Algún Set en mi programa? ¿Tendré que compilar con algún switch en especial?

Alguien puede darme alguna idea al respecto? Gracias

Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Adolfo » Thu Jul 26, 2007 2:49 pm

Rafeal.
Revisa todo lo concerniente a velocidad de tu red, firewall, antivirus

Existen algunos antivirus que revisan TODO lo que sale o entra por la red, deshabilita los archivos DBF, CDX, o NTX y los FPT en el scaneo que hace el antivirus.

Pon a tu servidor como Pc de confianza en el Firewall de tu Pc cliente, no habilites DHCP, usa IP's fijas, que ambos esten en el mismo Grupo de trabajo, usa Switch en vz de Hubs, revisa los cables de red y si es posible midelos.

bueno esas recomendaciones te puedo dar, lo ideal es tener un servidor de archivos para compartir tus dbf's, yo uso varios Linux con Samba y tengo hasta 37 Pc's accesando dbf's y cdx's en una lan y la velocidad es buenisima.

Eso nada mas, espero te sirva
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Adolfo
 
Posts: 860
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Postby Rafael Clemente » Thu Jul 26, 2007 3:08 pm

Adolfo:
Muchas gracias por tu respuesta. A ese respecto:
a) Efectivamente, uso IP fijas, no DHCP
b) Utilizo un Switch
c) Ambos PCs están en el mismo grupo de trabajo
d) Los cables de red parecen en buen estado y como los dos PCs están uno junto a otro, no tienen más de medio metro cada uno.

Lo que me queda por revisar es lo del antivirus (Norton) y el firewall (el del Windows Xp SP2), que están instalados con los ajustes por defecto. Lo pruebo y te digo algo en este mismo foro.

Saludos,
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby R.F. » Thu Jul 26, 2007 3:30 pm

Rafael:

Recuerda que xHarbour copia los datos del ordenador donde los estas usando al ordenador remoto de la red, si a esto le metes un SET FILTER entoces eso es mas lento que el caballo del malo.

Recomendacion: si es forzoso que utilices SET FILTER, y solo tienes 2 usuarios conectados a los datos, utiliza el servidor LOCAL de ADS, hace un filtrado extremadamente rapido (con dbsetfilter) y es gratuito.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Rafael Clemente » Thu Jul 26, 2007 3:32 pm

Adolfo:
He desactivado el antivirus y no he notadoninguna mejora en la velocidad de acceso.
He desactivado el Firewall de Windows y ahí sí que he creido aprecia una ligeríiiiisima mejora pero nada sustancial.
Me prefunto si el problema no estará en´la asignación de buffers o alguna variable interna o quizás en los switches de compilación.

Yo uso:
.prg.c:
c:\harbour\bin\harbour $< /O$@ /n/i..include;c:\harbour\include;c:\fwh\include;c:\fwh\include /p /gc

.c.obj:
c:\bcc55\bin\bcc32 -M -c -Ic:\harbour\include $<
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Rafael Clemente » Thu Jul 26, 2007 4:12 pm

René:

Ajá! Eso de usar un servidor local ya me suena mejor. Por favor:

a) Dónde me puedo bajar el servidor local de ADS (aunque sea de pago, si funciona, no me importaría comprar una licencia)?
b) Me podrías dar una idea de cómo usarlo? (He de modificar mi programa o simplemente instalar el servidor local. Y si he de modificar mi programa, en qué sentido?)

Muchas gracias
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby JoseLuis » Thu Jul 26, 2007 4:19 pm

Hola Rafael

Por ir delimitando.

Yo tengo los datos en un servidor, en una carpeta compartida que pertenece a un grupo de trabajo.

A mi se me vuelve extremadamente lento cuando tengo que buscar una cadena dentro de un campo por lo que, como tu dices, no hay mas remedio que utilizar set filter. Pero sólo en el caso de que desde cualquier pc se haya conectado a la misma dbf. Si hay un solo usuario conectado, el filtro va cien.

Esto no me pasaba en FW, luego tiene que ser por xHarbour.

He revisado todo lo anteriormente dicho y nada, sigue igual.

Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Rafael Clemente » Thu Jul 26, 2007 5:08 pm

José Luis:
Efectivamente, cuando intento acceder a la misma tabla desde los dos PCs a la vez (por ejemplo, aplicando un filtro distinto desde cada uno)la cosa va lentísima.

También va muy lento aunque no haya filtro aplicado.

Y si sólo accedo desde un PC, el resultado es el que ya dije al principio: Desde el PC "servidor" va perfecto pero desde el otro, va bastante "pastoso". Si eso ocurre co una red cableada a 100 Mb, prefiero no pensar qué pasará si el enlace es inalámbrico...

Hasta ahora, la sugerencia de René parece la más sólida. Me estoy mirando http://www.google.com/ads.htm, donde viene la cosa explicada en bastante detalle

No sé si encontraremos una solución pero por lo menos tranquiliza ver que no es sólo un problema mío...

Saludos
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Antonio Linares » Thu Jul 26, 2007 7:51 pm

Rafael,

SET FILTER es muy lento. Usa un índice temporal creado con una condición, ó usa scopes
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42078
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Rafael Clemente » Thu Jul 26, 2007 9:54 pm

Antonio:

Efectivamente, SET FILTER es muy lento pero a veces no queda otro remedio. Creo que el problema no es el SET FILTER sino la "pastosidad" general en el acceso a tablas por red. Con el Set FILTER es muy evidente, pero también se nota esa lentitud al cargar el browse inicialmente o moverse de registro en registro.

Quizás la explicación de René es la que parece más lógica, pero antes de empezar a experimentar con ADS (o algo similar, si existe) quería saber si el problema se debía a algún fallo mío más básico: Algo que tuviera que ver con número de buffers, etc...

Si se te ocurre alguna otra idea para probar, me gustaría intentarlo, porque parece que este es un problema que afecta a más de uno en el foro.

Saludos,
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby JoseLuis » Thu Jul 26, 2007 9:54 pm

Hola Antonio

No encuentro otra forma de hacer lo siguiente mas que con set filter
Code: Select all  Expand view
(aAlias[21])->( dbSetfILTER( {|| (ALLTRIM(Upper(@codibus)) $ Upper((aAlias[21])->Nombre))},'(ALLTRIM(Upper(@codibus)) $ Upper((aAlias[21])->Nombre))') )


Donde codibus es la cadena que debo buscar dentro del campo Nombre.

Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Biel EA6DD » Fri Jul 27, 2007 6:23 am

Mi experiencia con Harbour en Red, sin usar ADS ni otra tecnologia C/S, es que funciona bastante bien(manejando tablas de mas de 500.000 registros,lineas de albaranes a fecha de hoy 1.759.700). Una solucion como ADS, tiene que ser mejor, pero entiendo que no necesaria para la mayoria de Pimes.
Yo tengo desterrados los Set Filter, casi siempre se puede encontrar una alternativa mas rapida.

En el ejemplo que pone Jose Luis, incluso una lectura completa del fichero DBF con memoread, puede que sea mas rapido que set Filter(En este foro, en el de ingles se ha comentado el tema hace tiempo, lo siento pero no tengo el link). Y para optimizarlo tener un indice sobre el campo que quieres realizar la comparacion, y hacer la bussqueda sobre dicho fichero, siempre mas pequeño que el DBF. Para hacerlo hace falta disponer de la estructura del tipo de indice usado, NTX o CDX. Por la red circula una funcion para NTX, WildSrch.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Loren » Fri Jul 27, 2007 7:21 am

Rafael,

Por tus explicaciones, deduzco que el PC Cliente accede al PC Servidor mediante una "Unidad de Red" en el Acceso Directo en Windows. Si es así yo te recomiendo que conectes los usuarios directamente al servidor, por codigo fuente, osea que enrutes tus bases de datos directamente desde el programa. De esta manera tendras tantos EXEs como PC en tu RED, evitando saturar de memoria al Servidor y por consiguiente ganando velocidad.

Un saludo.
LORENZO Fdez.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Postby Rafael Clemente » Fri Jul 27, 2007 7:39 am

Biel:
El Set Filter es donde más se nota la lentitud (lógicamente!) pero no es el único sitio. EN general, todo el acceso es "pastoso", en especial al arrancar el programa, cuando parece que el TxBrowse se baja los 4000 registros antes de presentarlos. En todo caso, voy a buscar una alternativa al Filter a través de Scopes, que esos sí, funcionan razonablemente bien.

Loren:
Yo siempre instalo una copia del Exe en cada Pc y abro las bases de datos mediante un Use ("\\Servidor\Datos\MyDbf"). No suelo utilizar asignación de nuevas unidades de red como Z:, Y: etc. No sé si es a esto a lo que te referias...

Gracias a los dos
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby pymsoft » Fri Jul 27, 2007 7:43 am

Tengo el mismo problema que Rafael Clemente, (lo dije en un post hace algunos dias).
En varios clientes, o sea, varias redes con linux como servidor. Todas a 100 megabit, sin usar ningun set filter, y el problema es como los describe Rafael, si accedo desde un pc, no hay problema, pero si accedo desde 2 o mas pc's, se enlentece todo... Al moverse de registro en registro queda "pastoso", esa es la palabra. Supongo que tiene que ver con algo del DBFCDX, porque con clipper FW y la misma red, no sucede.
O sea, el mismo programa, con las mismas bases de datos con los mismos indices solo que compilado a 16 bits funciona mas rapido.
He cambiado de twbrowse, dejé de usar (despues de 6 años) el twbrowse de Hernán por el de FW porque es un 20% más rapido, lastima que le falten los footers al de FW y que la clase de pintado sea en prg en ves de C.
O sea, no es un problema de la twbrowse, pero es un problema cuando se visualizan los datos, porque verás que si te toca recorrer la base de datos, con indices y set filters y todo lo que sea, lo hace muy rapidamente.


Saludos.
Pedro Gonzalez
User avatar
pymsoft
 
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia

Next

Return to FiveWin para Harbour/xHarbour

Who is online

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