Утечка памяти в Autofac Nhibernate

У нас есть Сервисы WCF, использующие autofac и FluentNhibernate. Проблема в том, что это приводит к утечке памяти. Через каждые 2-3 часа наше приложение становится очень медленным, и мы должны перезапустить наш пул приложений.

Ниже приведен код в нашем Application_start для автоматической регистрации компонентов в нашем файле Global.asax.

Что я могу сделать, чтобы решить это? Или где начать искать?

var builder = new ContainerBuilder();

builder.RegisterAssemblyTypes(typeof(IPwoSummaryCategoryService).Assembly).AsImplementedInterfaces();

builder.RegisterType<TemplateServiceCollection>().As<ITemplateServiceCollection>();

// Register Singletons
builder.RegisterType<QueryFacade>().As<IQueryFacade>().SingleInstance();
builder.RegisterType<CommandAggregator>().As<ICommandAggregator>().SingleInstance();

// Register open generics    builder.RegisterAssemblyTypes(typeof(ICommandHandler<>).Assembly).AsClosedTypesOf(typeof(ICommandHandler<>));
builder.RegisterInstance<MessageBrokerClient>(new MessageBrokerClient(Activator.CreateInstance<CustomMessageFormatter>(), AppConfiguration.MSMQRequestQueueUri, AppConfiguration.MSMQUser, false))
    .As<IMessageBrokerClient>().SingleInstance();
builder.RegisterInstance<Logger>(new Logger(HostingEnvironment.ApplicationPhysicalPath)).As<ILogger>();
builder.RegisterType<QuotesUnlockedByAdmin>().As<IQuotesUnlockedByAdmin>().SingleInstance();

// Register the Seed Data Builder
builder.RegisterType<SeedDataBuilder>();

// Register WCF Web Services
builder.RegisterType<QueryService>();
builder.RegisterType<CommandService>();
builder.RegisterType<MasterDataService>();
builder.RegisterType<AuthenticationService>();
builder.RegisterType<UserProfileService>();

//builder.RegisterType<OfflineSyncService>();
builder.RegisterType<ExternalDataQueryService>();
builder.RegisterType<DataContextProvider>().As<IDataContextProvider>().SingleInstance();

builder.RegisterAssemblyTypes(typeof(IDataContext).Assembly,typeof(DataContext).Assembly).AsImplementedInterfaces();

// Create a single Session Activator (manages multiple Session Factories) per AppDomain
builder.Register(context => SessionActivator.Build.FromConfiguration(new Configuration())).As<ISessionActivator>().SingleInstance();
builder.RegisterType<DataContextProxy>();

// Custom Registration for the CurrencyConverter
builder.Register(context => new CurrencyConverter(context.Resolve<IMasterQueryFacade>().GetCurrencies())).As<ICurrencyConverter>().SingleInstance();
var container = builder.Build();
AutofacHostFactory.Container = container;
ServiceLocator.SetLocatorProvider(() => new AutofacContrib.CommonServiceLocator.AutofacServiceLocator(container));

// Pre-populate the database with seed data (if missing)
container.Resolve<SeedDataBuilder>().InitializeSeedData();

0 ответов

Другие вопросы по тегам