Codingly

INotifyPropertyChanged sans les strings, ça vous dit ?

Posted in Posts by Romain Verdier on septembre 30, 2008

INotifyPropertyChanged est une interface mal nommée, mais utile. Elle est principalement utilisée lorsqu’on veut mettre en place un databinding bi-directionnel entre un objet et un contrôle Winforms. Le contrôle graphique est par défaut capable de mettre à jour la ou les propriétés de l’objet auquel il est bindé. Par contre, pour qu’il puisse lui-même se mettre à jour lorsque l’objet sous-jacent est modifié, il faut que ce dernier lance l’évènement PropertyChanged défini par l’interface INotifyPropertyChanged. Et pour que… OK, j’arrête, vous savez déjà tout ça.
(more…)

Tagged with: , , ,

Continuer l’optimisation avec la Lightweight Code Generation (LCG)

Posted in Articles by Romain Verdier on mai 6, 2008

Cet article est un complément du précédent. Vous pouviez y lire dans la conclusion :

Nous nous sommes contentés d’évoquer la solution d’optimisation impliquant la génération de code IL. Dans le contexte de la problématique discutée, elle n’offrait aucun avantage par rapport à celle que nous avons exposée. Pire, elle imposait une étape inutile. Toutefois, certains besoins plus complexes dépassent le cadre des invocations dynamiques de méthodes et peuvent tout de même être adressés efficacement en recourant à la génération de bytecode.

S’il existe des scénarios dans lesquels le recourt à la LCG est inutile voire pénalisant, il n’y a parfois aucune autre alternative lorsqu’il s’agit de mettre en place une solution où les performances sont aussi importantes que la dynamicité.

Vous ne trouverez pas ici un tutorial sur l’utilisation de Reflection.Emit, mais plutôt un exemple d’utilisation de cette technique pour répondre de façon optimale à un besoin bien spécifique. Nous essaierons en parallèle de faire ressortir quelques guidelines relatives à l’usage de la LCG.
(more…)

Tagged with: , , , , ,

Optimisation des invocations dynamiques de méthodes en C#

Posted in Articles by Romain Verdier on mai 2, 2008

Je travaille actuellement en tant que consultant .NET sur un projet d’une certaine taille.

Travailler sur un projet d’une certaine taille ne signifie pas forcément que l’on travaille sur un projet intéressant, mais ça augmente sensiblement les chances de rencontrer de nouveaux problèmes. Il n’est pas question aujourd’hui de définir ce qu’est un projet d’une certaine taille, ni même de démontrer le postulat précédent ; il s’agit plutôt de parler d’une des dernières problématiques auxquelles j’ai dû faire face :

Comment éviter que les invocations dynamiques de méthodes via la réflexion rendent les performances d’une application ou d’un module catastrophiques ?

Réponse : En minimisant l’utilisation de la réflexion. C’est ce que je vais tenter de développer à travers un exemple directement inspiré du projet réel, quoiqu’adapté pour les besoins de l’article. Le langage utilisé sera C# 3.0, mais rien n’empêche d’utiliser C# 2.0.
(more…)

Tagged with: , , , ,