Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Linq/Entity Framework数据上下文作为ASP.net应用程序中的全局变量_Asp.net_Linq_Entity Framework_Asp.net Web Api - Fatal编程技术网

Linq/Entity Framework数据上下文作为ASP.net应用程序中的全局变量

Linq/Entity Framework数据上下文作为ASP.net应用程序中的全局变量,asp.net,linq,entity-framework,asp.net-web-api,Asp.net,Linq,Entity Framework,Asp.net Web Api,我正在使用ASP.NETWebAPI来实现一个简单的RESTAPI。我将Linq用于数据访问层,并为每个api调用更新一个新的LINQDataContext。但是为每个调用创建一个新的数据上下文似乎有点耗费资源,所以我开始考虑将datacontext移动到单个应用程序级变量,该变量将在global.asax中实例化 每个api函数只是在单个表上执行简单的CRUD操作。我知道如果使用这种方法,会出现一些并发性问题。但实际上,所有表都是由用户分区的,因此两个不同的用户不能更新或删除任何表上的相同行。

我正在使用ASP.NETWebAPI来实现一个简单的RESTAPI。我将Linq用于数据访问层,并为每个api调用更新一个新的LINQDataContext。但是为每个调用创建一个新的数据上下文似乎有点耗费资源,所以我开始考虑将datacontext移动到单个应用程序级变量,该变量将在global.asax中实例化

每个api函数只是在单个表上执行简单的CRUD操作。我知道如果使用这种方法,会出现一些并发性问题。但实际上,所有表都是由用户分区的,因此两个不同的用户不能更新或删除任何表上的相同行。此外,由于它是一个api,我在每次更改后调用datacontext.submitchange(),因此任何单个用户都可以同时更新同一行


因此,除了并发性问题之外,还有其他问题需要考虑在全局级别管理datacontext还是在每个api调用上实例化?是否有其他方法也可以实现应用程序级实例化的性能/资源优势?

我相信您可以将数据上下文定义为全局变量。如果你绝对确信在未来你不会因为这个而有任何问题,那么你可以这样做

然而,在进行此更改之前,我是否可以建议您对应用程序进行基准测试,以了解到底是什么在消耗您的资源?您是否绝对确定您的数据上下文是有罪的?如果其他东西吃掉了你的资源怎么办


您应该首先确定您的问题,然后才开始优化。

是什么让您认为它是资源密集型的?您是否注意到性能问题?这被称为“过早优化”。我正在使用Azure,因此考虑到实际环境和调试平台之间的差异,我不得不衡量单个请求的往返过程&我更关心负载下的性能。我的想法是linq不仅有业务逻辑,还有SQL连接,需要在每次请求时实例化和打开它们。因此,乘以100秒/1000秒以上的请求,其性能至少要比单个实例化和打开连接的性能低一些。虽然请求web、api实例化等所涉及的开销可能会使增量开销变得微不足道。听说过连接池吗?在每个请求上可能没有打开SQL连接。考虑到微软可能认为这个场景已经过时了。