开个贴,专门记录使用EF Core遇到的问题,以后自己用.net写东西,操作数据库就使用EF Core了

EF Core速度问题

问题描述

我需要导入600多个csv文件,批量导入不会弄,网上也没查

使用了读取再存储的方法

EF使用方法1,每一行存储一次(400条/s)

可以看下面的代码每一行存一次,这种方法的速度差不多是每秒400多条数据的样子

foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
using (var context = new MyContext())
{
context.dGKs.Add(dGK);
context.SaveChanges();
}
}
}

EF使用方法2,链接不释放 (40条/s)

我感觉是using (var context = new MyContext())这个的问题,因为using括号内就是一次对数据库的链接和释放,所以我把代码改成下面这样了,结果大跌眼镜

using (var context = new MyContext())
{
foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
context.dGKs.Add(dGK);
context.SaveChanges();
}
}
}

上面这样,我以为只有一次的链接释放会快一点,没想到更慢了,方法1每秒400多条数据,方法2这样每秒只有几十条,真的慢

EF使用方法3,多次add,一次SaveChanges(400条/s,但是数据库操作异常慢)

经过方法2,我又想了,多次add,然后一次SaveChanges,这样会不会快一点?代码又改成了下面这样

using (var context = new MyContext())
{
foreach (var csvName in 600个文件)
{
foreach (var 每一行 in 所有行)
{
context.dGKs.Add(dGK);
}
context.SaveChanges();
}
}

这样的结果也很不好,首先半天没反应,有反应了数据库突然出现几万条数据,这和方法1每秒400条/s的速度也差不多啊

缺点还有:

  1. 我手动操作数据库的时候,单单一个查询语句半天才有反应,不能使用这个方法3
  2. 如果文件很大,我所有的行都add到一起,如果是70万条数据呢,据说EF Core最大1000条数据,再大就很慢了

所以,根据以上两个缺点,方法3也很差劲

所以,我最后还是改为了方法1

using内部千万不要使用try catch

问题描述,有一个字段是字符类型的,例如: "12.123","None"

我想判断这个字段是不是数字,不是数字的话直接改为"0",因为数据库里面的字段直接设定的Decimal类型

然后,我脑残的使用了try catch,还是在using内部使用的,如下

using (var context = new MyContext())
{
try{
dgk.aaa = int.Prase(dgk.aaa).toString();
}
catch{
dgk.aaa = "0";
}
context.dGKs.Add(dGK);
context.SaveChanges();
}

速度真的是超级慢了,每秒才30多条数据,慢死,catch真的耗时间

所以我换成了正则,话说,我一直不会正则

using (var context = new MyContext())
{
if (!Regex.IsMatch(dGK.aaa, @"^\d+\.\d+$"))
{
dGK.aaa = "0";
}
context.dGKs.Add(dGK);
context.SaveChanges();
}

换了正则之后和方法1差不多了,每秒400多条

EF Core使用遇到的问题的更多相关文章

  1. EF Core 数据库迁移(Migration)

    工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用  Pomelo.EntityFrameworkCore.MySql   源代码地址(https://github. ...

  2. Asp.net Core 通过 Ef Core 访问、管理Mysql

    本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...

  3. EF Core 杂记

    本系列文章,将介绍本人在学习和使用EF Core的过程中的收获与心得. 或许有的地方讲的错误 欢迎大家批评指出. 1.EF Core 数据库迁移(Migration)

  4. MySQL官方.NET Core驱动已出,支持EF Core

    千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址:https:/ ...

  5. EF Core 1.0 和 SQLServer 2008 分页的问题

    EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...

  6. EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

    官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大 ...

  7. EF Core CodeFirst实践 ( 使用MS SqlServer)

    这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择  ASP.NET Core Web Application (.NET Core) ...

  8. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  9. ASP.NET Core 开发 - Entity Framework (EF) Core

    EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...

  10. 再谈EF Core内存数据库单元测试问题

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象& ...

随机推荐

  1. 图像处理中Stride和Width的关系

    一行有 11 个像素(Width = 11), 对一个 32 位(每个像素 4 字节)的图像, Stride = 11 * 4 = 44. 但还有个字节对齐的问题, 譬如: 一行有 11 个像素(Wi ...

  2. Beta冲刺(7/7)——2019.5.28

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(7/7)--2019.5.28 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  3. hive中时间操作(二)

    转:https://blog.csdn.net/qq646748739/article/details/77997276 --Hive中日期函数总结:--1.时间戳函数--日期转时间戳:从1970-0 ...

  4. 热修复技术沉思:jspatch

    硬修复: 直接修改工程源码,重新发版: 冷修复: 打补丁包,使用动态库和hook技术,在程序启动时完成问题代码修复:案例:iOS逆向工程: 特征:不修改原始代码.补丁发布.目前不支持动态发布: 热修复 ...

  5. 20181107 模拟赛T1:快乐传递政治正确版

    问题描述 David 有很多好朋友.有些期末季刚结束,有些人很快乐,但有些不太快乐,David 想把快乐传递给每个人,作为心理学大师,他准备了如下计划:David 的朋友中有 n 个男生和 m 个女生 ...

  6. 中心极限定理(Central Limit Theorem)

    中心极限定理:每次从总体中抽取容量为n的简单随机样本,这样抽取很多次后,如果样本容量很大,样本均值的抽样分布近似服从正态分布(期望为  ,标准差为 ). (注:总体数据需独立同分布) 那么样本容量n应 ...

  7. 应用Synopsys Synplify 综合的注意一个问题

    在Xilinx ISE中使用Synopsys Synplify综合时,注意约束文件*.ucf需在当前工程的文件夹下.不要将其它文件夹下的同名文件的约束当成当前工程下文件的约束.

  8. java 中类初始化,构造方法,静态成员变量,静态块的加载顺序

    1.编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型.格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内 ...

  9. HTML引入外部JS文件

    <!--引入外部文件的方式--> <script type="text/javascript" src="attack.js">< ...

  10. ~/.ssh/config文件的使用

    Host github-A HostName github.com User git IdentityFile /Users/xxx/.ssh/id_rsa_A IdentitiesOnly yes ...