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.DataGridView {
internal void SetDataRetriever(DataRetriever<TEntitydataRetrieve r)
{ ......
SuspendLayout();
Enabled = false;
int cnt = DataRetriever.RowCount + (ReadOnly ? 0 : 1);
// next line takes 8 seconds:
RowCount = cnt;
Enabled = true;
ResumeLayout();
}
protected override void
OnCellValueNeeded(DataGridViewCellValueEventArgs e)
{
if (!Enabled)
return;
...
}
protected override void OnRowEnter(DataGridViewCellEventArgs e)
{
if (!Enabled)
return;
...
}
}
Debug output window contains:
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowCount.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowTemplateClon e.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'
Step into: Stepping over non-user code
'System.Windows.Forms.Control.Enabled.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowEnter'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetCurrentCellA ddressCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.Clone'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.th is[int].get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedCell Core'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedElem entCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.ClearSelection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowCollection Changed_PostNotification'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.In sertCopiesPrivate'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'