我正在开发一个Visual Studio自定义工具(单个文件生成器),为每个选定的剃刀页面(* .cshtml)生成.vue文件,该项目基于Microsoft的单个文件生成器示例项目[https://github.com/Microsoft/VSSDK-Extensibility-Samples/tree/master/Single_File_Generator],我使用RazorEngine来解析剃刀模板,一切都按预期工作,只是RazorEngine花了很多时间(超过20秒)来编译剃刀模板文件并且导致VS挂起而没有响应,我查看了任务管理器,发现有一个Visual C#命令行编译器在这个自定义工具运行时占用了很高的CPU,我的代码如下:
Engine.Razor.RunCompile(inputFileContent,DateTime.Now.Ticks.ToString());
问题是由这行代码引起的:
{{1}}
但是当我在控制台应用程序中运行它时,只需几毫秒即可完成,我用Google搜索了一整天而无法解决这个问题,请帮助我!谢谢!
答案 0 :(得分:0)
仔细查看您作为模板键传递的内容:
DateTime.Now.Ticks.ToString()
基本上,每次运行RunCompile()
时都会创建一个新的缓存条目。如果模板已经编译,你需要做的是重用密钥。
您可以通过以下方式处理:
为模板生成哈希值:
using MD5 = System.Security.Cryptography.MD5;
...
public static class HashGenerator
{
public static string GenerateCheckSumHash(string input)
{
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
}
使用哈希值作为模板键:
var result = Engine.Razor.RunCompile(inputFileContent,
HashGenerator.GenerateCheckSumHash(inputFileContent));