2011-06-27 8 views
2

現在、WPF/Entity-Frameworkベースのアプリケーションを開発中です。私たちの要件の1つは、ログイン時に接続する環境(テスト、トレーニング、またはプロダクション)をユーザーオプションで選択できるようにすることでした。各接続オプションはそれぞれのデータベースを指しています。これを実行するために、我々は次のように新しいEFコンテキストを作成している:Entity Frameworkベースのアプリケーション用の余分なSQL Serverプロセス

Public Function NewVectorContext() As VectorEntities 
    Dim strDBConn As String = "metadata=res://*/EntityFramework.VectorModel.csdl|res://*/EntityFramework.VectorModel.ssdl|res://*/EntityFramework.VectorModel.msl;provider=System.Data.SqlClient;provider connection string=""" & VectorConnectionString & """" 

    Dim EntityConn As System.Data.EntityClient.EntityConnection = New System.Data.EntityClient.EntityConnection(strDBConn) 

    Dim MyNewContext as VectorEntities = New VectorEntities(EntityConn) 
    MyNewContext.ContextOptions.LazyLoadingEnabled = False 

    Return MyNewContext 
End Function 

VectorConnectionStringは、標準のSQL Server形式でフォーマットされます。

Data Source=OurDBServer;Initial Catalog=OurAppDB;Persist Security Info=True;User ID=OurUserId;Password=OurPassword 

とユーザの選択(テストによって実行時に決定され、トレーニング、プロダクト)。

ジョブが完了すると、新しいコンテキストがすべて廃棄されていることを確認しました。

この問題は、ユーザーがアプリケーションを使用しているときに、SQL Serverのアクティビティモニターで何百ものSQL Serverプロセスが表示されていることが原因です。個々のユーザーには、アプリを使用する際に30以上のプロセスが関連付けられています。ユーザーがアプリケーションをシャットダウンすると、関連付けられているプロセスはすべて消えますが、アプリケーションの実行中にこれらのプロセスが固執しているように見えます。

+0

半固定問題:私たちのビューモデルとモデルが常に適切に処理されているとは限らず、断片が明らかにメモリに詰まっていて、SQL Serverアクティビティモニタに表示されるプロセス数が多いことが明らかになりました。適切な処分では、作成されるSQLサーバー・プロセスが少なくなっていますが、依然として重要な数値が作成されています。これは正常ですか? – Gatmando

答えて

3

修正済み - 前述のように、適切なメモリ管理が行われ、すべてのモデルとビューモデルが適切に処分されていることが確認されました。しかし、それは私たちが見ていた少数のSQL Serverプロセスを排除するだけでした。主な原因は、インスタンス化されている各モデルの複数のコンテキストを作成していた、不適切に設計されたモデルの基本クラスでした。一旦それが書き直されると、問題は解決されました。 EFとは関係ありません。

関連する問題