![]() |
¿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??
|
Cita:
Y la otra, tiene más líneas de código... por decir algo.
|
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
|
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:
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 "ñ" |
Muchas gracias Seoane, con esas ventajas creo que no me importará que una se lleve unos cuantos ciclos del procesador de mas... usaré AnsiUpperCase :D
Thanx |
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 :). |
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. |
| La franja horaria es GMT +2. Ahora son las 21:23:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi