在网站上,如果我有课程:
public class Provider
{
static readonly Func<Entities, IEnumerable<Tag>> AllTags =
CompiledQuery.Compile<Entities, IEnumerable<Tag>>
(
e => e.Tags
);
public IEnumerable<Tag> GetAll()
{
using (var db = new Entities())
{
return AllTags(db).ToList();
}
}
}
在我有一个页面中:
protected void Page_Load(object sender, EventArgs ev)
{
(new Provider()).GetAll();
}
查询将被编译多少次?每次页面加载......?一旦进入申请表......?
答案 0 :(得分:4)
因为它是一个静态成员,一旦在app域中加载了类。
答案 1 :(得分:1)
看到它被编译。我会说一次。为什么需要重新编译?这不是编译查询的重点吗?
鉴于编译的查询是静态的,每个应用程序实例/生命周期一次。注意:生命周期可能会重叠。
答案 2 :(得分:1)
我会说每个AppDomain一次,因为它是一个静态变量。
答案 3 :(得分:1)
如果以这种方式定义AllTags查询,它将只编译一次。请查看此blog post有关Julie Lerman在Web应用程序和Web服务中编译的查询的信息。
答案 4 :(得分:-1)
http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx#Y696
“静态成员在第一次访问静态成员之前被初始化,并且在静态构造函数之前,如果有的话被调用。”
因此每次加载页面时最多都会编译。由于您的类没有静态构造函数,因此在您实际访问静态成员之前不应编译它。 (根据MSDN。)
但是,这会编译吗?您似乎正在尝试从实例化的类中加载静态成员。