Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 基于实体框架的应用程序的SQL Server进程过多_.net_Sql Server_Vb.net_Entity Framework - Fatal编程技术网

.net 基于实体框架的应用程序的SQL Server进程过多

.net 基于实体框架的应用程序的SQL Server进程过多,.net,sql-server,vb.net,entity-framework,.net,Sql Server,Vb.net,Entity Framework,我们目前正在开发一个基于WPF/实体框架的应用程序。我们的要求之一是允许用户选择登录时要连接到的环境(测试、培训或生产)。每个连接选项都指向自己的数据库。为了做到这一点,我们通过以下方式创建新的EF上下文: Public Function NewVectorContext() As VectorEntities Dim strDBConn As String = "metadata=res://*/EntityFramework.VectorModel.csdl|res://*/Enti

我们目前正在开发一个基于WPF/实体框架的应用程序。我们的要求之一是允许用户选择登录时要连接到的环境(测试、培训或生产)。每个连接选项都指向自己的数据库。为了做到这一点,我们通过以下方式创建新的EF上下文:

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
在运行时由用户选择(测试、培训、产品)确定

我们已经确保,一旦它的工作完成,所有新的上下文都会被处理掉


问题在于:当用户使用该应用程序时,我们在SQLServer的活动监视器中看到数百个SQLServer进程。一些个人用户在使用该应用程序时有30多个相关流程。一旦用户关闭应用程序,相关的进程都会消失-但是当应用程序运行时,这些进程似乎会继续存在。

修复-正如我上面提到的,解决方案的一部分是正确的内存管理,并确保所有模型和viewmodels都被正确处理。但这只消除了我们看到的一小部分sql server进程。罪魁祸首是设计不当的模型基类,该基类为每个实例化的模型创建了多个上下文。一旦它被改写,问题就解决了。与EF无关。

问题半修复:我们的viewmodels和models并非总是被正确处理,碎片显然仍然留在内存中,这表明SQL Server Activity monitor中有大量进程。通过适当的处理,我们可以看到创建的sql server进程越来越少,但仍有大量进程被创建-这正常吗?