• ef core 读取text类型慢_ef core读取大字符串字段慢


    一、ef core 读取text类型慢_ef core读取大字符串字段慢

    分析:

    当服务器配置低,text富文本字符串比较大超过100kb的时候,使用ef读取数据明显变慢。

    变慢的两大使用特点:

    1.text 类型富文本字段内容太长,100kb以上

    2.读取时候还关联了其他表的数据。

    此两种特点,导致ef core读取数据慢,慢的明显。

    解决方案:

    业务方案:

    建议text字段不要存入太大的字符;再客户编辑富文本时候,复制粘贴后去掉样式,重新排版。

    业务方案优先考虑,如果确实字段需要内容大,再考虑下方技术方案。

    技术方案:

    1.列表读取内容 过滤掉text的字段,不从数据读取大文本

    2.详情读取内容,将关联表数据和text的字段分开查询或者,拆分成2个接口。

    二、ef core大文本字段列表读取优化

    优化之前:

    1. var list = query.Include(q => q.Sch_Label).Include(q => q.Sch_Month).Skip(skip)
    2. .Take(10)
    3. .ToList()
    4. .Select(q => new
    5. {
    6. q.ID,
    7. q.Name,
    8. q.Logo,
    9. q.ViewCount,
    10. q.CreateTime,
    11. AreaShow = q.GetAreaShow(),
    12. MonthShow = q.GetMonthShow(),
    13. LabelList = q.Sch_Label
    14. }).ToList();

    优化之后:

    1. var list = query
    2. .Include(q => q.Sch_Label)
    3. .Include(q => q.Sch_Month).Skip(skip)
    4. .Select(q => new School() {
    5. ID = q.ID,
    6. Name = q.Name,
    7. ViewCount = q.ViewCount,
    8. CreateTime = q.CreateTime,
    9. Logo = q.Logo,
    10. Sch_Month = q.Sch_Month,
    11. Sch_Label = q.Sch_Label
    12. })
    13. .Take(10)
    14. .ToList()
    15. .Select(q => new
    16. {
    17. q.ID,
    18. q.Name,
    19. q.Logo,
    20. q.ViewCount,
    21. q.CreateTime,
    22. AreaShow = q.GetAreaShow(),
    23. MonthShow = q.GetMonthShow(),
    24. LabelList = q.Sch_Label
    25. }).ToList();

    性能提升相当明显。

    三、ef core大文本字段详情读取优化

    关联表和 text大文本字段,分开获取;性能提升明显。

    优化之前:

    1. //获取详情
    2. public IActionResult GetDetail(int id)
    3. {
    4. var model = _school.GetQueryable().Where(q => q.ID == id)
    5. .Include(q => q.Sch_Image)
    6. .Include(q => q.Sch_Label)
    7. .Include(q => q.Sch_Month)
    8. .FirstOrDefault();
    9. JObject obj = JObject.FromObject(model, MvcContext.GetJsonSerializer());
    10. //学校视频
    11. VideoOperate _video = new VideoOperate();
    12. var videoList = _video.GetBySchool(id, 8).Select(q => new
    13. {
    14. q.ID,
    15. q.Title,
    16. q.ImgUrl,
    17. q.ViewCount
    18. });
    19. obj.Add("videoList", JArray.FromObject(videoList, MvcContext.GetJsonSerializer()));
    20. //流量++
    21. model.ViewCount++;
    22. _school.Modify(model);
    23. return Json(obj);
    24. }

    优化之后:

    1. //获取详情
    2. public IActionResult GetDetail(int id)
    3. {
    4. var model = _school.GetQueryable().Where(q => q.ID == id)
    5. //.Include(q => q.Sch_Image)
    6. //.Include(q => q.Sch_Label)
    7. //.Include(q => q.Sch_Month)
    8. .FirstOrDefault();
    9. //JObject obj = JObject.FromObject(model.Result, MvcContext.GetJsonSerializer());
    10. //学校视频
    11. //VideoOperate _video = new VideoOperate();
    12. //var videoList = _video.GetBySchool(id, 8).Select(q => new
    13. //{
    14. // q.ID,
    15. // q.Title,
    16. // q.ImgUrl,
    17. // q.ViewCount
    18. //});
    19. //obj.Add("videoList", JArray.FromObject(videoList, MvcContext.GetJsonSerializer()));
    20. //流量++
    21. model.ViewCount++;
    22. _school.Modify(model);
    23. //return Json(obj);
    24. return Json(model);
    25. }
    26. //获取关联表资料
    27. public IActionResult GetDetailMore(int id)
    28. {
    29. VideoOperate _video = new VideoOperate();
    30. Sch_ImageOperate _img = new Sch_ImageOperate();
    31. //学校图片
    32. var Sch_Image = _img.GetQueryable().Where(q => q.SchID == id).OrderByDescending(q => q.Sort).ToList();
    33. //学校标签
    34. var Sch_Label = _img.Context.Sch_Label.Where(q => q.SchID == id).ToList();
    35. //学校月份
    36. var Sch_Month = _img.Context.Sch_Month.Where(q => q.SchID == id).ToList();
    37. //学校视频
    38. var videoList = _video.GetBySchool(id, 8).Select(q => new
    39. {
    40. q.ID,
    41. q.Title,
    42. q.ImgUrl,
    43. q.ViewCount
    44. });
    45. return Json(new
    46. {
    47. Sch_Image,
    48. Sch_Label,
    49. Sch_Month,
    50. videoList
    51. });
    52. }

    其他相关:好大一个坑: EF Core 异步读取大字符串字段比同步慢100多倍 | 易学教程

    更多:

    EF Core 批量写入数据使用整理(二)Z.EntityFramework.Extensions.EFCore

    EF Core 批量写入数据使用整理_EF Core批量插入数据(一)

    EFCore 关联表查询_多表使用整理

  • 相关阅读:
    精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
    产品经理视角 | API接口知识小结
    Android简易音乐重构MVVM Java版 -搭建项目(八)
    Spring 注解 @Qualifier 详解
    Linux中DNS的分离解析和自动分配
    用一个文件,实现迷你 Web 框架
    动态规划(蓝桥杯 C++ 题目 代码 注解)
    AbstractDispatcherServletInitializer 的实现类为什么可以在初始化Web容器的时候被调用
    QT小记:QT程序异常结束的可能原因
    win7系统修改磁盘提示参数错误的解决办法
  • 原文地址:https://blog.csdn.net/u011127019/article/details/126011902