私はSubSonic 3の最近の(極端な)パフォーマンス問題については、可能な限り小さなコード(Linqのほとんど)を書き直して、ORMを移行することを検討しています。BLToolkit with Linq - なぜ `using`文が必要ですか?
私はBLToolkitを見ています。 SubSonicとBLToolkitの主な違いの1つですが、BLToolkitでは常にusing
というステートメントが必要です。たとえば、
static void SingleTableTest()
{
using (var db = new NorthwindDB()) //This
{
var query =
from e in db.Employee
where e.EmployeeID > 5
orderby e.LastName, e.FirstName
select e;
foreach (var employee in query)
{
Console.WriteLine("{0} {1}, {2}", employee.EmployeeID, employee.LastName, employee.FirstName);
}
}
}
正確にはどうなりますか?データベースの新しいインスタンスを作成すると、新しい接続が作成されますか?これを静的なクラスに「ラップ」して、どこからでもできることは合理的でしょうかvar q=from e in Database.Employee ...
?これはウェブアプリケーションの文脈でどのような影響を与えるでしょうか?
接続は可能な限り最小限の作業単位に限定する必要があります。私は特にこのフレームワークに精通していませんが、EFやLinqToSqlのようなあなたのコネクションを管理している可能性が高いです。 –
コードの私の見解によれば、新しい 'db 'ステートメントごとに新しい接続が作成されます。私はSubSonicを見て、自作の「SharedConnectionScope」を使って、接続が自動的に開いて閉じられるようにしました。 – Earlz
これは、毎回データベース接続オブジェクトの新しいインスタンスを作成している可能性がありますが、データベースサーバーへのまったく新しいネットワーク接続を作成すべきではありません。 .NETはデフォルトで接続プーリングを行います。 –