c# - 更新 AdHocWorkspace 很慢
问题描述
因此,我使用 Roslyn 为包含许多文件的解决方案生成智能感知结果,并且我需要在每次按键时更新文档。创建 sourcetext 实例和新解决方案只需要很少的时间,但workspace.TryApplyChanges
每次按键调用大约需要 500 毫秒,这对我来说太多了。我做错了吗?(我只想通过 . 从工作区生成完成结果CompletionService
。这是我更新工作区的方式:
SourceText sourceText = SourceText.From(editorText);
Solution newSolution = solutionDocument.Project.Solution.WithDocumentText(solutionDocument.Id, sourceText);
solutionWorkspace.TryApplyChanges(newSolution); //Every other part is pretty quick, except this.
solutionDocument = solutionWorkspace.CurrentSolution.GetDocument(solutionDocument.Id);
每次用户键入时,我都会调用上述代码。有什么办法可以让这更快吗?谢谢。
解决方案
好的,我想通了。事实证明,您所要做的就是像这样更新您的工作区:
solutionWorkspace.TryApplyChanges(solutionDocument.WithText(SourceText.From(editorText)).Project.Solution);
出于某种原因,这实际上要快得多!
推荐阅读
- amazon-web-services - 如何使用 Buddy.Works 作为管道部署 .NET Core AWS Lambda 项目?
- python - 将 SelectField 添加到模板时,Flask WTF 表单终止
- python - 尝试在 PyCarm 中使用 numpy 时出现 ImportError: No module named 'numpy',但它在交互式控制台中运行良好
- vb.net - 如何使用 VB.net 获取总线报告的设备描述
- javascript - 使用 URL 参数通过标签而不是值预先选择选项
- laravel - Laravel db:seed 在没有 --class 参数的情况下不起作用
- python - 抽象类和字典的 mypy 问题
- scala - 将字符串列转换为二进制列时出错
- r - 删除小于一定数量的数据,利用剩余信息新建一行,做条形图,加起来为100%
- firebase - 如何仅从 Firebase 查询中获取部分数据集