有没有办法保存 LINQPad.Util.Compile 的结果并长时间重新运行它

本文关键字:结果 长时间 重新运行 Compile 保存 LINQPad Util 有没有 | 更新日期: 2023-09-27 18:33:17

我有一个脚本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;
}

有没有办法保存 LINQPad.Util.Compile 的结果并长时间重新运行它

您可以相当轻松地为此编写缓存函数。像这样:

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;
}