在Linqpad中重新运行查询之间保存了什么状态?我推测没有,所以如果你运行两次脚本,那么两次都会得到相同的结果.
但是,在同一个Linqpad选项卡中运行C#程序两次.你会发现它首先打印一个空列表,第二次是一个带有'嘿'消息的列表.这是怎么回事?
System.ComponentModel.TypeDescriptor.GetAttributes(typeof(String)).OfType<ObsoleteAttribute>().Dump();
System.ComponentModel.TypeDescriptor.AddAttributes(typeof(String),new ObsoleteAttribute("hey"));
Run Code Online (Sandbox Code Playgroud)
Joe*_*ari 12
LINQPad在查询之间缓存应用程序域,除非您在Edit |中另外请求 首选项(或按Ctrl + Shift + F5清除应用程序域).这意味着存储在静态变量中的任何内容都将在查询之间保留,假设类型在数值上相同.这就是您在代码中看到其他类型描述属性的原因,也解释了为什么您经常在后续查询运行中看到性能优势(因为许多内容在静态变量中以某种方式缓存).
您可以使用LINQPad的Cache扩展方法明确地利用它:
var query = <someLongRunningQuery>.Cache();
query.Select (x => x.Name).Dump();
Run Code Online (Sandbox Code Playgroud)
Cache()是一个透明的扩展方法,如果在先前的查询中没有看到输入,它会准确返回它所输入的内容.否则,它返回上一个查询的枚举结果.
因此,如果您更改第二行并重新执行查询,则查询将快速执行,因为将从缓存提供而不必重新执行.
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |