首页 新闻 会员 周边 捐助

EF 6.0执行sql查询语句内存释放问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2016-08-09 11:52

各位好,我最近刚开始学习ef的使用,在使用ef执行sql语句的过程中发现ef的内存一直没释放,用例代码如下:

 1             var sql = "select sum(price) from stock where code = '600000'";
 2  
 3             foreach (var k in Enumerable.Range(0, 1000))
 4             {
 5                 using (var db = new StockEntities())
 6                 {
 7              
 8                     var r = db.Database.SqlQuery<decimal>(sql).Single();
 9                 } 
10 
11             }

这是我一个测试用例的代码,执行测试用例的时候发现内存一直在增长没有释放,即使在循环体中添加GC.Collect()代码也无效。执行到最后报出内存溢出错误。

请问有朋友能解释下这是什么原因吗?我该怎样处理内存不断增长的问题?

谢谢

富贵东坡的主页 富贵东坡 | 初学一级 | 园豆:194
提问于:2016-06-23 23:00
< >
分享
所有回答(5)
0

这个方法一结束就释放掉了

最爱晴天 | 园豆:187 (初学一级) | 2016-06-23 23:18

嗯,我也是这么想的,但结果是内存一直上涨没释放

支持(0) 反对(0) 富贵东坡 | 园豆:194 (初学一级) | 2016-06-24 12:34
0

StockEntities是DbContext的派生类吗?

如果是的话那就肯定是StockEntities里做了什么导致内存暴涨没释放。

起码我按你的方式跑了下是没问题的。

Poiuyt_cyc | 园豆:24 (初学一级) | 2016-06-23 23:20

 是自动生成的,你多次执行sql查询语句不会导致内存上涨吗?

支持(0) 反对(0) 富贵东坡 | 园豆:194 (初学一级) | 2016-06-24 12:34
0

用linq都会有内存占用高的问题.但这个不归你管..dotnet自己会管好的

吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-24 13:15

 这已经不是占用高的问题了,是内存一直没释放最后导致out of memory错误

支持(0) 反对(0) 富贵东坡 | 园豆:194 (初学一级) | 2016-06-24 23:50

@鸡蛋饭: 这种就是你EF上文管理有问题了.以前我也遇到过.解决方案就是不用EF或者上下文用using包起来

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-25 05:09

@吴瑞祥: 你看我的代码,每一次循环都有用using包起来,也试过不用using,也不行

支持(0) 反对(0) 富贵东坡 | 园豆:194 (初学一级) | 2016-06-25 11:31

@鸡蛋饭: StockEntities你这个是上下文?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-25 19:37

@吴瑞祥: 是上下文。原因是由sqlite的provider引起的。后来把数据库改成sqlserver,就没有内存溢出这个问题了,代码不变

支持(0) 反对(0) 富贵东坡 | 园豆:194 (初学一级) | 2016-08-09 11:48
0

关键是你的循环体里

  var db = new StockEntities()

相当于创建了1000次.把这句放到foreach外面会好很多.

ICE_Inspire | 园豆:228 (菜鸟二级) | 2016-06-25 14:44
0

原因是由sqlite的provider引起的。后来把数据库改成sqlserver,就没有内存溢出这个问题了,代码不变

富贵东坡 | 园豆:194 (初学一级) | 2016-08-09 11:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册