• C#导出大量数据到excel,怎么提升性能


    一,要提升性能,我们先要知道耗时的地方在哪里

    1,数据库查询,
    2,把数据组合成新集合循环嵌套太多

    二,那我们怎么优化呢?

    一,数据库查询,
    1》,数据库查询:如果数据量小,我们可以用临时datatable,连表查询,,可是如果是连表都是千万级上亿数据,就不建议用连表
    那这个时候该怎么办呢?
    2》这个时候我们可以选择先单表查询,然后再循环体查询自己所要的其他关联数据,这个时候我们需要注意的点是什么?
    3》减少数据库查询!!!!!!!!!这个是重点,那怎么减少呢?正常逻辑如下代码,可是数据量很耗性能

    foreach (var item in listST)
    {
        var sModel= GetModel();  //如果这个方法每次都查询一次数据库,会很耗性能!!!导致循环循环很慢!,即时使用缓存也会很慢
        item.name = sModel.name;
    }

    4》我们可以换一种思路,优化如下代码:

    List<Student> listST = new List<Student>();
    List<int> listInt = new List<int>();
    int g = 0;
    foreach (var item in listST)
    {
        ////我们可以选择每两千条数据查询一次
        ////保存成一个集合
        if (g % 2000 == 0)
        {
              listST = GetList($"id in ({string.Join(",", listST.Skip(g).Take(2000).Select(m => m.id).Distinct().ToArray())})", 2000, 1, "name,Id");
        }
        var sModel = listST.FirstOrDefault(m => m.id == item.id);
        item.name = sModel.name;
        g++;
    }


    二,把数据组合成新集合循环嵌套太多,这个就是优化逻辑,减少循环嵌套

  • 相关阅读:
    Linux-线程同步(day14续)
    Linux之线程(day14)
    Linux-网络编程-UDP网络编程(day13续2)
    ES6 模块加载
    let与var声明区别
    vue 常用指令v-if v-else v-show v-for
    动态路由的意义,以及路由重定向
    前端路由的理解
    socpe 与 包的引入
    VUE 组件注册(全局、局部)
  • 原文地址:https://www.cnblogs.com/May-day/p/11322409.html
Copyright © 2020-2023  润新知