导出大量数据,解决npoi导出内存溢出

RISC-V V向量指令集学习笔记——访存指令 阅读详情
/// <summary>
        /// 使用OLEDB导出Excel
        /// </summary>
        /// <param name="dt">数据集</param>
        /// <param name="filepath">文件目录和文件名</param>
        /// <param name="tablename">SHEET页名称</param>
        /// <param name="pagecount">每页记录数</param>
        public static void Export(DataTable dt, string filepath, string tablename, int pagecount,string UserID)
        {
            string docupath = System.Web.HttpContext.Current.Server.MapPath("~\\NPOI\\" + UserID + "\\");
            //建立数据夹
            if (!Directory.Exists(docupath))
            {
                Directory.CreateDirectory(docupath);
            }
            //else
            //{
            //    File.Delete(docupath);
            //    Directory.CreateDirectory(docupath);
            //}
            //excel 2003格式
            string name = docupath + filepath;
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + name + ";Extended Properties=Excel 8.0;";
            //Excel 2007格式
            //string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + name + ";Extended Properties=Excel 12.0 Xml;";
            try
            {
                using (OleDbConnection con = new OleDbConnection(connString))
                {
                    con.Open();

                    //开始分页
                    if (dt.Rows.Count > pagecount)
                    {
                        int page = dt.Rows.Count / pagecount + 1; //总页数
                        for (int i = 0; i < page; i++)
                        {
                            //建新sheet和表头
                            StringBuilder strSQL = new StringBuilder();
                            string tabname = tablename + i.ToString();
                            strSQL.Append("CREATE TABLE ").Append("[" + tabname + "]"); //每60000项建一页
                            strSQL.Append("(");
                            for (int j = 0; j < dt.Columns.Count; j++)
                            {
                                strSQL.Append("[" + dt.Columns[j].ColumnName + "] text,");
                            }
                            strSQL = strSQL.Remove(strSQL.Length - 1, 1);
                            strSQL.Append(")");

                            OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con);
                            cmd.ExecuteNonQuery();

                            //准备逐条插入数据
                            for (int j = i * pagecount; j < (i + 1) * pagecount; j++)
                            {
                                if (i == 0 || j < dt.Rows.Count)
                                {
                                    StringBuilder tmp = new StringBuilder();
                                    StringBuilder strfield = new StringBuilder();
                                    StringBuilder strvalue = new StringBuilder();
                                    for (int z = 0; z < dt.Columns.Count; z++)
                                    {
                                        strfield.Append("[" + dt.Columns[z].ColumnName + "]");
                                        strvalue.Append("'" + dt.Rows[j][z].ToString() + "'");
                                        if (z != dt.Columns.Count - 1)
                                        {
                                            strfield.Append(",");
                                            strvalue.Append(",");
                                        }
                                        else
                                        {
                                        }
                                    }
                                    cmd.CommandText = tmp.Append(" insert into [" + tabname + "]( ")
                                        .Append(strfield.ToString())
                                        .Append(") values (").Append(strvalue).Append(")").ToString();
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                    }
                    con.Close();
                    //no = count;
                }
                Console.WriteLine("OK");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            GC.Collect();
            Table_Export_BIG(UserID);
        }
        /// <summary>
        /// 根据userid找到服务器地址路径下文件夹压缩并下载下来
        /// </summary>
        /// <param name="操作人id_文件夹名字"></param>
        public static void Table_Export_BIG(string UserID)
        {
            try
            {
                //DataTable dtout = DataAccess.GetTable("select top 1 * from IMN009");
                #region 打包发送主目录;
                string strInDirectoryPath = System.Web.HttpContext.Current.Server.MapPath("~\\NPOI\\" + UserID);//路径

                //if (File.Exists(strInDirectoryPath))//必须判断要复制的文件是否存在
                //{
                //    File.Copy(strInDirectoryPath, pSaveFilePath, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换
                //}
                string strOutFilePath = System.Web.HttpContext.Current.Server.MapPath("~\\NPOI\\" + UserID + ".zip");

                DownLoadFilesHelp.CompressDirectory(strInDirectoryPath, strOutFilePath, UserID);
                //CopyDirectory(strInDirectoryPath, pSaveFilePath);
                string fileName = UserID + ".zip";//客户端保存的文件名
                string filePath = System.Web.HttpContext.Current.Server.MapPath("~\\NPOI\\" + UserID + ".zip");//路径
                string file = System.Web.HttpContext.Current.Server.MapPath("~\\NPOI\\" + UserID);

                FileInfo fileInfo = new FileInfo(strOutFilePath);
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.ClearContent();
                System.Web.HttpContext.Current.Response.ClearHeaders();
                System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
                System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                System.Web.HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
                System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
                System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                System.Web.HttpContext.Current.Response.WriteFile(fileInfo.FullName);
                System.Web.HttpContext.Current.Response.Flush();
                File.Delete(filePath);
                DirectoryInfo dir = new DirectoryInfo(file);
                if (dir.Exists)
                {
                    DirectoryInfo[] childs = dir.GetDirectories();
                    foreach (DirectoryInfo child in childs)
                    {
                        child.Delete(true);
                    }
                    dir.Delete(true);
                }

                System.Web.HttpContext.Current.Response.End();
                #endregion
                //DataAccess.Despose();
                
            }
            catch (Exception ex)
            {

                //zAlert(ex.Message.ToString().Replace("\r\n", ""));
            }
        }

通过Simulink搭建一个智能微电网能量管理系统(Energy Management System, EMS) 通过上述代码实现,您可以逐步创建一个智能微电网能量管理系统。多源能量集成:整合光伏、风力发电、柴油发电机、电池储能等多种能源资源。负荷预测与调度:基于历史数据和天气预报,预测未来负荷和可再生能源输出,进行优化调度。储能系统优化:设计合理的充放电策略,确保储能系统的高效利用和寿命延长。经济性分析:评估不同运行模式下的经济性,考虑电价、维护成本等因素。环境影响评估:分析微电网对环境的影响,如减少碳排放、提高可再生能源利用率等。硬件在环仿真(HILS) 阅读详情

相关推荐

CST实战:变容二极管电容曲线提取全流程(附S参数设置技巧)

本文详细介绍了在CST Studio Suite中提取变容二极管电容-电压(C-V)曲线的完整实战流程。重点解析了S参数仿真的核心原理、DCFEED模块的正确配置、参数扫描的设置技巧,并探讨了集成SPICE模型进行精确仿真的方法,帮助射频工程师高效、准确地获取器件关键特性。

weixin_29237635的博客 529

netcore NPOI 导出大数据防止内存溢出

在前面我们已经介绍了使用XSSFWorkbook导出数据到excel,但是当导出100w级别数据时经常会出现内存溢出的情况,为了解决这个问题,我们这里就介绍一下使用另外一种导出方法。这里要特别注意一下,这种方式简单来讲,就是用磁盘空间来换取内存,必定会消耗临时目录所在的磁盘空间,所以要特别注意一下,临时目录磁盘空间是否足够,以免生成过大的临时文件导致磁盘爆满。window临时目录为:C:\Users\用户名\AppData\Local\Temp\。linux临时目录为:/tmp/C#获取应用临时目录。

码农的专栏 2977

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&amp;S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2083

那些天使用NPOI走过的坑

本文主要介绍我用NPOI生成Excel文件所报过的错,以及是如何解决的。

RainDown_lady的博客 1991

H3C防火墙旁路部署实战:网关迁移到防火墙后,如何配置DHCP和VLAN间隔离策略?

本文详细介绍了H3C防火墙旁路部署实战,重点讲解网关迁移到防火墙后的DHCP配置和VLAN间隔离策略。通过实际案例和配置示例,帮助网络工程师解决传统核心交换机架构的性能瓶颈和安全管控问题,实现精细化访问控制。

weixin_42549451的博客 414

ubuntu18.04安装gtsam过程及报错error: invalid initialization of reference of type ‘const std::vector<bool>&’

这里建议从这个链接下,不要从官网下,可能会有版本冲突 2.安装依赖 3.编译 报错: 1. error: invalid initialization of reference of type ‘const std::vector&’ from expression of type ‘const std::vector’ 124 | const std::vector& mask() const { retur...

qq_35102059的博客 2912

C#(NPOI)操作.md

常用的操作Excel文件的方法主要有三个 1. OleDb: 这种方式是把整个Excel文件当做一个数据源来进行数据的读取操作。 优点:实现方式简单,读取速度快; 缺点:读取Excel数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间不足导致内存溢出异常。 (不过貌似对于今天电脑的硬件配置来说,内存问题不大) 2. Com组件 这种方式是通过Com组件 Microsoft.Office.Interop.Excel.dll实现Excel文件的操作。 优点:读取Excel数据非常灵活,

golden_stone_fish的博客 943

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

详细介绍 NPOI操作Excel

下面是本人做的简单的案例使用NPOI 将数据保存到Excel中 ,和读取里面的数据    首先我们需要导入NPOI的程序集 接下来就是代码的详细内容 private void button1_Click(object sender, EventArgs e)         {             //导入数据               //前期先导入准备好的DL

ContextRequset的博客 650

HDMI接口及其在编程中的应用

在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文将介绍HDMI接口的基本原理以及如何在编程中使用HDMI接口。在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文介绍了HDMI接口的基本原理,并提供了使用Python编程语言和相关库实现HDMI接口应用的示例代码。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。

CodeByte的博客 802

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3915

使用NPOI读取EXCEL数据量大超过65535行引起OutOfMemoryException的解决办法

使用NPOI读取EXCEL数据量大超过65535行引起OutOfMemoryException的解决办法之一使用OpenXml

蜗牛的博客 4562

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

NPOI导出大量数据的避免OOM解决方案【SXSSFWorkbook】

解决NPOI大数据导出时内存溢出问题

怪咖Mr丶J 2920

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NPOI 导出列太多或者数据太多爆内存

NPOI 硬盘存储方式导出

Allen的专栏 1457

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

EPPlus导出大量数据

为什么80%的码农都做不了架构师?>>> ...

weixin_33843947的博客 1882

vue excel导出之后时间格式不一样_ef+Npoi导出百万行excel之踩坑记

精品推荐国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布!Docker快速手上视频教程(无废话版)【免费】作者:~小菜鸟转载自:https://www.cnblogs.com/qqljcn/p/11917768.html 最近在做一个需求是导出较大的excel,本文是记录我在做需求过程中遇到的几个问题和解题方法,给大家分享一下,一来可以帮助同样遇到问题的朋友...

weixin_39961636的博客 687

C#导出EXCEL超大数据源码,解决内存溢出问题,使用OLEDB方式(NPOI做不到)

最近工作导数据失败,找问题原因:ORALCE导出数据,超出5w多条数据,由于数据量过大(加上列数多),无法导出。 PLSQL工具导出EXCEL失败,卡死白屏。 使用NPOI第三方类导出EXCEL失败,超出100+M多的数据就抛出异常提示内存溢出。 使用微软的Interop.EXCEL组件导出失败,运行中提示内存溢出。 最后找到方法,使用OLEDB方式,数据导出到EXCEL文件,数据

shaoyupeng的专栏 1万+

C# NPOI导出Excel和EPPlus导出Excel比较

系统中经常会使用导出Excel的功能。 之前使用的是NPOI,但是导出数据行数多就报内存溢出。 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异。 NPIO官网地址:http://npoi.codeplex.com/ EPPlus官网地址:http://epplus.codeplex.com/ 添加NPOI、EPPlus类库dll使用的是NuGet添加。...

dengyanmian0515的博客 202

将数据导出到Excel

最近在做一个项目,涉及到将数据导出到excel,因此花了一天多时间,从网上查询了一些相关方法:下面做一下总结: 下面这个项目里面的步骤是本人已经成功应用到项目中的。 第一步骤:将NPOI DLL文件引用到项目中: 然后在项目引中会出现 using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; ...

IT技术猿猴的博客 4896

C#使用NPOI导出Word文件

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言软谋的.NET全套架构视频,大多视频包含源码,录制时间(初中级是2019~2020高级架构是2020~2021),原价6499,现仅需2...

zls365365的博客 1191

c# npoi 打开已经存在excel_Winform中导出Excel数据量百万级的处理办法导出为csv文件...

Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载:https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/106423452在上面介绍的第三种方式中通过SXSSFWorkbook就是应对数据量特别大的情况下,但是SXSSFWorkbo...

weixin_39641103的博客 638

C# NPOI导出Excel和EPPlus导出Excel

转自:http://www.cnblogs.com/tanpeng/p/6155749.html 系统中经常会使用导出Excel的功能。之前使用的是NPOI,但是导出数据行数多就报内存溢出。 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异。 NPIO官网地址:http://npoi.codeplex.com/ EPPlus官网地址:http://epplus.co...

weixin_30699443的博客 253

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL,但不久前,我在一个项目碰到一个需求:要将几个分别有近60多万的数据源导出到Excel中,我们先不要讨论这个需求本身是否合理,客户就是要这样。我先后用NPOI和EPPlus,都发现同一个问题:O...

weixin_30577801的博客 736
上一篇: 1
下一篇: SQL Server删除数据库所有表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值