Expérience des développeurs dans le domaine de la gestion de la mémoire

Mise à jour : novembre 2007

Vos connaissances dans le domaine de la gestion de la mémoire varieront en fonction de votre expérience en matière de développement. Dans certains cas, vous devrez adapter vos méthodes de programmation à la gestion automatique de la mémoire assurée par le Common Language Runtime.

Développeurs COM

Les développeurs COM sont habitués à implémenter le décompte de références comme technique de gestion manuelle de la mémoire. Chaque fois qu'il est fait référence à un objet, un compteur est incrémenté. Lorsqu'une référence à un objet est hors de portée, le compteur est décrémenté. Lorsque le décompte de références d'un objet atteint zéro, l'objet est finalisé et sa mémoire est libérée.

Le modèle de décompte de références est à l'origine de nombreux bogues. Si les règles de décompte de références ne sont pas suivies scrupuleusement, des objets peuvent être libérés prématurément ou des objets non référencés peuvent s'accumuler dans la mémoire. Les références circulaires sont également souvent à l'origine de bogues. Une référence circulaire se produit lorsqu'un objet enfant possède une référence à un objet parent et que l'objet parent possède une référence à l'objet enfant. Ce scénario empêche la libération ou la destruction de l'un ou l'autre objet. La seule solution consiste pour les objets parent et enfant à respecter un modèle déterminé d'utilisation et de destruction, par exemple le fait que le parent supprime toujours l'enfant en premier.

Lorsque vous développez des applications dans un langage qui cible le Common Language Runtime, le garbage collector du runtime supprime la nécessité d'effectuer un décompte de références et, par conséquent, les bogues qui peuvent provenir de ce modèle de gestion de mémoire manuelle.

Développeurs C++

Les développeurs C++ sont habitués aux tâches relatives à la gestion manuelle de la mémoire. Avec C++, lorsque vous allouez de la mémoire pour un objet à l'aide de l'opérateur new, vous devez libérer la mémoire de l'objet à l'aide de l'opérateur delete. Cela peut provoquer des erreurs comme le fait d'oublier de libérer un objet, ce qui entraîne alors une fuite de mémoire, ou de tenter d'accéder à la mémoire d'un objet qui a déjà été libéré.

Lorsque vous développez des applications à l'aide de Visual C++ ou d'un autre langage qui cible common language runtime, vous ne devez pas utiliser l'opérateur delete pour libérer un objet. Le garbage collector s'en charge automatiquement à votre place lorsque l'objet n'est plus utilisé par l'application.

Les développeurs C++ peuvent être habitués à éviter l'utilisation d'objets à court terme en raison du coût associé à la gestion manuelle de la mémoire de ces objets. Pour les objets à court terme managés qui sont créés et qui deviennent hors de portée entre les collections, le coût d'affectation et de libération de mémoire est extrêmement faible. Dans le .NET Framework, le garbage collector est en fait optimisé pour manager des objets dont la durée de vie est courte. Lors du développement d'applications managées, il convient d'utiliser des objets à court terme dans les cas où ils simplifieraient votre code.

Développeurs Visual Basic

Les développeurs Visual Basic sont habitués à la gestion automatique de la mémoire. Les méthodes de programmation auxquelles vous êtes habitué s'appliqueront à la majorité des objets managés que vous créerez dans le .NET Framework. Vous devez cependant porter une attention particulière au modèle de design suggéré à utiliser pour une méthode Dispose lorsque vous créez ou utilisez des objets qui encapsulent des ressources non managées.

Le .NET Framework prend en charge davantage de langages qui ciblent le Common Language Runtime que ceux mentionnés dans cette section. Quel que soit le langage managé que vous utilisez, le garbage collector du .NET Framework assure la gestion automatique de la mémoire. Il alloue et libère de la mémoire pour des objets managés et exécute, le cas échéant, des Destructeurs et méthodes Finalize pour nettoyer correctement les ressources non managées. La gestion automatique de la mémoire simplifie le développement en supprimant les bogues courants qui proviennent des modèles de gestion manuelle de la mémoire.

Voir aussi

Concepts

Destructeurs et méthodes Finalize

Autres ressources

Garbage collection