![]() |
Platforms, Frameworks & Libraries »
.NET Framework »
General
Beginner
License: The Code Project Open License (CPOL)
Performance comparisons LinQ to SQL,ADO,C#By KshitijPandeyTo compare existing approaches of accessing data (arrays,tables etc) with the new ones release with c#3.0 and LinQ. |
C# (C# 3.0), .NET (.NET 3.5), LINQ, Architect, Dev, Design
|
||||||||
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
Most you like me have been watching the release of VS 2008 from its beta versions. From the perspective of this article Microsoft added generics, query operators and LinQ support. I was always wandering why LinQ was added when the world has been comfortable with
· Performance of reading data from SQL Server 2005 using ADO.net and LinQ using a Stored procedure
· Performance of reading data from SQL Server 2005 using ADO.net and LinQ by directly executing SQL statements.
· Performance of reading and manipulating xml files using existing c# approaches vs. LinQ approach
· Performance of accessing list of objects ( arrays in this article ) using traditional programming , LinQ and C# 3.0
· Performance of filling a dataset using ADO and LinQ and then performing a filer operation and then summing up something after filtering.
Before we jump into this article , I want to point out that there are many ways to accomplish a task programmatically, An effort has been made to write the best code possible , there are extra lines introduced so that to be fare in writing function for LinQ and ADO. As the code will be a shareware you are free to improve and build on it. The basic unit of measurement is counting ticks which have been used in this article ( System.StopWatch). Each piece of performance code has been run 500 times so as to get best performance values. Where ever possible I have added code to dispose/ garbage collect objects. All the code explained in this article is available in for download. The code is commented wherever required. Finally all the performance values are added to an Excel file Graphs.xls and visually shown by excel graphs.
Logic for running the function 500 times is given below
The configuration used for getting the current performance data is given below
If you are not familiar with LinQ, new features of C# 3.0 please read the following urls
Ado.net does not need any introduction!
Function used for
Function used for
Function used for
Function used for
Function used for LinQ part is LinQObjects1 (), for the traditional c# part is csharpObjects1 () and for the c# 3.0 part is LinQObjects2 () in RetriveUsingLinQ.sln.
All the functions first create an array of integers, and then crate a second array of only even numbers with their squares. The last step in the functions is to add all the values in the resultant subset.
Function used for LinQ part is LinQQueryDataset (), and that for the
I have referenced the median value rather then the mean to help reduce the effect of out-liars in the graph as in a Windows operation system there are always more processes running and spikes in the graph does not necessarily means a fault of the code.
And there is a big difference between mean values. I think that in the LinQ implementation the line where we create an object of DataRow and then add to the table is the place where performance is hitting.
table.LoadDataRow(new Object[] { tempRec.CustomerID, tempRec.TerritoryID, tempRec.AccountNumber, tempRec.CustomerType, tempRec.rowguid, tempRec.ModifiedDate}, true);
So my conclusion is that LinQ is not the overall winner (as expected!). While insert operations as better in LinQ; the read operation are great in
For further improvement we should try and do bulky insert operations and also reads of different kind (like integer read, string read, block data read and substring reads). Again it is hard to draw conclusions based on the limited number of scenarios I have covered. There is scope of improvement in each scenario, but since I have timed all the operations, this will give us better insights when we design or architect next time.
|
|
LinQInsert |
|||
|
Mean |
102445.4 |
Mean |
40941.11 |
|
|
Median |
97645 |
Median |
39247 |
|
|
ADOInsertDirect |
LinQInsertDirect |
|||
|
Mean |
101625.8 |
Mean |
42324.78 |
|
|
Median |
96991 |
Median |
37634 |
|
|
ADORead |
LinQRead |
|||
|
Mean |
7162452 |
Mean |
14000818 |
|
|
Median |
7097164 |
Median |
13825471 |
|
|
csharpXMLReading |
LinQXmlRead |
|||
|
Mean |
108391.1 |
Mean |
98842.27 |
|
|
Median |
104622 |
Median |
92318 |
|
|
csharpObjects1 |
LinQObjects1 |
|||
|
Mean |
461.6407 |
Mean |
2965.475 |
|
|
Median |
402 |
Median |
2340 |
|
|
LinQObjects2 |
||||
|
Mean |
0 |
|||
|
Median |
0 |
|||
|
|
LinQ DataSet |
|||
|
Mean |
19159168 |
Mean |
24760066 |
|
|
Median |
19241882 |
Median |
24597140 |
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 25 May 2008 Editor: |
Copyright 2008 by KshitijPandey Everything else Copyright © CodeProject, 1999-2009 Web18 | Advertise on the Code Project |