c# – 内存溢出:越来越多的Microsoft.CSharp.RuntimeBinder.Semantics

在我们的应用程序中,我们正在搜索一些内存泄漏,当进行一些操作(在我们的应用程序中加载和关闭一个项目)时,我们知道内存总是增加一点.

我们已经找到了很多,但现在,10个最多的类是(根据我们的工具,ANTS Memory Profiler 8.2):

> Microsoft.CSharp.RuntimeBinder.Semantics.SYMTBL键
> Microsoft.CSharp.RuntimeBinder.Semantics.LocalVariableSymbol
> Microsoft.CSharp.RuntimeBinder.Semantics.CONSTVAL
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCONSTANT
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCLASS
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRTYPEOF
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRLIST
> Microsoft.CSharp.RuntimeBinder.Semantics.MethWithInst
> Microsoft.CSharp.RuntimeBinder.Semantics.cmemberLookupResults
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRMEMGRP
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRCALL
> Microsoft.CSharp.RuntimeBinder.Semantics.EXPRWRAP
> Microsoft.CSharp.RuntimeBinder.Semantics.AggregateDeclaration
> Microsoft.CSharp.RuntimeBinder.Semantics.Scope

不幸的是,我不是这样,所以我有点难以找到我应该如何释放.

我检查了实例树,但它一直与微软的东西.

问题是,当我们做一个项目的“开放/关闭”时,我们经历了很多(大部分)我们的代码.

编辑我们的一个应用程序的一部分使用动态关键字的一些资源,它可能被链接.这里的课不是一次性,我应该和他们做些特别的事吗?

编辑2

我很确定这与我的动态内容相关,似乎C#在使用动态时创建缓存.但是目前我不知道为什么它会增长(我一直加载相同的类,我一直都有完全相同的签名),也不知道如何清除这个.

解决方法

动态关键字应该很少使用,因为在大多数情况下,可以发现不需要解决方法.

根据您的应用,最好的建议是仔细考虑如果您可以设计您的解决方案,以避免动态.
这里有一些有用的动态用例:https://msdn.microsoft.com/en-us/library/dd264736.aspx

鉴于您真的需要使用动态,我建议您调整代码,并找出哪些部分是最多的内存消耗.
事实上,使用动态增加您的内存消耗基于事实,它需要执行各种lookups,但是有一个内存不足的例外,你需要使用很多未知类型的大量动态变量.

对于未知类型的调用方法有很多不同的ways,测量和调整瓶颈是要走的路.

PS:另外,发布一些代码片段有很多帮助.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...