Necesito hacer muchas comparaciones de cadenas insensibles a mayúsculas y minúsculas de alto rendimiento y me di cuenta de que mi forma de hacerlo .ToLower(). Trim() era realmente estúpido debido a todas las nuevas cadenas siendo asignadoString.comparison performance (with trim)
Así que hicieron pozos alrededor de un poco y parece preferible esta manera:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
El único problema aquí es que quiero hacer caso omiso de espacios iniciales o finales, es decir, Trim(), pero si uso Trim I tienen el mismo problema con las asignaciones de cuerdas. Supongo que podría verificar cada cadena y ver si comienza con ("") o EndsWith ("") y solo después Trim. O eso, o averiguar el índice, la longitud de cada cuerda y pasar a string.Compare anular
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
pero que parece bastante complicado y que probablemente tenga que utilizar algunos números enteros i si no hacer una muy grande if-else declaración para cada combinación de espacios en blanco finales y anteriores en ambas cadenas ... ¿alguna idea de una solución elegante?
aquí está mi propuesta actual:
public bool IsEqual(string a, string b)
{
return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
}
public bool IsTrimEqual(string a, string b)
{
if (Math.Abs(a.Length- b.Length) > 2) // if length differs by more than 2, cant be equal
{
return false;
}
else if (IsEqual(a,b))
{
return true;
}
else
{
return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
}
}
¿Qué le hace pensar que hay un problema? La optimización prematura es una mala idea: no hay necesidad de optimizar hasta que su aplicación sea "demasiado lenta". Mientras tanto, concéntrate en código claro sobre código rápido. –
¿Puede estar seguro de que el compilador no está optimizando este caso para usted de todos modos? –
También me pregunto si esto realmente requiere micro-optimización? ¿De verdad tienes un problema de rendimiento en esta área? Me imagino que hay otras áreas en las que podría obtener una mejora mucho mayor en el rendimiento – AdaTheDev