Ich verwende OWIN + Microsoft.AspNet.Identity.Owin (v.2.0.0.0) in Webanwendung. Ich registriere UserManager/DbContext pro Web-Anfrage, wie es weithin empfohlen wird:Speicherverlust in Owin.AppBuilderExtensions
aber keiner ist jemals entsorgt. Ich nahm einen Blick Blick in Reflektor und es scheint, wie ein Fehler in Erweiterungsmethode:
public static IAppBuilder CreatePerOwinContext<T>(this IAppBuilder app, Func<IdentityFactoryOptions<T>, IOwinContext, T> createCallback) where T: class, IDisposable
{
if (app == null)
{
throw new ArgumentNullException("app");
}
if (createCallback == null)
{
throw new ArgumentNullException("createCallback");
}
object[] args = new object[1];
IdentityFactoryOptions<T> options = new IdentityFactoryOptions<T> {
DataProtectionProvider = app.GetDataProtectionProvider()
};
IdentityFactoryProvider<T> provider = new IdentityFactoryProvider<T> {
OnCreate = createCallback
};
options.Provider = provider;
args[0] = options;
app.Use(typeof(IdentityFactoryMiddleware<T, IdentityFactoryOptions<T>>), args);
return app;
}
IdentityFactoryProvider hat zwei Rückrufe - erstellen und entsorgen, sondern entsorgen Rückruf hier nicht registriert ist. Ich habe auch meinen Verdacht mit Memory Profiler bestätigt.
Ich sehe Owin nicht auf Codeplex/Github (eigentlich dachte ich, es ist Open Source), also weiß ich nicht, wo ich meine Frage stellen soll: Könnte jemand anderes bestätigen, dass dies ein Speicherleck ist? Ich bin nicht so sicher, weil Google nichts darüber sagt, ich erwarte, dass es überall diskutiert werden sollte, wenn das ein Fehler ist.
Ich habe mir die Freiheit genommen, dies an das Microsoft-Team weiterzuleiten, das diesen Code verarbeitet. –
Es wäre nett, ihre Antwort zu hören, wenn überhaupt. –
Zuletzt hörte ich, da wurde das Problem untersucht. Das Hauptproblem ist, dass der Identity-Code nicht Open Source ist und es schwierig ist, eine Pull-Anfrage zu erstellen, um ihn zu reparieren. Im Moment gibt es einen Platzhalter im Codeplex, aber ... noch nichts. Es könnte ein Hinweis darauf sein, dass es sich irgendwann um Open Source handelt. –