現在、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以上のプロセスが関連付けられています。ユーザーがアプリケーションをシャットダウンすると、関連付けられているプロセスはすべて消えますが、アプリケーションの実行中にこれらのプロセスが固執しているように見えます。
半固定問題:私たちのビューモデルとモデルが常に適切に処理されているとは限らず、断片が明らかにメモリに詰まっていて、SQL Serverアクティビティモニタに表示されるプロセス数が多いことが明らかになりました。適切な処分では、作成されるSQLサーバー・プロセスが少なくなっていますが、依然として重要な数値が作成されています。これは正常ですか? – Gatmando