Ho bisogno di fare un sacco di confronti tra stringhe insensibili alle maiuscole e alte prestazioni e ho capito che il mio modo di farlo. ToLower(). Trim() era davvero stupido a causa di tutte le nuove stringhe essere allocatoString.comparison performance (con trim)
Così ho fatta una buca in giro un po 'e in questo modo sembra preferibile:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
L'unico problema qui è che voglio ignorare spazi iniziali o finali, vale a dire Trim(), ma se uso Trim I hanno lo stesso problema con le allocazioni di stringhe. Immagino di poter controllare ogni stringa e vedere se StartsWith ("") o EndsWith ("") e solo poi Trim. Uno che o capire il dell'indice, di lunghezza per ogni stringa e passare al string.Compare ignorare
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
ma che sembra piuttosto disordinato e probabilmente devo usare per alcuni interi se io non fare davvero un grande if-else dichiarazione per ogni combinazione di trailing e lead blanks su entrambe le stringhe ... quindi qualsiasi idea di una soluzione elegante?
Ecco la mia proposta:
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);
}
}
Cosa ti fa pensare che c'è un problema? L'ottimizzazione prematura è una cattiva idea: non è necessario ottimizzare finché la tua applicazione non diventa "troppo lenta". Nel frattempo, concentrati sul codice chiaro su un codice veloce. –
Sei sicuro che il compilatore non stia comunque ottimizzando un caso del genere? –
Mi piacerebbe anche chiedermi se questo richiede veramente micro-ottimizzazione? Hai davvero un problema di prestazioni in questo settore? Immagino che ci siano altre aree in cui potresti ottenere molto più miglioramenti nelle prestazioni – AdaTheDev