Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 18
xander Va por buen camino
¿Que es más rápido AnsiUppercase o Uppercase?

Le pase uno de esos optimizadores de código que hay por ahí a un proyecto que tengo y me sorprendio ver que me sugería que cambiara mis llamadas a Uppercase por llamadas a AnsiUppercase y lo mismo para los equivalentes en lowercase, porque según es más rápido... ustedes creen que si tenga una ventaja hacer ese cambio??
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #2  
Antiguo 04-10-2007
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Cita:
Empezado por xander Ver Mensaje
me sugería que cambiara mis llamadas a Uppercase por llamadas a AnsiUppercase y lo mismo para los equivalentes en lowercase, porque según es más rápido...
según la vcl:
Código Delphi [-]
function AnsiUpperCase(const S: string): string;
{$IFDEF MSWINDOWS}
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PChar(S), Len);
  if Len > 0 then 
    CharUpperBuff(Pointer(Result), Len);
// CharUpperBuff es una funcion definida en user32.dll (de windows)
end;
{$ENDIF}
{$IFDEF LINUX}
begin
  Result := WideUpperCase(S);
end;
{$ENDIF}

Y la otra, tiene más líneas de código... por decir algo.
Código Delphi [-]
function UpperCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if (Ch >= 'a') and (Ch <= 'z') then Dec(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 04-10-2007 a las 16:42:03.
Responder Con Cita
  #3  
Antiguo 04-10-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 18
xander Va por buen camino
La razón por la que pongo esto aqui es porque yo he hecho pruebas con Delphi 2007 y la llamada a Uppercase la resuelve más rápido que a AnsiUppercase, pero esas son mis ideas, ya algun entendido con más pericia nos develará el misterio
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #4  
Antiguo 04-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes, uppercase utiliza un procedimiento interno para realizar la tarea. Simplemente recorre la cadena y va convirtiendo cada letra en mayúsculas aplicando una simple operación (restándole $20). Sin embargo AnsiUppercase, utiliza una función de la API para realizar la tarea. No se si la API sera mas rápido que el código de borland (lo dudo), pero tiene otras ventajas.

Por ejemplo:
Código Delphi [-]
ShowMessage(Uppercase('ñuño')); // Esto muestra ñUñO
ShowMessage(AnsiUppercase('ñuño')); // Esto muestra ÑUÑO
ShowMessage(Uppercase('nunño',loUserLocale)); // Esto muestra ÑUÑO

En el ejemplo anterior, mientras el primer Uppercase utiliza una simple operación para calcular las mayúsculas, los otros dos utilizan la función CharUpperBuf de la API. Así mientras en el primer caso el resultado no es correcto, ya que no reconoce "ñ" como una letra minúscula, en los otros dos se utiliza la configuración de idioma de windows para hacer la conversión.

En resumen, que supongo que te recomienda usar AnsiUppercase no porque sea mas rápida, sino porque no comete errores como el de la "ñ"
Responder Con Cita
  #5  
Antiguo 04-10-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 18
xander Va por buen camino
Muchas gracias Seoane, con esas ventajas creo que no me importará que una se lleve unos cuantos ciclos del procesador de mas... usaré AnsiUpperCase

Thanx
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
  #6  
Antiguo 04-10-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Pero AnsiUpperCase tiene un llamado a una API de windows CharUpperBuff, no se cuantas lineas de codigo tenga esa función pero se supone que esa función acepta caracteres UNICODE, mientras que UpperCase solo acepta caracteres ACII, por lo que asumo que debe demorar mas usar AnsiUpperCase, pero realmente hoy en dia no creo que esa diferencia de quiza milimilimili segundos sea un problema, incluso he tratado de hacer una prueba usando el GetTickCount y no he podido mostrar una diferencia, por lo que personalmente usaria AnsiUpperCase.

Nota: Veo que mientras hacia las pruebas mencionadas seoane a resuelto el caso .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 05-10-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Bien, una duda resuelta... es una de aquellas cosas que siempre pensé: "Que diferencia "real" habrá?" pero que nunca me he detenido en buscarlo... xD

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
UpperCase en DBGrid Phacko Varios 12 23-06-2011 18:10:21
Ayudenme Rapido, Rapido omarys Varios 6 04-06-2011 09:45:34
Activar UpperCase a un DBMemo ElCherchu Varios 1 17-01-2005 16:36:28
...rapido de mente... Jure Humor 5 08-10-2004 16:09:13
UPPER, UpperCase con eñes, tildes ... Tomás Firebird e Interbase 3 15-01-2004 18:24:24


La franja horaria es GMT +2. Ahora son las 04:37:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi