Uso OWIN + Microsoft.AspNet.Identity.Owin (v.2.0.0.0) nell'applicazione Web. Mi registro UserManager/DbContext per ogni richiesta web, come ampiamente raccomandato:Perdita di memoria in Owin.AppBuilderExtensions
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
ma non è mai disposto. Ho preso un colpo d'occhio guardare in riflettore e sembra come un insetto in metodo di estensione:
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 ha due callback - creare e smaltire, ma smaltirlo richiamata non è registrato qui. Ho anche confermato il mio sospetto con il profiler della memoria.
Non vedo Owin su codeplex/github (in realtà ho pensato che sia open source), quindi non so dove porre la mia domanda: potrebbe qualcun altro confermarlo è una perdita di memoria? Non sono sicuro perché Google non dice nulla al riguardo, mi aspetto che dovrebbe essere discusso ovunque, se si tratta di un bug.
Mi sono permesso di inoltrarlo al team Microsoft che gestisce questo codice. –
Sarebbe bello sentire la loro risposta, se presente. –
Ultimo ho sentito, ci stavano indagando sul problema. Il problema principale è che il codice di identità non è open source ed è piuttosto difficile creare una richiesta di pull per risolverlo. C'è un segnaposto in codeplex al momento, ma ... ancora niente. Potrebbe essere un suggerimento che sarebbe open source alla fine. –