问题描述
各位大侠好,我有项目,里面用了entiryframework,想法大概是这样,每个请求公用一个objectcontext,代码如下。publicstaticHKCG_MISEntitiesDBEntities{get{if(HttpContext.Current!=null&&HttpContext.Current.Items["DBEntities"]==null){HttpContext.Current.Items["DBEntities"]=newHKCG_MISEntities();}returnHttpContext.Current.Items["DBEntities"]asHKCG_MISEntities;}}项目已经完成快一年多,运行基本良好。但最近使用VS的Loadtest对项目做下负载测试,10个users以下基本还行,但超出10个后就出现很多EF报的错误,网上查了下说是EF线程不安全问题,说IIS采用的是线程池,线程都是共享的。所以没法保证一个请求的所有处理都在一个线程内完成。但具体机制还是很模糊。请问大家是1.在asp.net中是怎么用EF的,直接使用using吗?2.iis中的请求和线程池是怎么个关系?谢谢
解决方案
解决方案二:
应该随用随new,公共context是容易有争抢的问题。每一个请求就会被分配一个线程。
解决方案三:
请求处理结束的时候没有把dbcontextdispose掉如果用的MVC的话,应该在disposecontroller的时候做。
解决方案四:
贴出你ef报什么错误。
时间: 2025-01-24 22:15:11