Conseguir la maxima velocidad del EXE creado por Harbour

User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by JmGarcia »

Entonces la mejor forma de recorrer un array que además su contenido son objetos de una clase ¿ sería esta ?:
for each x in aArray
WITH OBJECT x
:cMatricula
:cMarca
:cModelo
:nPrecio
END
next x


Es sobre este ejemplo de código:

Code: Select all

function main()
public aArray := {=>} , x 

aArray [ "M-1234-DF" ] := Tcoche():New( "M-1234-DF" )
aArray [ "V-4321-AF" ] := Tcoche():New( "V-4321-AF" )
aArray [ "B-1111-AA" ] := Tcoche():New( "B-1111-AA" )
aArray [ "O-2222-BB" ] := Tcoche():New( "O-2222-BB" )
aArray [ "L-3333-CC" ] := Tcoche():New( "L-3333-CC" )

for  each x in aArray
   WITH OBJECT x
      :cMatricula
      :cMarca
      :cModelo
      :nPrecio
   END
next x

return nil

**************************************************************************

CLASS Tcoche
   DATA cMatricula,cMarca,nPrecio
   CLASSDATA lRegistered AS LOGICAL
   METHOD New ( cIndicativo ) CONSTRUCTOR
   METHOD End()
ENDCLASS
METHOD New ( cMatricula ) CLASS Tcoche
DEFAULT cMatricula:="X-9999-XX"
::cMatricula:=cMatricula
::cMarca:="SCENIC
::cModelo:="Renault"
::nPrecio:=10000
return Self
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
interwin
Posts: 33
Joined: Wed Jan 25, 2012 9:30 pm

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by interwin »

Otra recomendacion.

SI se desea ganar velocidad no es recomendable usar ADS local. El uso de esta herramienta disminuye la velocidad de acceso a los archivos a veces hasta en un 40%.

Ads local tiene algunas ventajas como la encriptacion de archivos, manejo de diccionario de datos, uso de instrucciones SQL, etc. pero al costo de disminuir la velocidad de acceso.

Con ADS Servidor no disminuye la velocidad puesto que es cliente servidor.

Saludos.
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by thefull »

Correcto, es más, mi recomendación es meter ADS y los RDD que necesitemos, y con un simple, usar uno u otro.
Así, si nos encontramos que debemos usar ADS , no tenemos que recompilar o tener 2 exes distintos.
Usar la version 7.0 de ADS, nos servirá para los servidores 7 y superiores.

Code: Select all

//SOPORTE PARA ADS
FUNCTION ADS( nTipo )
   #include "ads.ch"
    REQUEST AdsKeyNo,ADSKeycount,ADSGetRelKeyPos,ADSSetRelKeyPos
    REQUEST ADS, ADSNTX
    rddRegister("ADS",1)
    rddsetdefault( "ADSNTX" )
    AdsSetServerType( nTipo ) // Atención, tenemos que determinar el tipo de conexion, 7 a todos.
RETURN NIL

function arranca()

    //..... codigo .....

     if empty( cServer )               // No hay servidor de ads
        rddsetdefault( 'DBFNTX' )   // Forzamos RDD por defecto de HARBOUR
     else
       if AdsIsServerLoaded( cServer ) > 0 // Encontramos servidor de ADS
          ADS( nTipo )
       else
          Alert( "No se encuentra servidor ADS en :" +cServer )
          quit
       endif
     endif

//  .... etc.....
 
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by thefull »

Opcion del compilador , genera exe más rápido, pero con tamaño más grande;

#HARBOUR_FLAGS = $( HARBOUR_FLAGS) -DHB_NO_TRACE -l -gc3
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by Carles »

Hola,

Mi recomendacion es intentar optimizar procesos. Harbour tendra su limitación dentro de la ejecucion de pcode, pero afinar y obtener buenos ratios estriba mas en la logica del proceso. En cuanto al uso de RDD yo no escatimaria RDD de ADS Local o Server es igual, las ventajas q reporta son idiscutibles aun cuanto pierdes un "poco" de rendimiento, relativo segun como lo mires. Por ejemplo leer 1 millon de registros con DBFCDX estas 1 seg. y con ADSCDX el doble, y ? pero esto es un millon de registros.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by thefull »

Carles, correcto, por eso el usar el profile es super útil. Ahi puedes sacar muchas conclusiones y ver donde estás perdiendo el tiempo y ver como puedes llegar a optimizar
las funciones que están perdiendo mucho el tiempo.
Por ejemplo, una cosa tonta es

Code: Select all

while !eof()
     ... etc...
     cValor := Funcion_Mia() // Devuelve siempre el mismo valor
     ... etc...
    if !empty( cValor  )
       ...etc....
    endif
end while
 
Convertido a;

Code: Select all

cValor := Funcion_Mia() // Devuelve siempre el mismo valor
while !eof()
     ... etc...
     ... etc...
    if !empty( cValor  )
       ...etc....
    endif
end while
 
Estas pequeñas cosas pueden ser vistas por pistas del profile. Por ejemplo, aqui se llamará UNA SOLA LLAMADA, dentro del while, si tenemos 10.0000 regitros, tendremos , 10.0000 llamadas a la función
Funcion_Mia().

Saludos
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by MarioG »

Rafa;
y un "como usar Profile y no morir en el intento"...seria mucho pedir? :wink:
Para xHarbour es lo mismo que para Harbour?

Saludos
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by MarioG »

Perdón...
Me pareció ya haberlo leido, asi es que revisando el Blog de Walter Negro lo encontré
Para los interesados:
http://cosadenegro.blogspot.com.ar/2005 ... filer.html
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
interwin
Posts: 33
Joined: Wed Jan 25, 2012 9:30 pm

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by interwin »

Carles

Yo use por mucho tiempo en mis aplicaciones ADS local, que es gratuito, y en red con solo 10000 registros la velocidad dismiye casi un 40% comparado con el rdd nativo de xharbour teniendo solo tres terminales, y aun usando instrucciones sql. Si usas ads local en un solo equipo la diferencia de velocidad no es notable, ¡pero en red uff¡. Sobre todo notas la lentitud si manejas muchos browse. ADS Server, el que tiene costo, se supone que debe de ser mas rapido porque es cliente servidor aunque yo no lo he probado pero pero con la ventaja del uso del sql el rendimiento debe de ser buenisimo. Con el ADS loxal la velocidad disminuye bastante con cada terminal en la que corre el sistema (aunque el ads local solo permite que se conecten 5 computadoras corriendo la misma aplicacion). No se su opinion pero en mi experiencia el rendimiento de una aplicacion esta mas determinado por la velocidad de acceso a los archivos que por otra cosa. Claro suponiendo que se tiene el hardware adecuado y que no sea el culpable de la lentitud de los programas.

Saludos.
hidroxid
Posts: 28
Joined: Sun Apr 24, 2011 12:50 am

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by hidroxid »

MarioG wrote:jm;
Si el array es de muchos registros, como tu sample, te sugiero usar FOR EACH (la explicación en Optimizacion IV).
Saludos
Disculpa Mario, pero cuando hablas de "La explicación en Optimización IV", ¿ a que se refiere eso ? ¿ es un apartado de Fwh ? o ¿ donde puedo leer acerca de ello ?

Gracias de antemano.
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by MarioG »

:oops: Disculpas!, se me mezclaron los post.

http://forums.fivetechsupport.com/viewt ... IV#p127487
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by Carles »

Interwin,

Pues si estas contento y satisfecho con el rdd de xH, pues nada :D .
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
lucasdebeltran
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by lucasdebeltran »

Carles,

¿Cuál es tu opinión acerca del rendimiento del RDD local de ADS?.

Muchas gracias.
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by Carles »

Lucas,

No voy a ser yo quien defenda las multiples cualidades q ofrece Ads. La diferencia que puedes notar en red usando el modo ads local esta en el concepto del producto. En entornos con arquitectura distribuida tienes q valorar mucho las consecuencias que puedes tener tu software a nivel de rendimiento, pero tambien de escabilidad, integridad, seguridad y mantenimiento.

Tanto el rdd de xH como el de ADS funcionan correctamente y uno es mas rapido q otro ? Si, es cierto (siempre hablando en modo local), pero es q ads tampoco esta pensado para trabajar con numerosos usuarios con su modo local ALS, sino que te ofrece la posibilidad de tener un sistema que si en un momento dado necesitas ofrecer esta funcionalidad a mas usuarios, facilmente la ofreces por un minimo coste, y luego hablaremos de los costes.

Si tu creas un producto para una empresa con 2/5 usuarios y les haces pagar una licencia adicional por un ADS de 800€, quizas sera la razon para que declinen la compra de tu producto. Pero esta es la estrategia de ADS, te ofrece el modo Local y la posibilidad de pasar a un entorno Cliente/servidor de una manera transparente, rapida y eficaz, para mi la mejor.

Si quieres poner a trabajar en una aplicacion a muchos usuarios, con tablas grandes,... preparate para llevarte grandes problemas de lentitud e integridad de datos. Si hablamos de aplicaciones con tablitas y poco mas, quizas aguante bien, pero no es la solucion correcta, pero si la mas barata claro.

ALS es mas lento en este escenario de 2/5 usuarios, mas usuarios ya he comentado que no tiene sentido, pero por ejemplo tiene la ventaja de tener los datos encriptados y nadie puede tener acceso a ellos. Por otra parte usar sql en el ALS tampoco tiene sentido, porque en un sistema distribuido todos los datos se procesaran en el lado cliente, lo que quiere decir que se va a pasaar toda la tabla. _ no se notan en tablas pequeñas pero si en grandes.

Tu puedes programarte con tus transacciones, si lo usas en modo local no pasa nada y si en lugar de ALS pasa ACS el sistema ya lo ejecuta a la perfeccion. Las diferentes virtudes de ADS, Control de transacciones, datos encriptados (nadie puede echar mano ni con un excel), encriptacion en la comunicacion, sql, triggers, sistema transaccional, fiabilidad, estabilidad y robustez (adios a los ind. corruptos) es lo que a mi me decanta por este producto, que quizas tiene la mala fama de su costo, pero creo que al final es un tema de conocer perfectamente la realidad de todo el coste en un escenario de este tipo.

Si tu miras el precio en su total quizas asuste, pero si empiezas a comparar con lo que te supone un administrador de BD, instalaciones, formaciones, incluso alguna vez hardware, veras como no lo es tanto y encima ofreciendo las numerosas ventajas q tiene. Yo he tenido servidores ads que no se ha bajado ni una vez en mas de 2 años y el sistema perfecto com el primer dia !!

Creo q el uso de ADS es mas un tema estratégico que no otro. Si hay gente que prefiere valorar este 40% mas de velocidad de acceso, pues si es cierto, pero tambien decir, (lo he hecho en el post anterior) que el gran problema siempre esta en la logica del proceso (mi humilde opinion).

El uso de browser, he escrito muchas veces que, ni que tu puedas trabajar directamente en red, creo que no es la mejor manera para procesar y trabajar con los datos, pero si la mas comoda.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
interwin
Posts: 33
Joined: Wed Jan 25, 2012 9:30 pm

Re: Conseguir la maxima velocidad del EXE creado por Harbour

Post by interwin »

Hola

Yo me referia a: si se quiere aumentar la velocidad... (El tema del post es conseguir velocidad maxima)..., evitar el uso de ads LOCAL. Pero estoy de acuerdo con Carles hay que sopesar las ventajas de ALS (ads LOCAL) como el encriptamiento de archivos, etc. que me parecen excelentes, de echo yo use mucho tiempo ads local y tengo aplicaciones en las que las ventajas de ALS son mayores que el aumento de la velocidad y lo siguo usando con estas. Pero tengo algunas otras aplicaciones en donde para mi fue mas importante la velocidad de acceso, lo cual no seria un problema si mis clientes optaran por adquirir el ADS (SERVIDOR) pero eso es un poco dificil.

Saludos.
Post Reply