System.UnauthorizedAccessException的

我们有两个问题,我们认为这可能与NDependAPI有关

首先,我们正在编写程序的IIS工作进程使用NDepend API,在第一次请求命中时运行在4Gb +内存上,每接下来的请求就会增加约100-400mb。

其次,第一个请求之后的任何请求都会导致产生大量System.UnauthorizedAccessExceptions到文件,这些文件的名称类似于CQLinqAsm_[GUID].dll

看着C: WINDOWS TEMP ,有一堆文件,比如wz1p0cca.outws1ju0z0.err等。 打开文件,他们也引用了一些.cs文件,但他们无处可见。

跳到结论,但从表面上看,这感觉好像有些东西没有妥善处理,并且锁定了这些文件。 这可能会占用大量的内存空间以及除第一个请求之外的任何异常。

但是,看看NDepend API文档,我看不到任何实现IDisposable东西,这表明可能并非如此。

重现错误并不困难,但是是一个漫长的过程,所以我将尝试描述我们如何使用MVC / NDepend API的流程。

  • 在创建MVC项目之后,引用NDepend API并加载它(注意这里描述的步骤),我们通过AJAX请求向WebAPI控制器请求结果。

  • 这个控制器然后发送一个请求到一个服务类,然后把它发送到我们的NDepend包装库。

  • 在我们的包装库中,流程与入门程序非常相似,不同之处在于我们直接从NDepend proj文件加载规则:

    - >加载项目,并附加覆盖文件(覆盖范围通过我们的团队城市自动完成)

    - >通过调用IAnalysisResultRef.Load()或运行IProject.RunAnalysis()获取分析结果( IAnalysisResults IProject.RunAnalysis()

    - >编译查询(由NDepend.Helpers.IEnumerable<string>.CompileMany()

    - >计算JustMyCode(由IProject.CodeQueries.CodeQueriesSet.ComputerJustMyCode()

    - >运行查询(通过IQueryCompiled.IQueryCompiledSuccess.Execute()

    - >返回结果在页面上呈现

  • 在第一次运行时一切正常,但是,如果我们刷新页面,只要它到达NDepend.Helpers.IEnumerable<string>.CompileMany() ,它就开始生成System.UnauthorizedAccessExceptions。

    我们可能会很糟糕,但任何有见识的人都会是天赐之物。

    链接地址: http://www.djcxy.com/p/37713.html

    上一篇: System.UnauthorizedAccessException

    下一篇: NDepend TypeInitializationExceptions when Testing with NUnit