Después de una medición considerable, he identificado un punto de conexión en uno de nuestros servicios de Windows que me gustaría optimizar. Estamos procesando cadenas que pueden tener múltiples espacios consecutivos y nos gustaría reducirlas a espacios únicos. Nosotros usamos una expresión regular compilada estática para esta tarea:¿Cómo superar el rendimiento de este reemplazo de regex?
private static readonly Regex
regex_select_all_multiple_whitespace_chars =
new Regex(@"\s+",RegexOptions.Compiled);
y luego usamos como sigue:
var cleanString=
regex_select_all_multiple_whitespace_chars.Replace(dirtyString.Trim(), " ");
Esta línea se invoca varios millones de veces, y está demostrando ser bastante intensa. Intenté escribir algo mejor, pero estoy perplejo. Dado los requisitos de procesamiento bastante modestos de la expresión regular, seguramente hay algo más rápido. ¿Podría el proceso unsafe
con punteros acelerar las cosas aún más?
Editar:
Gracias por el increíble conjunto de respuestas a esta pregunta ... más inesperado!
+1 para el perfilado. – Kobi
¿Está ejecutando esto muy a menudo en cadenas pequeñas, o lo está ejecutando en enormes cadenas –
@rob, se está ejecutando en cadenas que son aproximadamente 10-40 caracteres de largo – spender