107
I've recently upgraded to VS 2010 and am playing around with LINQ to Dataset. I have a strong typed dataset for Authorization that is in HttpCache of an ASP.NET WebApplication.
So i wanted to know what actually is the fastest way to check if a user is authorized to do something. Here is my datamodel and some other informations if somebody is interested.
I have checked 3 ways:
- direct database
- LINQ query with Where conditions as "Join" - Syntax
- LINQ query with Join - Syntax
These are the results with 1000 calls on each function:
1.Iteration:
- 4,2841519 sec.
- 115,7796925 sec.
- 2,024749 sec.
2.Iteration:
- 3,1954857 sec.
- 84,97047 sec.
- 1,5783397 sec.
3.Iteration:
- 2,7922143 sec.
- 97,8713267 sec.
- 1,8432163 sec.
Average:
- Database: 3,4239506333 sec.
- Where: 99,5404964 sec.
- Join: 1,815435 sec.
Why is the Join-version so much faster than the where-syntax which makes it useless although as a LINQ newbie it seems to be the most legible. Or have i missed something in my queries?
Here are the LINQ queries, i skip the database:
Where:
Public Function hasAccessDS_Where(ByVal accessRule As String) As Boolean
Dim userID As Guid = DirectCast(Membership.GetUser.ProviderUserKey, Guid)
Dim query = From accRule In Authorization.dsAuth.aspnet_AccessRule, _
roleAccRule In Authorization.dsAuth.aspnet_RoleAccessRule, _
role In Authorization.dsAuth.aspnet_Roles, _
userRole In Authorization.dsAuth.aspnet_Use