我有一个脚本Web服务,它将从内容管理系统下载并运行linqpad .linq程序.我目前正在做类似下面的代码.有没有办法保存LINQPad.Util.Compile的结果并将其存储在某处,以便我可以使用它直到.linq文件已更改?现在我认为它每次都在重新编译,并产生许多编译文件夹.
public static object DownloadAndRunScript(string scriptFilePath, object args)
{
var compiledScript = LINQPad.Util.Compile(scriptFilePath, true);
var queryExecutorResult = compiledScript.Run(LINQPad.QueryResultFormat.Text, args);
return (object)queryExecutorResult.ReturnValue;
}
Run Code Online (Sandbox Code Playgroud)
您可以相当轻松地为此编写缓存函数.像这样的东西:
static Dictionary<string, Tuple<DateTime, QueryCompilation>> _cache
= new Dictionary<string, System.Tuple<System.DateTime, QueryCompilation>>();
public static QueryCompilation GetCompilation (string scriptFilePath)
{
Tuple<DateTime, LINQPad.ObjectModel.QueryCompilation> entry;
var writeTime = new FileInfo (scriptFilePath).LastWriteTimeUtc;
lock (_cache)
if (_cache.TryGetValue (scriptFilePath, out entry) && entry.Item1 == writeTime)
return entry.Item2;
var compiledScript = LINQPad.Util.Compile (scriptFilePath, true);
lock (_cache)
_cache [scriptFilePath] = Tuple.Create (writeTime, compiledScript);
return compiledScript;
}
Run Code Online (Sandbox Code Playgroud)