首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用VB/C#诊断分析器/CodeFix/AutoUpdate的多个.vsix会导致性能问题吗?

使用VB/C#诊断分析器/CodeFix/AutoUpdate的多个.vsix会导致性能问题吗?
EN

Stack Overflow用户
提问于 2014-08-12 11:02:02
回答 2查看 370关注 0票数 0

我正在实施一个系统,它将实现代码质量,作为内部质量度量的一部分。我以两种可能的实现方式构建了该系统,如下所示:

实现1:(已实现)

  1. 一个AutoUpdate扩展(Stub)
  2. C# CodeQualityPlugin (罗斯林C#诊断分析仪和代码修正)
  3. VB CodeQualityPlugin (罗斯林VB诊断分析仪和代码修正)

AutoUpdate特性通过验证其版本号来检查其自身和其他CodeQuality插件的任何更新。一旦CodeQuality插件被更新,它将在接下来的7天内停止更新。

这是我目前对实现的想法,但是开发暂停了,并引用了与此实现中的扩展数量有关的性能问题,并且它的使用/性能可能有Visual的限制(正如团队所提到的)。

实现2:(建议)

  1. C# CodeQualityPlugin (罗斯林C#诊断分析仪,代码修正,AutoUpdate)
  2. VB CodeQualityPlugin (罗斯林VB诊断分析仪,代码修正,AutoUpdate)

在这种情况下,更新功能是单独触发的,并保持单一的责任理念。

我不确定AutoUpdate项目(它使用菜单命令模板)和C#/VB /DiagnosticAnalyzer项目(Roslyn )是否能共存?

实现3:(意见之一)

  1. CodeQualityPlugin (罗斯林C#/VB诊断分析器,代码修正,AutoUpdate)

我甚至不确定这三个是否能在一个单独的V6中共存。

因此,我的问题是,在上述三种场景中,性能问题可能是什么,以及如何将基于Roslyn模板开发的插件实现为visual的普通菜单命令模板扩展。

-编辑-总结需求如下

  1. Coexistence:VSPackage扩展(扩展Visual的VSPackage命令组件)和托管扩展框架/VSPackage扩展(自定义和扩展编辑器以包含VSPackage诊断分析器/VSPackage),应该共存于
代码语言:javascript
运行
复制
- Single VSIX
- Maximum 2 VSIXs

  1. Performance:共存不应影响性能,VSPackage扩展所关注的AutoUpdate不应创建冗余的服务调用。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-13 22:00:10

Roslyn和VSIX包装的注意事项:

As https://roslyn.codeplex.com/discussions/549445 by https://www.codeplex.com/site/users/view/srivatsn

  1. 同时引用Microsoft.CodeAnalysis.CSharpMicrosoft.CodeAnalysis.VisualBasic的扩展将
代码语言:javascript
运行
复制
- Load both the compilers even if we try to open a C# project, this is not ideal.

  1. 如果我们必须分析符号ISymbolAnalyzer,在这里您只分析符号而不是语法节点,那么我们应该采用单一的语言无关分析器。这意味着我们不需要引用任何C#/VB (甚至微软也在考虑实现更多语言无关的分析器)。包含两个导出属性--每个语言一个,这些属性告诉VS在解决方案中包含相应语言时实例化和调用这些分析器。
  2. 编译作为一个过程在编译完成后会留下内存,但是由于几乎每次击键都会发生编译,如果分析器同时引用c#和VB,则会将这两个编译器带入内存。由于具有持久性特性,如果解决方案下有一个大型项目(这是我的典型生产场景),则可能会出现问题。
  3. 在调用相应的语法方法时,还是在导出分析器的实例化(通过MEF导出属性通过相应的语言用例进行筛选)时,编译器是否被加载是一种困惑,因为他还提到,引用这两种语法节点的if方法可能会使JIT编译并加载dll。
  4. 任何链接到菜单命令的分析器都是VS特定的,如果它们被链接到项目,那么它也将参与构建,甚至通过MSBuild参与VS之外的构建。
  5. VSIX应该能够导出多个组件来扩展这两个扩展点。

As http://blogs.msdn.com/b/ericlippert/archive/2012/06/08/persistence-facades-and-roslyn-s-red-green-trees.aspx by https://www.codeplex.com/site/users/view/VSadov

  1. 语法树数据结构的持久性和每次击键时都需要重做分析(增量编译:这是Srivatsn的编译方法),使他们设计了红绿树方法,这有助于增量编译的性能。

As https://stackoverflow.com/questions/25262618/can-multiple-vsix-with-vb-c-diagnostic-analyzer-codefix-autoupdate-cause-perfo/25270233#comment39362585_25262618 by https://stackoverflow.com/users/34397/slaks

  1. MEF出口无论是否打包在单个VSIX中都没有任何区别(但应该注意的是,将两个类型分析器合并到一个单独的程序集(即MEF导出)存在性能问题)。

As https://stackoverflow.com/questions/25262618/can-multiple-vsix-with-vb-c-diagnostic-analyzer-codefix-autoupdate-cause-perfo#comment39383014_25270233 by https://stackoverflow.com/users/678625/kevin-pilch-bisson

  1. 尽管这些程序集在哪里打包并不重要,除非它们在涉及特定于语言的引用时是分开的。
  2. 如果分析器同时引用C#和VB特定的Roslyn程序集,并且这些编译器程序集很大,则将保留虚拟内存。
  3. 性能问题是磁盘加载和JIT成本(如果不存在编译和引用,我不确定JIT成本如何),但是由于保留了地址空间,VS中可能会出现问题(我不确定这将是一个问题)。
  4. 据他说,微软所做的是创建三个项目来解决这个问题(根据Srivatsn的说法,微软仍在尝试语言不可知论的分析器)。
代码语言:javascript
运行
复制
- Shared (_No language specific binaries in it_)
- C# specific (_+ shared libraries_)
- VB Specific (_+ shared libraries_)

  1. 如果没有引用特定于语言的二进制文件,如果MEF导出被适当地归因于ContentTypeLanguageName,那么上述问题就可以得到解决。
  2. 我们可以将额外的程序集捆绑到单个VSIX中(通过将其他项目嵌入其中),并且VS将独立地加载每个程序集。

最后执行:

因此,在与我的团队讨论后,我最终得出了如下结论:

  • 通过在it 中嵌入以下项目来实现单个VSIX
    • 更新插件
      • 检查过去7天是否有最新情况
      • 然后通过JSON请求从服务器端检查插件的版本号
      • 然后从服务器下载插件,将下载日期存储在VS设置中,以便进行初始检查。
      • 禁用先前的插件。
      • 卸载之前的插件。
      • 安装新插件
      • 此功能是在时触发的
        • VS负载
        • 手动菜单命令(应该覆盖下载日期检查)

代码语言:javascript
运行
复制
- C# plugin  
    - Implements and refers only rules for C# 

代码语言:javascript
运行
复制
- VB Plugin  
    - Implements and refers only rules for VB

票数 1
EN

Stack Overflow用户

发布于 2014-08-12 17:14:51

不是的。

唯一真正的“性能问题”是将C#和VB放在同一个程序集中(注意,而不是VSIX),这意味着当我们必须加载一个程序集时,加载其他程序集。

从MEF的角度来看,我们只是得到了一份出口清单:我们不知道它们来自哪个VSIXes,即使我们想要,也很难搞清楚。因此,您将哪些内容放入VSIX并不重要:根据对用户有意义的内容来划分它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25262618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档