DataGridView.RowCount setting is slow

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Andrus

    DataGridView.RowCount setting is slow

    I have DataGridView in virtual mode containing 3500 rows.
    In code below, assigning to RowCount value to 3500 takes 8 seconds.
    CPU usage goes high at this time.
    Stepping by F11 into user code shows few celltemplate property getters and
    combobox/datecombo constructor calls without database access which does not
    take a lot of time.

    Debug output (below) shows lot of messages Stepping over non-user code.
    Running in release mode from Windows this line speed is same (slow).

    How to speed up grid creation ?

    Using C# Express 2008 3.5 SP1 in Vista.

    Andrus.

    class Grid : System.Windows. Forms.DataGridV iew {

    internal void SetDataRetrieve r(DataRetriever <TEntitydataRet riever)
    { ......
    SuspendLayout() ;
    Enabled = false;
    int cnt = DataRetriever.R owCount + (ReadOnly ? 0 : 1);
    // next line takes 8 seconds:
    RowCount = cnt;
    Enabled = true;
    ResumeLayout();
    }

    protected override void
    OnCellValueNeed ed(DataGridView CellValueEventA rgs e)
    {
    if (!Enabled)
    return;
    ...
    }

    protected override void OnRowEnter(Data GridViewCellEve ntArgs e)
    {
    if (!Enabled)
    return;
    ...
    }
    }

    Debug output window contains:

    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.RowCount.s et'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.RowTemplat eClone.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.Add'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Control. Enabled.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.OnRowEnter '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetCurrent CellAddressCore '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetAndSele ctCurrentCellAd dress'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.this[int].get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetSelecte dCellCore'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetSelecte dElementCore'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.ClearSelec tion'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetAndSele ctCurrentCellAd dress'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.OnRowColle ctionChanged_Po stNotification'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.InsertCopies Private'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.Add'

  • Andrus

    #2
    Re: DataGridView.Ro wCount setting is slow

    If Rowcount is set to 1, grid opens a much faster.
    Any idea why rowcount setting affects to grid creation speed ?

    Andrus.

    "Andrus" <kobruleht2@hot .eewrote in message
    news:%2309Mx%23 7NJHA.4832@TK2M SFTNGP06.phx.gb l...
    >I have DataGridView in virtual mode containing 3500 rows.
    In code below, assigning to RowCount value to 3500 takes 8 seconds.
    CPU usage goes high at this time.
    Stepping by F11 into user code shows few celltemplate property getters and
    combobox/datecombo constructor calls without database access which does
    not take a lot of time.
    >
    Debug output (below) shows lot of messages Stepping over non-user code.
    Running in release mode from Windows this line speed is same (slow).
    >
    How to speed up grid creation ?
    >
    Using C# Express 2008 3.5 SP1 in Vista.
    >
    Andrus.
    >
    class Grid : System.Windows. Forms.DataGridV iew {
    >
    internal void SetDataRetrieve r(DataRetriever <TEntity>
    dataRetriever)
    { ......
    SuspendLayout() ;
    Enabled = false;
    int cnt = DataRetriever.R owCount + (ReadOnly ? 0 : 1);
    // next line takes 8 seconds:
    RowCount = cnt;
    Enabled = true;
    ResumeLayout();
    }
    >
    protected override void
    OnCellValueNeed ed(DataGridView CellValueEventA rgs e)
    {
    if (!Enabled)
    return;
    ...
    }
    >
    protected override void OnRowEnter(Data GridViewCellEve ntArgs e)
    {
    if (!Enabled)
    return;
    ...
    }
    }
    >
    Debug output window contains:
    >
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.RowCount.s et'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewColumn.Cell Template.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.CompleteCe llsCollection'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.RowTemplat eClone.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.Add'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Control. Enabled.get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.OnRowEnter '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetCurrent CellAddressCore '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetAndSele ctCurrentCellAd dress'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .DataGridViewTe xtBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.Property Store.GetObject '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewCell.Style. get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewTextBoxCell .Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DataGridViewC omboBoxCell'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.FlatStyle.set '
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.DisplayStyleF orCurrentCellOn ly.set'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewComboBoxCel l.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.CloneCe lls'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRow.Clone'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.this[int].get'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetSelecte dCellCore'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetSelecte dElementCore'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.ClearSelec tion'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.SetAndSele ctCurrentCellAd dress'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid View.OnRowColle ctionChanged_Po stNotification'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.InsertCopies Private'
    Step into: Stepping over non-user code
    'System.Windows .Forms.DataGrid ViewRowCollecti on.Add'
    >

    Comment

    • Andrus

      #3
      Re: DataGridView.Ro wCount setting is slow

      If Rowcount is set to 1, grid opens a much faster.
      Any idea why rowcount setting affects to grid creation speed ?
      I created testcase for it.
      Line
      m_Grid.RowCount = 1000000;

      takes 8 seconds.
      How to speed it up ?

      Andrus.


      using System;
      using System.Windows. Forms;
      using System.Collecti ons.Generic;

      class test
      {
      [STAThreadAttrib ute()]
      public static void Main()
      {
      Application.Run (new VirtualModeForm ());
      }
      }

      class VirtualModeForm : Form
      {
      private List<DataObject m_Data = new List<DataObject >();
      private List<boolm_Visi ted = new List<bool>();
      DataGridView m_Grid = new DataGridView();
      public VirtualModeForm ()
      {
      Controls.Add(m_ Grid);
      m_Grid.CellValu eNeeded += OnCellValueNeed ed;
      InitData();
      InitGrid();
      }

      private void InitData()
      {
      for (int i = 0; i < 1000001 + 1; i++)
      {
      m_Visited.Add(f alse);
      DataObject obj = new DataObject();
      obj.Id = i;
      obj.Val = 2 * i;
      m_Data.Add(obj) ;
      }
      }

      private void InitGrid()
      {
      m_Grid.Dock = DockStyle.Fill;
      m_Grid.AutoResi zeColumns(DataG ridViewAutoSize ColumnsMode.Dis playedCellsExce ptHeader);
      m_Grid.VirtualM ode = true;
      m_Grid.ReadOnly = true;
      m_Grid.ColumnCo unt = 108;
      // this line causes 8 seconds delay. how to fix.
      m_Grid.RowCount = 1000000;
      }

      private void OnCellValueNeed ed(object sender,
      DataGridViewCel lValueEventArgs e)
      {

      m_Visited[e.RowIndex] = true;
      if (e.ColumnIndex == 0)
      {
      e.Value = m_Data[e.RowIndex].Id;
      }
      else if (e.ColumnIndex == 1)
      {
      e.Value = m_Data[e.RowIndex].Val;
      }
      else if (e.ColumnIndex == 2)
      {

      Random rand = new Random();
      e.Value = rand.Next();
      }
      }
      }

      public class DataObject
      {
      private int m_Id;
      private int m_Val;

      public int Val
      {
      get { return m_Val; }
      set { m_Val = value; }
      }

      public int Id
      {
      get { return m_Id; }
      set { m_Id = value; }
      }

      public int Id1 { get; set; }
      public int Id2 { get; set; }
      public int Id3 { get; set; }
      public int Id4 { get; set; }
      public int Id5 { get; set; }
      public int Id6 { get; set; }
      public int Id7 { get; set; }
      public int Id8 { get; set; }
      public int Id9 { get; set; }
      public int Id10 { get; set; }
      public int Id11 { get; set; }
      public int Id12 { get; set; }
      public int Id13 { get; set; }
      public int Id14 { get; set; }
      public int Id15 { get; set; }
      public int Id16 { get; set; }
      public int Id17 { get; set; }
      public int Id18 { get; set; }
      public int Id19 { get; set; }
      public int Id20 { get; set; }
      public int Id21 { get; set; }
      public int Id22 { get; set; }
      public int Id23 { get; set; }
      public int Id24 { get; set; }
      public int Id25 { get; set; }
      public int Id26 { get; set; }
      public int Id27 { get; set; }
      public int Id28 { get; set; }
      public int Id29 { get; set; }
      public int Id31 { get; set; }
      public int Id32 { get; set; }
      public int Id33 { get; set; }
      public int Id34 { get; set; }
      public int Id35 { get; set; }
      public int Id36 { get; set; }
      public int Id37 { get; set; }
      public int Id38 { get; set; }
      public int Id39 { get; set; }
      public int Id310 { get; set; }
      public int Id311 { get; set; }
      public int Id312 { get; set; }
      public int Id313 { get; set; }
      public int Id314 { get; set; }
      public int Id315 { get; set; }
      public int Id316 { get; set; }
      public int Id317 { get; set; }
      public int Id318 { get; set; }
      public int Id319 { get; set; }
      public int Id320 { get; set; }
      public int Id321 { get; set; }
      public int Id322 { get; set; }
      public int Id323 { get; set; }
      public int Id324 { get; set; }
      public int Id325 { get; set; }
      public int Id326 { get; set; }
      public int Id327 { get; set; }
      public int Id328 { get; set; }
      public int Id329 { get; set; }


      public int Id401 { get; set; }
      public int Id402 { get; set; }
      public int Id403 { get; set; }
      public int Id404 { get; set; }
      public int Id405 { get; set; }
      public int Id406 { get; set; }
      public int Id407 { get; set; }
      public int Id408 { get; set; }
      public int Id409 { get; set; }
      public int Id4010 { get; set; }
      public int Id4011 { get; set; }
      public int Id4012 { get; set; }
      public int Id4013 { get; set; }
      public int Id4014 { get; set; }
      public int Id4015 { get; set; }
      public int Id4016 { get; set; }
      public int Id4017 { get; set; }
      public int Id4018 { get; set; }
      public int Id4019 { get; set; }
      public int Id4020 { get; set; }
      public int Id4021 { get; set; }
      public int Id4022 { get; set; }
      public int Id4023 { get; set; }
      public int Id4024 { get; set; }
      public int Id4025 { get; set; }
      public int Id4026 { get; set; }
      public int Id4027 { get; set; }
      public int Id4028 { get; set; }
      public int Id4029 { get; set; }
      public int Id4031 { get; set; }
      public int Id4032 { get; set; }
      public int Id4033 { get; set; }
      public int Id4034 { get; set; }
      public int Id4035 { get; set; }
      public int Id4036 { get; set; }
      public int Id4037 { get; set; }
      public int Id4038 { get; set; }
      public int Id4039 { get; set; }
      public int Id40310 { get; set; }
      public int Id40311 { get; set; }
      public int Id40312 { get; set; }
      public int Id40313 { get; set; }
      public int Id40314 { get; set; }
      public int Id40315 { get; set; }
      public int Id40316 { get; set; }
      public int Id40317 { get; set; }
      public int Id40318 { get; set; }
      public int Id40319 { get; set; }
      public int Id40320 { get; set; }
      public int Id40321 { get; set; }
      public int Id40322 { get; set; }
      public int Id40323 { get; set; }
      public int Id40324 { get; set; }
      public int Id40325 { get; set; }
      public int Id40326 { get; set; }
      public int Id40327 { get; set; }
      public int Id40328 { get; set; }
      public int Id40329 { get; set; }
      }

      Comment

      • Andrus

        #4
        Re: DataGridView.Ro wCount setting is slow

        Here is simpler testcase to reproduce 8 sec delay:

        using System;
        using System.Windows. Forms;

        class Test
        {
        public static void Main()
        {
        Application.Run (new VirtualModeForm ());
        }
        }

        class VirtualModeForm : Form
        {
        DataGridView grid = new DataGridView();
        public VirtualModeForm ()
        {
        Controls.Add(gr id);
        grid.VirtualMod e = true;
        grid.ColumnCoun t = 108;
        // this line causes 8 seconds delay. how to fix.
        grid.RowCount = 1000000;
        }
        }

        Andrus.

        Comment

        Working...