こんにちは。mono で使用するために、かなり大規模なプロジェクトを Fluent NHibernate に移行しています。主要な機能のほとんどは正常に動作していますが、メモリに問題があります。
現在、このコードは 2 つのコントローラーにあります。これは、少しでも最適とは思えません。しかし、これをどこに置くか迷っています。
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(
c => c.FromConnectionStringWithKey("DashboardModels")
))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Accounts>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Notes>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Sales_Forecast>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ChangeLog>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Tasks>())
.BuildSessionFactory();
}
ISessionFactory sessionFactory = CreateSessionFactory();
私のdb呼び出しのほとんどはAJAXで、一度にいくつかの呼び出しがあります。これにより、リリースされていないセッションを作成しすぎていると思われます。
public ActionResult ReadAccounts([DataSourceRequest] DataSourceRequest request)
{
DataSourceResult result;
using (var session = sessionFactory.OpenStatelessSession())
using (var tx = session.BeginTransaction())
{
var customers = from customer in session.Query<Accounts>().AsNoTracking()
where !customer.Deleted
select customer;
result = customers.ToDataSourceResult(request);
tx.Commit();
}
return Json(result, JsonRequestBehavior.AllowGet);
}
データのみを返すメソッドに StatelessSessions を使用していると考えてください。
public JsonResult GetNoteInfo(int id = 0)
{
Notes note;
using (var session = sessionFactory.OpenStatelessSession())
using (var tx = session.BeginTransaction())
{
note = (from notes in session.Query<Notes>().AsNoTracking()
where notes.Note_ID == id
select notes).FirstOrDefault();
tx.Commit();
return Json(JsonResponseFactory.SuccessResponse(note), JsonRequestBehavior.DenyGet);
}
}
前述したように、これは機能していますが、どうすればメモリ パフォーマンスを向上させることができますか? 一番下の方法に似た方法で同時に発火する方法が5つほどあるので、以前にこれを行ったことがある人は、メモリが急速に拡張しないようにする方法についてアドバイスをいただければ幸いです。お時間をいただき、楽しいコーディングをありがとうございました!