Clarity, Technology, and Solving Problems | PracticeThis.com
WP7 App with Key Windows Azure resources – Slides, Videos, How-To’s, and T-shooting – for quick consumption on the go.
We used System.Diagnostics.Trace to report execution times.
UseCustomCollection.aspx.cs
1: System.Diagnostics.Trace.WriteLine("1. STARTING");
2:
3: DataGrid datagrid = SampleServices.GenerateDynamicDataGridControl();
4: this.Controls.Add(datagrid);
5:
6: System.Diagnostics.Trace.WriteLine("2. GRID CREATED AND ADDED TO PAGE");
7:
8: MyCollection myCollection = (MyCollection)SampleServices.GenerateCollection(200);
9:
10: System.Diagnostics.Trace.WriteLine("3. CUSTOM COLLECTION CREATED");
11:
12: datagrid.DataSource = myCollection;
13: datagrid.DataBind();
14:
15: System.Diagnostics.Trace.WriteLine("5. DONE");
UseDataTable.aspx.cs
12: DataTable datatable = SampleServices.ConvertCollectionTableIntoDataTalbe(myCollection);
13:
14: System.Diagnostics.Trace.WriteLine("4. CUSTOM COLLECTION CONVERTED INTO DATATABLE");
15:
16: datagrid.DataSource = datatable;
17: datagrid.DataBind();
18:
19: System.Diagnostics.Trace.WriteLine("5. DONE");
Note, that UseCustomCollection.aspx.cs misses step “4. CUSTOM COLLECTION CONVERTED INTO DATATABLE”.
We used DebugView to collect reported execution times.
Applying simple mathematics we can see that converting Collection to Datatable takes 0.00081015 seconds. This is the gain we get when skipping this step in UseCustomCollection.aspx.cs.
Now lets examine DataBind() in both cases:
I know it is not a huge improvement for binding datatable vs. collection, but the tests we conducted always showed this gap. That is why eliminating the type transformation from collection to datatable that included enumeration and looping did not really help and we ended up with similar results of ~65% CPU utilization:
Binding custom collection is expensive performance wise since internally it uses reflection and reflection is expensive thing to do. Looping is expensive performance wise too but it is cheaper than reflection.