首页 新闻 会员 周边

ef 模拟多线程并发插入数据 才2000个就挂了 已经开了线程池 但是 原生的ado.net 就没问题 是不是的做什么处理

0
[待解决问题]

for (int i = 0; i < 2000; i++)

{

//ThreadStart threadStart = new ThreadStart(dddd);

Thread thread = new Thread(new System.Threading.ParameterizedThreadStart(dddd));

thread.Start(i);

// dddd(0);
Console.WriteLine(i);
}

 


using (var cc = new EfDbContext("Xiaoyujia"))
{


cc.Set<OrderOperationLog>().Add(OrderOperationLog);


cc.SaveChanges();

 

 


}

 

ef
程序员编程日记的主页 程序员编程日记 | 初学一级 | 园豆:6
提问于:2017-07-26 09:48
< >
分享
所有回答(3)
0

怎么个挂法?

吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-26 09:54

l连接数超出 

支持(0) 反对(0) 程序员编程日记 | 园豆:6 (初学一级) | 2017-07-26 09:55

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

支持(0) 反对(0) 程序员编程日记 | 园豆:6 (初学一级) | 2017-07-26 09:56

@conan_lin: 这个有啥好解决的.

并发连接数不够不是很正常吗?

至于你说的ado.net不会.是因为还没到量级

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-26 10:26

@吴瑞祥: 主要是同等环境下   两个的量级差别大

支持(0) 反对(0) 程序员编程日记 | 园豆:6 (初学一级) | 2017-07-26 10:28

@conan_lin: 这个是肯定的.尤其是你一次数据库连接中的操作简单的时候.

EF封装了很多东西.所以他的单次简单操作的复杂度就比ado.net高很多.

如果你把一次数据库操作的复杂度提高.比如批量插入10000个数据 两边的差距就没那么明显了.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-07-26 10:34
0

加上这个试试

public class EFDbContextFactory
{
public static DbContext GetCurrentDbContext()
{
//单例模式:保证线程实例唯一
DbContext db = (DbContext)CallContext.GetData("DbContext");
if (db == null)
{
db = new Nee32Entities();

CallContext.SetData("DbContext", db);
}
return db;
}
}

notevar | 园豆:204 (菜鸟二级) | 2017-07-26 10:50

 不是这个的问题

支持(0) 反对(0) 程序员编程日记 | 园豆:6 (初学一级) | 2017-07-26 11:02
0

SQL SERVER也有最大同时连接数

MrNice | 园豆:3450 (老鸟四级) | 2017-07-26 11:32

  改了  没用 

支持(0) 反对(0) 程序员编程日记 | 园豆:6 (初学一级) | 2017-07-31 16:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册