2010-09-07 19 views
1

Je cherchais un formateur d'objet et un modèle.Formatter qui génère le code IL pour String.Format

http://haacked.com/archive/2009/01/14/named-formats-redux.aspx

J'ai regardé dans HenriFormatter et lorsque les performances de vérification a constaté que pour le même type d'objet premier appel - provoque 15x plus de temps que pour le prochain - 15k tiques, deuxième était autour 1k. Je deviens digg, et trouve que son utilisation DataBinder.Eval, qui utilise la réflexion, et à un certain niveau ressemble à la structure de type est la mise en cache.

En comparaison avec le même String.Format qui était d'environ 50-100 ticks.

Donc, je me demande, et si au lieu d'utiliser DataBinder.Eval, nous pouvons émettre du code String.Format et le mettre en cache, et obtenir des performances 8 fois. Mais avant de faire tout cela, j'étais intéressé si quelque chose était déjà fait n'importe où.

Répondre

1

bien, vous pouvez analyser la chaîne de format et composer la chaîne de résultats. Formater l'appel en utilisant des arbres d'expression. Juste pour le test que j'ai fait l'implémentation de POC il basé sur la routine d'analyse de Scott Hanselmann (fonctionnalités de format personnalisé supprimées pour la simplicité): source code. Sur mes résultats maching comparant à HenryFormatter étaient les suivantes:

instance de type étudiant: Nom = John, [email protected] et = date de naissance 3/20/1 983 12:00:00 AM instance de type étudiant: Nom = John, [email protected] et = date de naissance 3/20/1 983 12:00:00 AM HenriFormat: temps d'exécution moyenne pour 500000 runs = 00: 00: 00.0000045 StructureToString: Temps d'exécution moyen pour 500000 passages = 00: 00: 00.0000003