我们有两个问题,我们认为可能与NDependAPI
有关首先,我们正在编写的程序使用NDepend API的IIS工作进程在第一个请求命中时在4Gb +内存上运行,并且每次后续请求时上升约100-400mb。 / p>
其次,我们第一个请求之后的任何请求都会导致生成大量System.UnauthorizedAccessExceptions
个名称为CQLinqAsm_[GUID].dll
查看 C:\ WINDOWS \ TEMP \ ,有一堆文件,例如wz1p0cca.out
或ws1ju0z0.err
等。打开文件,它们也会引用一些.cs文件,但它们无处可见。
跳到结论,但从表面上看,这感觉好像没有正确处理某些东西,并且正在锁定这些文件。这可以解决大内存占用和除第一个请求之外的任何异常。
但是,查看NDepend API文档,我看不到任何实现IDisposable
的内容,这表明情况可能并非如此。
重现错误并不困难,但这是一个漫长的过程,因此我将尝试描述我们如何使用MVC / NDepend API。
创建MVC项目后,引用NDepend API并加载它(注意所描述的步骤here),我们通过AJAX请求向WebAPI控制器请求结果。
然后,该控制器向服务类发送请求,服务类又将其发送到我们的NDepend包装器库。
在我们的包装器库中,流程与Getting Started program非常相似,只不过我们直接从NDepend proj文件加载规则:
- >加载项目,并附加Coverage文件(Coverage通过我们的Team City自动化)
- >通过致电IAnalysisResults
或运行IAnalysisResultRef.Load()
获取分析结果(IProject.RunAnalysis()
)。
- &GT;编译查询(NDepend.Helpers.IEnumerable<string>.CompileMany()
)
- &GT;计算JustMyCode(IProject.CodeQueries.CodeQueriesSet.ComputerJustMyCode()
)
- &GT;运行查询(IQueryCompiled.IQueryCompiledSuccess.Execute()
)
- &GT;返回在页面上呈现的结果
首次运行时一切正常,但是,如果我们刷新页面,一旦到达NDepend.Helpers.IEnumerable<string>.CompileMany()
,它就会开始生成System.UnauthorizedAccessExceptions。
我们可能非常错误,但任何有洞察力的人都会成为天赐之物。