C#,DataGridViewコントロールの表示効率を向上させるにはどうすればいいですか?一度に100万件の記録を管理するには、どうすればカードを使わないことができますか?仮想モードの問題だけではありません.


C#,DataGridViewコントロールの表示効率を向上させるにはどうすればいいですか?一度に100万件の記録を管理するには、どうすればカードを使わないことができますか?仮想モードの問題だけではありません.
(1)virtualmodeを採用し、datagridview 1を使用しない.datasource = dt
仮想モードの使用方法については、「https://blog.csdn.net/qq_30122639/article/details/53739607およびhttps://bbs.csdn.net/topics/390948328?list=lz
2つのステップに分けられます.
1)Accdbをdatagridviewにロードする関数
public void LoadAccdb2Datagridview_Parent_VirtualMode_is_True(string accdbfilenameOpened_, string needTableName_, string resultTableName_, string password, bool IsShowAllGroundPtsDataOrOnlyCentralPts = false)
{
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();  //          ;
            //       ;
            this.datatable_1 = new System.Data.DataTable();
            this.datatable_2 = new System.Data.DataTable();
            this.datatable_1 = MdbProcess.LoadAccdbTable2DataTable(accdbfilenameOpened_, needTableName_, password);
            this.datatable_2 = MdbProcess.LoadAccdbTable2DataTable_filter(accdbfilenameOpened_, resultTableName_, password, IsShowAllGroundPtsDataOrOnlyCentralPts);
            watch.Stop();  //    
            TimeSpan timespan = watch.Elapsed;  //              
            System.Diagnostics.Debug.WriteLine("         : " + timespan.TotalMilliseconds + "  ," + timespan.TotalSeconds + " ");  //    

            //////////////////////////////////////////////////////////////////////////

            //    dataGridView   ;
            if (this.dataGridView1.Columns.Count == 0)
            {
                foreach (System.Data.DataColumn column in this.datatable_1.Columns)
                {
                    this.dataGridView1.Columns.Add(column.ColumnName, column.ColumnName);
                }
            }
            if (this.dataGridView2.Columns.Count == 0)
            {
                foreach (System.Data.DataColumn column in this.datatable_2.Columns)
                {
                    this.dataGridView2.Columns.Add(column.ColumnName, column.ColumnName);
                }
            }

//    

            this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige;
            this.dataGridView2.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Beige;

//  VirtualMode true 
            if (this.dataGridView1.VirtualMode == false || this.dataGridView2.VirtualMode == false)
            {
                this.dataGridView1.VirtualMode = true;
                this.dataGridView2.VirtualMode = true;
            }

//  datatable  dataGridView     ,  ,dataGridView AllowUsertoAddRows    False
            this.dataGridView1.RowCount = this.datatable_1.Rows.Count ;       // +1 ;
            this.dataGridView2.RowCount = this.datatable_2.Rows.Count ;       // +1 ;
}

2)dataGridView1_CellValue Needed()関数
private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            int colCount = this.dataGridView1.ColumnCount;
            int colCount2 = this.dataGridView1.Columns.Count;

            if (e.RowIndex == this.dataGridView1.RowCount)
            {
                return;
            }
            else
            {
                //string colName = this.dataGridView1.Columns[e.ColumnIndex].Name;
                //e.Value = this.datatable_1.Rows[e.RowIndex][colName].ToString();
                 
                //  
                e.Value = this.datatable_1.Rows[e.RowIndex][e.ColumnIndex].ToString();
            }

        }

 
(2)datagridview 1のAutoSizeColumnsModeとAutoSizeRowsModeの両方のプロパティをNoneに設定する
C#のdatagridview表示が遅すぎる理由の1つ
Datagridviewの動作性能が遅いという問題
データソースをdatagridviewでバインドします.最初の列はcheckboxで、選択したかどうかを示すために使用されます.光句読点がこの行に着いたときに自動的にこのcheckboxを選択し、全選択と全選択を解除する機能を提供します.これは簡単な機能ですが、マウスが中行になったときに自動的にcheckboxをチェックし、checkboxに値を与える速度がかなり遅くなります.全選択と全選択をキャンセルするのは言うまでもありません.数十行は遅くて、百行以上の千行のデータは言うまでもありません.30分もしないうちに循環したくない.
最後に問題点を見つけて、DatagridviewのAutoSizeColumnsMode!
この属性の値をAllcells****に設定ことはできません.そうしないと、datagridviewデータの操作が非常に遅くなります.displayedcells**に置き換えることも考えられ、同じ視覚効果があり、速度が速い.
残念ながらdatagridviewの内部にデバッグする方法が分からないので、いったい、このdatagridviewはいったい何をしたのか見に行きたいです.
この文章を検索した友达に注意してほしい.作者:三断笛の出所:CSDN原文:https://blog.csdn.net/xxyj6450/article/details/9051011本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!
(3)RowHeadersWidthSizeModeとColumnHeadersHeightSizeModeのプロパティをDisableResizing(ユーザーは列ヘッダーの幅をマウスで調整できない)/EnableResizing(ユーザーは列ヘッダーの幅をマウスで調整できる)、行番号を表示する場合はRowHeadersWidthSizeModeをAutoSizeToFirstHeaderに設定する
https://blog.csdn.net/weixin_34116110/article/details/85448837
DataGridViewのパフォーマンスに重大な影響を与える2つのプロパティ
C#DataGridView行番号を表示する3つの方法
https://blog.csdn.net/chenpeng0118/article/details/7402199