Я сделал программу компиляции C # с Roslyn.Однако компиляция всего проекта занимает около 1 секунды.
Я пытаюсь оптимизировать время, и вот моя попытка:
// I'm currently recycling the compilation object.
if (compiler == null)
compiler = CreateCompiler();
/* ... */
for (var tree in syntaxTrees) {
SyntaxTree oldTree;
if (PreviouslyAddedAndHasChanges(tree)) {
compiler = compiler.ReplaceSyntaxTree(oldTree, tree);
}
else if (NewlyAdded(tree)) {
compiler = compiler.AddSyntaxTree(tree);
}
}
compiler.Emit(...);
Но это не работает.Выходная сборка не будет изменена.Я также взглянул на метод EmitDifference
, но он не работает с .dll
output.
Вот мой вопрос:
- Безопасно ли повторно использовать
CSharpCompilation
объект, как моя первая строка кода? - Кэширует ли
Roslyn
предыдущие данные компиляции и должен ли я их аннулировать?