Blog Stats
  • Posts - 171
  • Articles - 1
  • Comments - 197
  • Trackbacks - 5

 

Architecturing asp.net - 2

Dopo il post  in cui enfatizzavo l'architettura realizzata per il progetto corrente, eccomi a parlare di problemi di performance,gia previsti, dovuti al massiccio utilizzo di reflection e risolti ancora una volta grazie all'utilizzo di CodeSmith.

In pratica il sistema di caricamento delle custom entities si basa su un motore che esegue la query e per ogni colonna restituita verifica la mappatura(tramite custom attributes) sulle proprietà della custom entity stessa per valorizzarle.
Questo meccanismo prevede tra l'altro l'utilizzo di un sistema di alias per restituire i valori delle tabelle in join e questo mi permette di valorizzare le proprietà di tipo custom entity associate alla entità principale su cui sto eseguendo la query.

Il collo di bottiglia che in alcuni casi ha provocato rallentamenti veramente sensibili è che per entità complesse il numero di chiamata a reflection è veramente elevato.
Questo dal momento che la proceduradi caricamento dell' entity è ricorsiva in quanto permette di valorizzare anche le proprietà entity associate (es. se ho la classe Utente:User con una proprieta Societa di tipo Company, se dalla query arrivano i giusti alias allora mi troverò automaticamente caricata anche l'entity Societa al caricamento dell'utente.)

Ancora una volta ho "chiesto" a CodeSmith di generare il codice per ciascuna custom entity in modo che mi restituisse direttamente la mappatura nome colonna-nome proprietà, tramite un metodo tipo GetFieldName(string columnName)

Evitando la ricorsione su reflection e lasciandola verso metodi pieni di "if" autogenerati, ho notato e misurato un aumento delle performance sensibile.
Con ACT ho misurato un passaggio da 600rps a 2800rps. :)

Comments have been closed on this topic.
 

 

Copyright © Luca Mauri