Da 4 mesi a questa parte sto scrivendo un nuovo servizio che fa pesante uso di manipolazioni di stringhe. Parlo di replace, wrod braking, stemming, ecc. ecc.
Questa mattina mi son letto un interessante post sulle prestazioni delle varie funzioni Replace disponibili nel framework: Comparing RegEx.Replace, String.Replace and StringBuilder.Replace – Which has better performance? Il post mi pare un pochetto incompleto in quanto non da riferimenti sull'uso delle risorse, in particolare della memoria. Nell'analisi delle prestazioni e' infatti fondamentale verificare sia il tempo che il consumo della memoria.
Abbandonato il post torno ai miei compiti quotidiani. Una delle funzioni che maggiormente uso, e' il multi string replace, cioe' devo sostituire piu' stringhe contemporaneamente. Ovviamente mi sono basato sullo strategy pattern in quanto probabilmente un domani trovero' un algoritmo piu' efficiente. La prima strategia di base alla quale mi sono affidato e' di evocare String.Replace per ogni sostituzione. Dato che la soluzione non mi piaceva in quanto prevede di dover fare N scan per ogni stringa da sostituire ho iniziato ad investigare alternative. Una di queste e' sicuramente basata sull'algoritmo di Aho-Corasick il quale viene solitamente utilizzato per il multi-string matching.
Non ho ancora fatto misurazioni di performance, ma se avete dei suggerimenti su alternative lasciatemi un messaggio. Molte teste sono meglio di una :-)