using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Xml.Linq;
using System.Diagnostics;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.AutoFlush = true;
int individualIteration = 100000;
Trace.Write("Iterations = " + individualIteration + Environment.NewLine);
using (NorthwindDataContext db = new NorthwindDataContext())
{
DateTime actualStart = DateTime.Now;
double normal = 0.0;
for (int i = 0; i < individualIteration; i++)
{
DateTime start = DateTime.Now;
var q = from c in db.Customers
where c.City == "London"
select c;
normal += DateTime.Now.Subtract(start).TotalSeconds;
}
Trace.Write(String.Format("Average time per normal query = {0:F8} seconds.", Environment.NewLine, (normal / individualIteration)));
Trace.Write(String.Format("Time taken for normal test = {0:F4} seconds.", Environment.NewLine + Environment.NewLine,
DateTime.Now.Subtract(actualStart).TotalSeconds));
}
double compiled = 0.0;
using (NorthwindDataContext db = new NorthwindDataContext())
{
DateTime actualStart = DateTime.Now;
for (int i = 0; i < individualIteration; i++)
{
DateTime start = DateTime.Now;
var q = Queries.CustomersByCity(db, "London");
compiled += DateTime.Now.Subtract(start).TotalSeconds;
}
Trace.Write(String.Format("Average time per compiled query = {0:F8} seconds.",
Environment.NewLine, (compiled / individualIteration)));
Trace.Write(String.Format("Time taken for compiled test = {0:F4} seconds.",
Environment.NewLine, DateTime.Now.Subtract(actualStart).TotalSeconds));
}
Console.Read();
}
}
static class Queries
{
public static Func<NorthwindDataContext, string, IQueryable<Customer>> CustomersByCity =
CompiledQuery.Compile((NorthwindDataContext db, string city) =>
from c in db.Customers
where c.City == city
select c);
}
}