Question

Je travaille sur une application asp.net-mvc. Le contexte de données linq est transmis à mes objets de service par un mappage de structure. Je suis prêt à avoir une portée de l'hybride. Tout cela fonctionne très bien.

protected override void configure()
{
    ForRequestedType<AetherDataContext>()
        .TheDefaultIs(() => new AetherDataContext())
        .CacheBy(InstanceScope.Hybrid);
}

Le problème est que je continue à utiliser notre mémoire, je me demande si l’interface IDisposable est réellement appelée.

Quelqu'un a des idées?

Si quelqu'un vous a laissé une autre idée de ce qui pourrait causer des exceptions de mémoire?

Mise à jour:

Donc, quelques informations supplémentaires, je viens d’enfiler quelques méthodes dans mon contexte de données et d’y mettre un frein.

protected override void Dispose(bool disposing)
{
    Debug.WriteLine("Disposing: " + DateTime.Now);
    base.Dispose(disposing);
}

public new void Dispose()
{
    Debug.WriteLine("Disposing: " + DateTime.Now);
    base.Dispose();
}

Je ne suis pas tout à fait sûr de procéder correctement, je suppose que la nouvelle méthode s'appellera?

Quoi qu’il en soit, aucun des freins n’a été touché. Cependant, le constructeur de la même classe a été appelé à chaque requête. Pas idéal, je pense.

Était-ce utile?

La solution

Ceci est une copie presque exacte de la question que j'ai posée il y a 2 jours: Session contenant des éléments implémentant IDisposable

InstanceScope.Hybrid stocke simplement l'objet à l'intérieur de HttpContext.Current.Items s'il existe ou le stockage ThreadLocal sinon, et InstanceScope.HttpSession fonctionne de la même manière que s'il utilise HttpSession et ThreadLocal. La collection d'éléments vit par requête. Par conséquent, si vous implémentez le modèle indiqué dans ma question, vous devriez voir le message Eliminer déclenché à la fin de la requête en cours.

Autres conseils

Ok, donc la dernière version de StructureMap (2.3.5) a une petite méthode utile appelée

.
HttpContextBuildPolicy.DisposeAndClearAll();
Méthodes pratiques de nettoyage sur HttpContext et ThreadLocal. HttpContextBuildPolicy.DisposeAndClearAll (), ThreadLocalStoragePolicy.DisposeAndClearAll (). L'appel de l'une ou l'autre méthode éjectera toutes les instances mises en cache et appellera IDispose si l'objet est IDisposable.

Auparavant, les méthodes de suppression n’étaient pas appelées, j’avais ajouté cela à Application_EndRequest et elles le sont maintenant. J'espère que cela résoudra certains de mes problèmes de mémoire.

Nous verrons.

Donc, la solution; son Cassini causant les problèmes. Fondamentalement, cela crée un nouveau contexte pour chaque demande. C’est la raison pour laquelle je voyais le contexte recommencer, quant à pourquoi il ne s’appelait pas jeté à la poubelle proprement dit, je ne le savais pas. Mais encore une fois, je suis prêt à croire que cela a quelque chose à voir avec Cassini.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top