La clase StopWatch mide el tiempo transcurrido para un intervalo, o el total de tiempo de varios intervalos. Mediante los métodos Star, Stop y la propiedad Elapsed se determina el valor de tiempo transcurrido. Mas información en MSDN (http://msdn.microsoft.com/es-es/library/system.diagnostics.stopwatch.aspx)
Para este ejemplo, voy a realizar una consulta con ADO.NET y LINQ TO SQL, la idea es medir el tiempo de de acceso a datos. La tabla se llama MODELOAVION la cual contiene 53,330 filas o modelos de aviones.

La siguiente interface contiene dos botones; uno para ADO.NET y el otro para LINQ TO SQL, un par de etiquetas para mostrar el tiempo transcurrido y un DataGridView para ver los datos:

El código para el botón ADO.NET:
1: Private Sub btnADONET_Click(sender As System.Object, e As System.EventArgs) Handles btnADONET.Click
2: 'Se inicia la medida de tiempo
3: Dim stopWatch As New Stopwatch()
4: stopWatch.Start()
5:
6: 'Este bloque acceso a datos
7: '-----------------------------------------------------------------------------------------------
8: Dim strCnx As String = "Server=.\SQL2008;Database=AereoDemo;Integrated Security=SSPI;"
9: Dim strSQL As String = "Select * From ModeloAvion"
10: Dim cnx As New SqlConnection(strCnx)
11: Dim cmd As New SqlCommand(strSQL, cnx)
12: Dim dt As New DataTable
13:
14: cnx.Open()
15: dt.Load(cmd.ExecuteReader)
16: cnx.Close()
17: DataGridView1.DataSource = dt
18: '-------------------------------------------------------------------------------------------------
19:
20: 'Se detiene y obtiene el tiempo transcurrido con la propiedad Elapsed
21: stopWatch.Stop()
22: Dim ts As TimeSpan = stopWatch.Elapsed
23:
24: 'Se formatea el valor
25: lbltiempo1.text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
26:
27: End Sub
Se crea una instancia de la clase StopWatch y se inicia la medida de tiempo con el método Star, luego se ejecuta el bloque de acceso a datos en ADO.NET y termina cuando se carga los datos en el control DataGridView, en el siguiente paso se detiene la clase StopWatch con el método Stop, y se obtiene el tiempo transcurrido con la propiedad Elapsed.
El código para LINQ TO SQL:
1: Private Sub btnLINQTOSQL_Click(sender As System.Object, e As System.EventArgs) Handles btnLINQTOSQL.Click
2: 'Se inicia la medida de tiempo
3: Dim stopWatch As New Stopwatch()
4: stopWatch.Start()
5:
6: 'Este bloque acceso a datos
7: '-----------------------------------------------------------------------------------------------
8: Dim dc As New AereoDemoDataContext
9: Dim Result = From Item In dc.ModeloAvions Select Item
10: DataGridView1.DataSource = Result
11: '-----------------------------------------------------------------------------------------------
12:
13: 'Se detiene y obtiene el tiempo transcurrido con la propiedad Elapsed
14: stopWatch.Stop()
15: Dim ts As TimeSpan = stopWatch.Elapsed
16:
17: 'Se formatea el valor
18: lblTiempo2.Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
19:
20: End Sub
En este caso el bloque se acceso a datos con LINQ TO SQL, es mucho menor en líneas de código, debido al ORM que es propio de este método de acceso a datos. Aquí ya se creo el objeto DataContext que se llama AereoDemo como se muestra en la imagen:

Para realizar esta paso consulte las siguientes entradas:
- Usando LINQ TO SQL Parte 1
- Usando LINQ TO SQL Parte 2
- Usando LINQ TO SQL Parte 3
Finalmente, ejecuto el programa, al ver el resultado de 68 milésimas de segundo para el bloque de ADO.NET y 37 para LINQ TO SQL, aparentemente LINQ es mucho mas rápido.

Son varios factores que pueden influir en el resultado final. En la web de CodeProject encontré un articulo donde se comparan la perfomance de ADO.NET y LINQ TO SQL:
Performance comparisons LinQ to SQL,ADO to C#


Nos vemos :)