If Rowcount is set to 1, grid opens a much faster.
Andrus.
news:%2309Mx%237NJHA.4832@TK2MSFTNGP06.phx.gbl...
Quote:
>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<TEntity>
dataRetriever)
{ ......
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'
>