VB 9.0 Code for the LINQ to SQL Performance Test Harness
Copy the following code to your project with controls named as shown below.

Option Explicit On
Option Strict On
Option Infer On

Imports System
Imports System.Linq
Imports System.Data
Imports System.Data.Linq
Imports System.Data.SqlClient
Imports System.Text
Imports System.IO

Public Class LINQtoSQLPerf
 Private Sub btnLINQtoSQL_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles btnLINQtoSQL.Click
 Dim Swatch As New Stopwatch
 Dim lngTotal As Long = 0
 Dim intCount As Integer = 1
 Dim sbLog As New StringBuilder
 Dim swLog As New StringWriter(sbLog)

 Using dcOrders = New NwindOrdersDataContext
 'Neither of the following deliver a significant performance gain
 'dcOrders.ObjectTrackingEnabled = False
 'dcOrders.DeferredLoadingEnabled = False
 txtLINQ.Text = ""
 txtCheckLINQ.Text = ""
 Application.DoEvents()

 Dim Query = From o In dcOrders.Orders _
 Select o.OrderID, o.CustomerID, o.EmployeeID, o.ShippedDate

 Swatch.Start()
 For intCount = 1 To 500
 If intCount = 1 Then
 'Get one log
 dcOrders.Log = swLog
 Else
 dcOrders.Log = Nothing
 End If

 For Each o In Query
 'Only the checksum is accumulated because LINQ to SQL
 'creates the collection
 lngTotal += o.OrderID
 Next

 If intCount = 1 Then
 'Write the log
 txtSQL.Text = sbLog.ToString
 Application.DoEvents()
 End If
 Next intCount
 Swatch.Stop()
 txtLINQ.Text = Format(Swatch.ElapsedMilliseconds / 1000, "#,##0.000")
 txtCheckLINQ.Text = Format(lngTotal, "#,##0")
 End Using
 End Sub

 Private Sub btnSqlDataReader_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles btnSqlDataReader.Click
 Dim Swatch As New Stopwatch
 Dim lngTotal As Long = 0
 Dim intCount As Integer = 0
 txtSqlDR.Text = ""
 txtCheckSDR.Text = ""
 Application.DoEvents()

 Using cnnNwind As New SqlConnection(My.Settings.NorthwindConnectionString)
 Dim cmdOrders As SqlCommand = cnnNwind.CreateCommand
 cmdOrders.CommandText = _
 "SELECT OrderID, CustomerID, EmployeeID, ShippedDate FROM Orders"
 cmdOrders.CommandType = CommandType.Text
 txtSQL.Text = cmdOrders.CommandText
 Application.DoEvents()
 cnnNwind.Open()
 Swatch.Start()
 For intCount = 1 To 500
 Dim sdr As SqlDataReader = cmdOrders.ExecuteReader
 'A collection emulates LINQ to SQL IEnumerable(Of Header)
 Dim Orders As New List(Of Header)
 While sdr.Read
 Dim o As New Header()
 o.OrderID = sdr.GetInt32(0)
 o.CustomerID = sdr.GetString(1)
 If sdr.IsDBNull(2) Then
 o.EmployeeID = Nothing
 Else
 o.EmployeeID = sdr.GetInt32(2)
 End If
 If sdr.IsDBNull(3) Then
 o.ShippedDate = Nothing
 Else
 o.ShippedDate = sdr.GetDateTime(3)
 End If
 lngTotal += o.OrderID
 Orders.Add(o)
 End While
 sdr.Close()
 Orders = Nothing
 Next intCount
 Swatch.Stop()
 txtSqlDR.Text = Format(Swatch.ElapsedMilliseconds / 1000, "#,##0.000")
 txtCheckSDR.Text = Format(lngTotal, "#,##0")
 cnnNwind.Close()
 End Using
 End Sub
End Class

Public Class Header
 Public OrderID As Integer
 Public CustomerID As String
 Public EmployeeID As Nullable(Of Integer)
 Public ShippedDate As Nullable(Of DateTime)
End Class