Convertí mi programa de Delphi 4 a Delphi 2009 hace un año, principalmente para dar el salto a Unicode, pero también para obtener los beneficios de todos esos años de mejoras de Delphi.¿Cuándo y por qué debería usar TStringBuilder?
Mi código, por supuesto, es por lo tanto todo el código heredado. Utiliza cadenas cortas que ahora se han convertido convenientemente en largas cadenas Unicode, y he cambiado todas las antiguas funciones ANSI al nuevo equivalente.
Pero con Delphi 2009, introdujeron la clase TStringBuilder, presumiblemente modelada según la clase StringBuilder de .NET.
Mi programa realiza una gran cantidad de manejo y manipulación de cadenas, y puede cargar cientos de megabytes de cadenas grandes en la memoria a la vez para trabajar.
No sé mucho sobre la implementación de Delphi de TStringBuilder, pero escuché que algunas de sus operaciones son más rápidas que las operaciones de cadena por defecto.
Mi pregunta es si vale la pena o no hacer el esfuerzo y convertir mis cadenas estándar para usar la clase TStringBuilder. ¿Qué ganaría y perdería al hacer eso?
Gracias por sus respuestas y que me lleva a mi conclusión, que es no molestar a menos que se requiera la compatibilidad .NET.
en su blog el Delphi 2009 String Performance, Jolyon Smith states:
Pero parece a mí como si TStringBuilder existe principalmente como un accesorio de compatibilidad .NET, en lugar de proporcionar un beneficio real para los desarrolladores de aplicaciones Win32, con la posible excepción de los desarrolladores que desean o necesitan una fuente única de una base de código Win32/.NET donde el rendimiento de manejo de cadenas no es una preocupación.
Simplemente curioso si se dio cuenta de un cambio en el rendimiento cadena cuando se pasó de shortstrings D4 a cadenas Unicode D2009? – LachlanG
No hice sincronizaciones directamente en cadenas, pero mi actualización resultó en una mejora del 25% en el rendimiento del código, probablemente debido a FastMM y otras optimizaciones integradas en la nueva versión. Los archivos ANSI externos tenían que estar codificados en Unicode, lo que requiere el doble de espacio y esto agrega una sobrecarga importante al programa para archivos muy grandes, lo que revierte la mejora del rendimiento que se observa en los archivos pequeños. El bloqueo en buffers muy grandes redujo el burdon. En general, creo que mi programa probablemente sea tan rápido como antes, pero con el gran beneficio de Unicode. – lkessler
Gracias eso es muy interesante. – LachlanG