Vous souhaitez une session de stratégie de gestion qui permet à votre application de fonctionner efficacement et de profiter des choses que NHibernate vous donne notamment la mise en cache et le chargement paresseux.
La création de sessions est un processus peu coûteux et nécessite peu de place-devant de la RAM ou du PROCESSEUR, de sorte que vous ne devriez pas vous inquiéter à propos de la conservation ou de la ré-utilisation de sessions (en effet, la ré-utilisation peut conduire à de méchants et de l'onu attendu d'effets secondaires). La session de l'usine est la chose coûteuse et devrait être construit qu'une seule fois et seulement une fois à l'application de démarrage.
La règle de base est: est-ce la durée de session doit être suffisamment longue pour que vous n'avez pas d'objets persistants traîner dans le champ d'application après la fin de la session.
Une fois que la session se termine, tous les changements de suivi pour les objets que vous avez obtenu à partir de cette session s'arrête, pour ceux qui ne sont pas sauvés, sauf si vous délibérément ré-attacher l'objet d'une nouvelle session. La session devrait donc être autour depuis aussi longtemps que les objets que l'on récupère vont exister. Dans une application Web, qui signifie généralement une session pour chaque demande; en WinForms, une session pour chaque formulaire.
Dans votre cas, avec un service (je suppose qu'il exécute comme un service Windows) faire l'NHibernate travail, vous pourriez vouloir envisager une session créé pour chaque nouvelle demande de le consommer de l'application de bureau, et de le disposer lorsque cette demande a été traitée. Ne sachant pas exactement comment votre service s'exécute et que le mécanisme de l'application de bureau utilise pour parler (remoting? WCF? Le bon vieux SAVON?) Je ne peux pas vraiment être plus précis.
(Il y a quelques exceptions à cette règle générale - supposons que vous disposez d'un ensemble d'objets persistants qui représentent une ressource partagée à laquelle d'autres code se référer, mais pas de changement, vous pouvez les charger à l'avance à app-démarrer et laisser déconnecté à partir de là.)
Si vous trouvez la performance atone en vertu de cette stratégie, il est peut-être que vous êtes juste de parler à la base de données trop et votre objet graphique est complexe; regardez deuxième niveau de mise en cache dans ce cas.