首页 > 解决方案 > 调用 Assembly.GetType 时,什么会导致 OutOfMemoryException?

问题描述

我正在开发一个 .NET MVC 应用程序,并且最近通过 nuget 引入了一个新库。加载的应用程序现在抛出一个OutOfMemoryException.

错误指向我们定义 sessionstate 提供者的 web.config 行:

<add name="MongoDBSessionStateProvider" type="UserDefinedType" description="MongoDB Session State Store provider" />

需要注意的是 UserDefinedType 只是类名,它不是程序集限定的类名。

我已经确定问题似乎在于,如果没有指定哪个程序集,它将只查看所有程序集,并且当它查看这个新库的程序集时,就会引发内存不足异常。我已将其缩小到在这两行中进行复制:

var assembly = Assembly.LoadFile(@"C:\MyProject\packages\NReco.PdfRenderer.1.2.2\lib\net20\NReco.PdfRenderer.dll");
var type = assembly.GetType("UserDefinedType", false, true);

我进一步指出,如果最后一个参数 (ignoreCase) 设置为 false,则不再发生错误。

虽然我可以通过更全面地指定用于会话提供程序的类来解决这个问题的症状,但我担心这个问题的根本原因是否会在未来导致其他问题,所以我对使用它感到紧张在生产代码中。

那么有人可以向我解释导致这个 OutOfMemoryException 的原因吗?

标签: c#.net-assemblyassemblies

解决方案


推荐阅读