LINQ to SQL CompiledQuery Slowing Down

本文关键字:Slowing Down CompiledQuery SQL to LINQ | 更新日期: 2023-09-27 18:32:15

我正在尝试在LINQ to SQL中使用CompiledQuery(WP7,C#和SQLCE 3.5数据库),但是在第一次使用后,查询速度减慢到未编译的速度。我是新手,我确定我错过了一些明显的东西,但我不确定是什么。

作为上下文,我有一个相当大的术语数据库(大约 100,000 条记录),我想搜索这个数据库。在尝试了各种不同的方法和优化之后,我的查询仍然很慢,因此我考虑使用 CompileQuery .

下面是我在 LINQPad 中拼凑的一些代码:

// A list of search terms
List<string> keywords = new List<string>()
{
    "almond",
    "banana",
    "chocolate",
    "date",
    "elderberry",
};
// Searches for each keyword in the database
void Main()
{
    int i = 0;
    while (i < keywords.Count)
    {
        Stopwatch timer = Stopwatch.StartNew();
        IQueryable<Result> r = CQ(this, keywords[i]);
        timer.Stop();
        Console.WriteLine("Query: {0}'nTime: {1}ms'n",
            query,
            timer.ElapsedMilliseconds);
        i++;
    }
}
// The compiled query property
static Func<TypedDataContext, string, IQueryable<Result>> CQ
{
    get
    {
        return CompiledQuery.Compile<TypedDataContext, string, IQueryable<Result>>
        (
            (TypedDataContext dc, string query) =>    
            (
                from x in dc.MyTable
                where x.MyColumn.Contains(query)
                select new Result
                {
                    Something = x.MyColumn
                }
            )
        );
    }
}
// A simple class to hold the results
class Result
{
    public string Something { get; set; }
}

当然,这过于简化,但你明白了。现在产生的结果是:

Query: almond
Time: 14ms
Query: banana
Time: 1197ms
Query: chocolate
Time: 1191ms
Query: date
Time: 1226ms
Query: elderberry
Time: 1201ms

大家说的是,第一个查询会更慢,但后续查询会更快。然而,在我的情况下,情况恰恰相反:看起来第一个查询被编译了,但后一个查询没有。

确定这是显而易见的,但我不确定我错过了什么。有什么指示吗?

提前非常感谢!

LINQ to SQL CompiledQuery Slowing Down

尝试将查询编译的委托结果保存到静态支持字段。 每次访问媒体资源时,您都可能会重新编译。 不知道为什么第一次执行这么快。 不可能是与数据有关的东西吧?