2010-04-18 4 views
0

dans mon objectif d'adopter de meilleures pratiques de codage J'ai quelques questions en général sur la manipulation automatique du code. J'ai entendu différentes réponses à la fois en ligne et en parlant avec d'autres développeurs/programmeurs dans mon travail. Je ne sais pas si je aurais dû les diviser en 3 questions, mais ils semblent tous en quelque sorte lié:Code .NET automatique, session nhibernate et nettoyage du datacontexte LINQ?

1) Comment .NET ne gère des instances de classes et d'autres choses de code qui prennent de la mémoire? J'ai récemment découvert l'utilisation du modèle d'usine pour certaines choses comme les classes de service afin qu'elles ne soient instanciées qu'une fois dans l'application entière, mais ensuite on m'a dit que '.NET gère automatiquement beaucoup de ces choses quand on le mentionne.'

2) Comment la session de Nhibernate gère-t-elle le nettoyage automatique des choses inutilisées? J'ai vu certains dire que c'est génial de gérer les choses automatiquement et vous devriez simplement utiliser une usine de session et c'est tout, pas besoin de le fermer. Mais j'ai aussi lu et semblé plusieurs exemples où les gens ferment la session d'hibernation.

3) Comment le datacontext de LINQ gère-t-il cela? La plupart du temps, je ne disais jamais mon contexte de données et l'application ne voyait pas de coup de performance (bien que je n'exécute rien de très intensif), mais il semble que la plupart des gens recommandent de se débarrasser de votre contexte de données. . Cependant, j'ai vu beaucoup d'exemples de code où la méthode de disposition n'est jamais appelée. Aussi, en général, j'ai trouvé un peu ennuyeux que vous ne puissiez pas accéder à des objets liés à un enfant, même profond, après avoir disposé du datacontext à moins que vous ne les ayez saisis dans la requête.

Merci à tous. J'adore ce site jusqu'à présent, je me suis perdu et j'ai passé des heures à lire des choses ici. =)

Répondre

2

1) .NET fait la collecte des ordures et d'autres choses mais n'instancie pas les choses une seule fois et vous les fournit toujours, pour cela vous avez besoin d'un conteneur IoC comme Autofac.

2) La session par elle-même ne se déconnecte pas, vous devez la mettre dans un bloc using. Mais il ne prend soin d'autres choses qu'il gère.

3) C'est toujours une bonne idée de disposer des choses, en particulier des ressources non gérées. Donc, en règle générale, mettre ce genre de choses dans un bloc d'utilisation.

+0

En ce qui concerne 2. De quoi s'occupe-t-il alors? Est-ce qu'il gère les connexions à la base de données et autres? Si oui, quelle raison y aurait-il à jamais disposer d'une session si elle ne gardant aucune connexion ouverte ou stocker tout ce qu'il doit se débarrasser de? – AverageJoe719