メモリリークのように見えるものに髪を引っ張っていますが、原因を見つけることができません:(
私は自分のPCでアプリケーションを構築しました。これは、大量のメモリを備えたかなり重い獣でした。そのため、自分のプロセスがこれほど多くのメモリを消費していることに気づきませんでした。限られたメモリの本番環境にコードをリリースして初めて気づきました。
私はWCFを含め、かなりの数の異なるテクノロジーとパターンを使用していますが、今ではほとんどのコードを削除して、何が非常に多くのメモリを消費しているかを調べるようになりました...
これは、アプリの最も単純化されたバージョン、1つのエンティティ、1つのマッピング、および実行中にDBから取得する単純なプロシージャであり、タスクマネージャーのプロセスが際限なく成長していることがわかります。
using System;
using System.Linq;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using FluentNHibernate.Mapping;
using NHibernate;
using NHibernate.Linq;
namespace ConsoleApplication18
{
public class Program
{
private static void Main()
{
var i = 0;
while ( i < 1000000 )
{
ISession session = BuildSessionFactory().OpenSession();
ITransaction transaction = session.BeginTransaction();
var users = session.Query< User >().ToList();
transaction.Commit();
transaction.Dispose();
transaction = null;
session.Dispose();
session = null;
Console.WriteLine( users.Count );
users = null;
i++;
}
}
private static ISessionFactory BuildSessionFactory()
{
return Fluently.Configure()
.Database( MsSqlConfiguration
.MsSql2008
.ConnectionString( "Data Source=SEB-PC\\SEBPC;Initial Catalog=Nice;Integrated Security=True" ) )
.Mappings( m => m.FluentMappings.AddFromAssemblyOf<User>() )
.BuildSessionFactory();
}
}
public class User
{
public virtual Guid Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Email { get; set; }
}
public class UserMap : ClassMap< User >
{
public UserMap()
{
Id( x => x.Id ).UnsavedValue( Guid.Empty );
Map( x => x.FirstName )
.Length( 50 )
.Not.Nullable();
Map( x => x.LastName )
.Length( 50 )
.Not.Nullable();
Map( x => x.Email )
.Length( 254 )
.Not.Nullable()
.Unique();
}
}
}
私は何か間違ったことをしていますか?
nugetを使用してサードパーティのDLLを入手しましたが、バージョンは次のとおりです。
FluentNHibernate:1.3.0.733
Iesi.Collections:1.0.1.0
NHibernate:3.3.1.4000
これが初心者の質問である場合は申し訳ありませんが、私は今一週間以上あちこちでグーグルしています:(
ありがとう!
セブ:)