首页 > 解决方案 > 为什么在 asp.net 上读取大型 excel 文件时应用程序池正在回收

问题描述

我有一个 asp.net 网络应用程序。我正在阅读和处理上面的excel文件。

下面的代码显示了我如何读取 excel 文件。

            string strComand;
            if (strSheetName.IndexOf("|", StringComparison.Ordinal) > 0)
            {
                _sheetName = strSheetName.Substring(0, strSheetName.IndexOf("|", StringComparison.Ordinal));
                _range = strSheetName.Substring(strSheetName.IndexOf("|", StringComparison.Ordinal) + 1);
                strComand = "select * from [" + _sheetName + "$" + _range + "]";
            }
            else
            {
                strComand = "select * from [" + strSheetName + "]";
            }

            _daAdapter = new OleDbDataAdapter(strComand, _cn); 
            DataTable dt = new DataTable(strSheetName); 
            _daAdapter.FillSchema(dt, SchemaType.Source); 
            GC.Collect();
            GC.WaitForPendingFinalizers();

            _daAdapter.Fill(dt);  // there is a problem on this line
            _cn.Close(); 
            retInfo.Data = dt;  

            return retInfo;

如果我读的是小尺寸的excel,那么就没有问题了。但是当我尝试读取大型 excel 文件时,我的应用程序池正在回收。

我应该怎么办。

标签: asp.netiisapplication-pool

解决方案


这会导致应用程序池配置为在超出内存限制时进行回收。

解决此问题 通过选择适当的应用程序池来更改 IIS 中的应用程序池回收设置。

  1. 打开 IIs 管理器控制台。在 Connections 窗格中,展开树视图,然后单击 Application Pools。

  2. 在“应用程序池”列表中,右键单击要禁用内存限制的应用程序池,然后单击“回收”。

  3. 在“编辑应用程序池回收设置”对话框的“基于内存的最大值”部分中,清除“虚拟内存使用量(以 KB 为单位)和专用内存使用量(以 KB 为单位)”复选框,然后单击“下一步”。

  4. 在“将事件回收到日志”对话框中,单击“完成”。

问候,贾尔帕。


推荐阅读