создать настольное приложение для загрузки 1 миллиона данных в сетку - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть настольное приложение, которое должно считывать данные из Excel в формате xlsx и затем отображать их.Моя программа работает нормально для небольшой записи.Но при попытке загрузить файл размером 6 МБ загрузка становится очень медленной, и приложение зависает до тех пор, пока в него не будут загружены все данные.Как избежать этой проблемы?

using System;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices; 

namespace WindowsFormsApplication7
{
 public partial class Browse : Form
 {
  public Browse()
  {
    InitializeComponent();
   }
  private void buttonUpload_Click(object sender, EventArgs e)
  {


string fname = "";
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Title = "Excel File Dialog";
        openFileDialog.InitialDirectory = @"c:\";
        openFileDialog.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
        openFileDialog.FilterIndex = 2;
        openFileDialog.RestoreDirectory = true;
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            fname = openFileDialog.FileName;
            textBoxPath.Text = openFileDialog.FileName;
        }


        Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fname);
        Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
        Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;

        int rowCount = xlRange.Rows.Count;
        int colCount = xlRange.Columns.Count;



        dgvDisplay.ColumnCount = colCount;//dgvDisplay:ID for data gridview to display the excel file
        dgvDisplay.RowCount = rowCount;

        for (int i = 1; i <= rowCount; i++)
        {
            for (int j = 1; j <= colCount; j++)
            {


                //write the value to the Grid  


                if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
                {
                    dgvDisplay.Rows[i - 1].Cells[j - 1].Value = xlRange.Cells[i, j].Value2.ToString();
                }
                // Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");  


            }
        }


        GC.Collect();
        GC.WaitForPendingFinalizers();


        Marshal.ReleaseComObject(xlRange);
        Marshal.ReleaseComObject(xlWorksheet);


        xlWorkbook.Close();
        Marshal.ReleaseComObject(xlWorkbook);


        xlApp.Quit();
        Marshal.ReleaseComObject(xlApp);



    }




}

}

Приложение не должно зависать при загрузке, т. Е. Кнопки прокрутки, креста и максимизации должны работать во время загрузки страницы Excel в виде сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...