Hi,
I was wondering if the list view will improve its non-binding performance.
Our application uses the .NET list view and I'm seeing how well we can move to the telerik controls. So far the performance is terrible. When I moved our tree view to telerik, the performance was great, so this was a bit disappointing.
In my example below, the time for button1 to complete loading the telerik list view takes 18678ms, whereas the traditional Microsoft list view in button2 is 46ms.
When I add in some threading, the telerik list view needs about 65ms to draw before the form remains interactive, and takes 17765ms to add the list items. whereas the Microsoft list view needs 1ms per item and takes 136ms in total.
Will Telerik be improving this or should I find another way? I can't remember why I didn't try data binding, but I'll spend the afternoon reinvestigating it.
My experience with .Net is 7 years. My experience with Rad is about 2 weeks.
I was wondering if the list view will improve its non-binding performance.
Our application uses the .NET list view and I'm seeing how well we can move to the telerik controls. So far the performance is terrible. When I moved our tree view to telerik, the performance was great, so this was a bit disappointing.
In my example below, the time for button1 to complete loading the telerik list view takes 18678ms, whereas the traditional Microsoft list view in button2 is 46ms.
When I add in some threading, the telerik list view needs about 65ms to draw before the form remains interactive, and takes 17765ms to add the list items. whereas the Microsoft list view needs 1ms per item and takes 136ms in total.
Will Telerik be improving this or should I find another way? I can't remember why I didn't try data binding, but I'll spend the afternoon reinvestigating it.
Imports
Telerik.WinControls.UI
Public
Class
Form3
Inherits
System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected
Overrides
Sub
Dispose(
ByVal
disposing
As
Boolean
)
Try
If
disposing
AndAlso
components IsNot
Nothing
Then
components.Dispose()
End
If
Finally
MyBase
.Dispose(disposing)
End
Try
End
Sub
'Required by the Windows Form Designer
Private
components
As
System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private
Sub
InitializeComponent()
Dim
ListViewDetailColumn1
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 0"
,
"Column 0"
)
Dim
ListViewDetailColumn2
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 1"
,
"Column 1"
)
Dim
ListViewDetailColumn3
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 2"
,
"Column 2"
)
Dim
ListViewDetailColumn4
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 3"
,
"Column 3"
)
Dim
ListViewDetailColumn5
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 4"
,
"Column 4"
)
Dim
ListViewDetailColumn6
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 5"
,
"Column 5"
)
Dim
ListViewDetailColumn7
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 6"
,
"Column 6"
)
Dim
ListViewDetailColumn8
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 7"
,
"Column 7"
)
Dim
ListViewDetailColumn9
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 8"
,
"Column 8"
)
Dim
ListViewDetailColumn10
As
Telerik.WinControls.UI.ListViewDetailColumn =
New
Telerik.WinControls.UI.ListViewDetailColumn(
"Column 9"
,
"Column 9"
)
Me
.ListView1 =
New
Telerik.WinControls.UI.RadListView()
Me
.ListView2 =
New
System.Windows.Forms.ListView()
Me
.RadButton1 =
New
Telerik.WinControls.UI.RadButton()
Me
.RadButton2 =
New
Telerik.WinControls.UI.RadButton()
Me
.ColumnHeader1 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader2 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader3 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader4 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader5 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader6 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader7 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader8 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader9 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.ColumnHeader10 =
CType
(
New
System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me
.RadButton3 =
New
Telerik.WinControls.UI.RadButton()
Me
.RadButton4 =
New
Telerik.WinControls.UI.RadButton()
Me
.RadTextBox1 =
New
Telerik.WinControls.UI.RadTextBox()
Me
.RadTextBox2 =
New
Telerik.WinControls.UI.RadTextBox()
CType
(
Me
.ListView1, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadButton1, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadButton2, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadButton3, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadButton4, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadTextBox1, System.ComponentModel.ISupportInitialize).BeginInit()
CType
(
Me
.RadTextBox2, System.ComponentModel.ISupportInitialize).BeginInit()
Me
.SuspendLayout()
'
'ListView1
'
Me
.ListView1.Anchor =
CType
((((System.Windows.Forms.AnchorStyles.Top
Or
System.Windows.Forms.AnchorStyles.Bottom) _
Or
System.Windows.Forms.AnchorStyles.Left) _
Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
ListViewDetailColumn1.HeaderText =
"Column 0"
ListViewDetailColumn2.HeaderText =
"Column 1"
ListViewDetailColumn3.HeaderText =
"Column 2"
ListViewDetailColumn4.HeaderText =
"Column 3"
ListViewDetailColumn5.HeaderText =
"Column 4"
ListViewDetailColumn6.HeaderText =
"Column 5"
ListViewDetailColumn7.HeaderText =
"Column 6"
ListViewDetailColumn8.HeaderText =
"Column 7"
ListViewDetailColumn9.HeaderText =
"Column 8"
ListViewDetailColumn10.HeaderText =
"Column 9"
Me
.ListView1.Columns.AddRange(
New
Telerik.WinControls.UI.ListViewDetailColumn() {ListViewDetailColumn1, ListViewDetailColumn2, ListViewDetailColumn3, ListViewDetailColumn4, ListViewDetailColumn5, ListViewDetailColumn6, ListViewDetailColumn7, ListViewDetailColumn8, ListViewDetailColumn9, ListViewDetailColumn10})
Me
.ListView1.GroupItemSize =
New
System.Drawing.Size(200, 20)
Me
.ListView1.ItemSize =
New
System.Drawing.Size(200, 20)
Me
.ListView1.ItemSpacing = -1
Me
.ListView1.Location =
New
System.Drawing.Point(49, 67)
Me
.ListView1.Name =
"ListView1"
Me
.ListView1.Size =
New
System.Drawing.Size(782, 629)
Me
.ListView1.TabIndex = 1
Me
.ListView1.ViewType = Telerik.WinControls.UI.ListViewType.DetailsView
'
'ListView2
'
Me
.ListView2.Columns.AddRange(
New
System.Windows.Forms.ColumnHeader() {
Me
.ColumnHeader1,
Me
.ColumnHeader2,
Me
.ColumnHeader3,
Me
.ColumnHeader4,
Me
.ColumnHeader5,
Me
.ColumnHeader6,
Me
.ColumnHeader7,
Me
.ColumnHeader8,
Me
.ColumnHeader9,
Me
.ColumnHeader10})
Me
.ListView2.Location =
New
System.Drawing.Point(49, 67)
Me
.ListView2.Name =
"ListView2"
Me
.ListView2.Size =
New
System.Drawing.Size(782, 629)
Me
.ListView2.TabIndex = 2
Me
.ListView2.UseCompatibleStateImageBehavior =
False
Me
.ListView2.View = System.Windows.Forms.View.Details
'
'RadButton1
'
Me
.RadButton1.Location =
New
System.Drawing.Point(49, 37)
Me
.RadButton1.Name =
"RadButton1"
Me
.RadButton1.Size =
New
System.Drawing.Size(130, 24)
Me
.RadButton1.TabIndex = 3
Me
.RadButton1.Text =
"RadButton1"
'
'RadButton2
'
Me
.RadButton2.Location =
New
System.Drawing.Point(185, 37)
Me
.RadButton2.Name =
"RadButton2"
Me
.RadButton2.Size =
New
System.Drawing.Size(130, 24)
Me
.RadButton2.TabIndex = 3
Me
.RadButton2.Text =
"RadButton2"
'
'RadButton3
'
Me
.RadButton3.Location =
New
System.Drawing.Point(353, 12)
Me
.RadButton3.Name =
"RadButton3"
Me
.RadButton3.Size =
New
System.Drawing.Size(130, 24)
Me
.RadButton3.TabIndex = 4
Me
.RadButton3.Text =
"RadButton3"
'
'RadButton4
'
Me
.RadButton4.Location =
New
System.Drawing.Point(489, 12)
Me
.RadButton4.Name =
"RadButton4"
Me
.RadButton4.Size =
New
System.Drawing.Size(130, 24)
Me
.RadButton4.TabIndex = 4
Me
.RadButton4.Text =
"RadButton4"
'
'RadTextBox1
'
Me
.RadTextBox1.Location =
New
System.Drawing.Point(353, 37)
Me
.RadTextBox1.Name =
"RadTextBox1"
Me
.RadTextBox1.Size =
New
System.Drawing.Size(100, 20)
Me
.RadTextBox1.TabIndex = 5
Me
.RadTextBox1.TabStop =
False
Me
.RadTextBox1.Text =
"65"
'
'RadTextBox2
'
Me
.RadTextBox2.Location =
New
System.Drawing.Point(489, 37)
Me
.RadTextBox2.Name =
"RadTextBox2"
Me
.RadTextBox2.Size =
New
System.Drawing.Size(100, 20)
Me
.RadTextBox2.TabIndex = 5
Me
.RadTextBox2.TabStop =
False
Me
.RadTextBox2.Text =
"1"
'
'Form3
'
Me
.AutoScaleDimensions =
New
System.Drawing.SizeF(6.0!, 13.0!)
Me
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me
.ClientSize =
New
System.Drawing.Size(880, 724)
Me
.Controls.Add(
Me
.RadTextBox2)
Me
.Controls.Add(
Me
.RadTextBox1)
Me
.Controls.Add(
Me
.RadButton4)
Me
.Controls.Add(
Me
.RadButton3)
Me
.Controls.Add(
Me
.RadButton2)
Me
.Controls.Add(
Me
.RadButton1)
Me
.Controls.Add(
Me
.ListView2)
Me
.Controls.Add(
Me
.ListView1)
Me
.Name =
"Form3"
Me
.Text =
"Form3"
CType
(
Me
.ListView1, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadButton1, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadButton2, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadButton3, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadButton4, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadTextBox1, System.ComponentModel.ISupportInitialize).EndInit()
CType
(
Me
.RadTextBox2, System.ComponentModel.ISupportInitialize).EndInit()
Me
.ResumeLayout(
False
)
Me
.PerformLayout()
End
Sub
Private
WithEvents
ListView1
As
Telerik.WinControls.UI.RadListView
Friend
WithEvents
ListView2
As
System.Windows.Forms.ListView
Friend
WithEvents
RadButton1
As
Telerik.WinControls.UI.RadButton
Friend
WithEvents
RadButton2
As
Telerik.WinControls.UI.RadButton
Friend
WithEvents
ColumnHeader1
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader2
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader3
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader4
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader5
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader6
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader7
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader8
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader9
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
ColumnHeader10
As
System.Windows.Forms.ColumnHeader
Friend
WithEvents
RadButton3
As
Telerik.WinControls.UI.RadButton
Friend
WithEvents
RadButton4
As
Telerik.WinControls.UI.RadButton
Friend
WithEvents
RadTextBox1
As
Telerik.WinControls.UI.RadTextBox
Friend
WithEvents
RadTextBox2
As
Telerik.WinControls.UI.RadTextBox
Dim
list
As
New
List(Of
String
())
Private
Sub
Form3_Load(sender
As
Object
, e
As
System.EventArgs)
Handles
Me
.Load
For
i = 0
To
300
list.Add({
"one "
+ i.ToString,
"two "
+ i.ToString,
"three "
+ i.ToString,
"four "
+ i.ToString,
"five "
+ i.ToString,
"six "
+ i.ToString,
"seven "
+ i.ToString,
"eight "
+ i.ToString,
"nine "
+ i.ToString,
"ten "
+ i.ToString})
Next
End
Sub
Private
Sub
RadButton1_Click(sender
As
System.
Object
, e
As
System.EventArgs)
Handles
RadButton1.Click
ListView1.BringToFront()
ListView1.Items.Clear()
time =
New
Stopwatch()
For
Each
i
In
list
Dim
li
As
New
ListViewDataItem(i(0), i.ToArray())
time.Start()
ListView1.Items.Add(li)
time.
Stop
()
Next
msg()
End
Sub
Private
Sub
RadButton2_Click(sender
As
System.
Object
, e
As
System.EventArgs)
Handles
RadButton2.Click
ListView2.BringToFront()
ListView2.Items.Clear()
time =
New
Stopwatch()
For
Each
i
In
list
Dim
li
As
New
ListViewItem(i(0))
li.SubItems.AddRange(i.Skip(1).ToArray())
time.Start()
ListView2.Items.Add(li)
time.
Stop
()
Next
msg()
End
Sub
Dim
time
As
Stopwatch
Private
Sub
RadButton3_Click(sender
As
System.
Object
, e
As
System.EventArgs)
Handles
RadButton3.Click
ListView1.BringToFront()
ListView1.Items.Clear()
Dim
wait =
CInt
(RadTextBox1.Text)
time =
New
Stopwatch()
Threading.Tasks.Task.Factory.StartNew(
Sub
()
Dim
last = list.Last()
For
Each
i
In
list
Dim
ii = i
Dim
li
As
New
ListViewDataItem(i(0), i.ToArray())
Threading.Thread.Sleep(wait)
Me
.BeginInvoke(
Sub
()
time.Start()
ListView1.Items.Add(li)
time.
Stop
()
If
ii
Is
last
Then
msg()
End
Sub
)
Next
End
Sub
)
End
Sub
Sub
msg()
MsgBox(
"Total is "
+ time.ElapsedMilliseconds.ToString)
End
Sub
Private
Sub
RadButton4_Click(sender
As
System.
Object
, e
As
System.EventArgs)
Handles
RadButton4.Click
ListView2.BringToFront()
ListView2.Items.Clear()
time =
New
Stopwatch()
Dim
wait =
CInt
(RadTextBox2.Text)
Threading.Tasks.Task.Factory.StartNew(
Sub
()
Dim
last = list.Last()
For
Each
i
In
list
Dim
ii = i
Dim
li
As
New
ListViewItem(i(0))
li.SubItems.AddRange(i.Skip(1).ToArray())
Threading.Thread.Sleep(wait)
Me
.BeginInvoke(
Sub
()
time.Start()
ListView2.Items.Add(li)
time.
Stop
()
If
ii
Is
last
Then
msg()
End
Sub
)
Next
End
Sub
)
End
Sub
End
Class
My experience with .Net is 7 years. My experience with Rad is about 2 weeks.
- OS version and applied service packs
Microsoft Windows Server 2003, Standard Edition, Service Pack 2
- Regional and language settings, if different from En-US
English (Australia)
- .NET version (.NET2, .NET3, .NET3.5)
.NET 4.0.30319 SP1Rel, Visual Studio 2010 Version 10.0.40219.1 SP1Rel
- Exact version of the Telerik product
Runtime Version v2.0.50727, Version 2011.2.11.831