Tôi sử dụng OWIN + Microsoft.AspNet.Identity.Owin (v.2.0.0.0) trong ứng dụng Web. Tôi đăng ký UserManager/DbContext theo yêu cầu web, theo khuyến cáo rộng rãi:Rò rỉ bộ nhớ trong Owin.AppBuilderExtensions
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
nhưng không phải là bao giờ xử lý. Tôi liếc nhìn vào gương và nó có vẻ như một lỗi trong phương pháp khuyến nông:
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 có hai callbacks - tạo và định đoạt, nhưng xử lý gọi lại không được đăng ký tại đây. Tôi cũng xác nhận sự nghi ngờ của tôi với bộ nhớ hồ sơ.
Tôi không thấy Owin trên codeplex/github (thực ra tôi nghĩ nó là mã nguồn mở), vì vậy tôi không biết hỏi câu hỏi ở đâu: ai có thể xác nhận đây là rò rỉ bộ nhớ không? Tôi không chắc chắn vì google không nói gì về nó, tôi hy vọng nó sẽ được thảo luận ở khắp mọi nơi, nếu đây là một lỗi.
Tôi đã tự do chuyển tiếp điều này cho nhóm Microsoft xử lý mã này. –
Thật tuyệt khi nghe phản ứng của họ, nếu có. –
Cuối cùng tôi nghe nói, đã có điều tra vấn đề. Vấn đề chính là mã Identity không phải là mã nguồn mở và thật khó để tạo ra một yêu cầu kéo để sửa chữa nó. Có một trình giữ chỗ trên codeplex vào lúc này nhưng ... không có gì. Nó có thể là một gợi ý rằng nó sẽ được mở nguồn cuối cùng. –