如何在运行时创建Type并在使用后卸载符号

时间:2017-12-28 12:24:21

标签: c# garbage-collection reflection.emit codedom

问题

我需要动态创建类型(没有动态或ExpandoObject ),我需要在返回查询时获取强类型(动态制作)。

我尝试过使用Reflection.EmitCodeDOM,但都保留了在内存中创建的符号。

我的尝试

使用Reflection.Emit,我尝试了AssemblyBuilderAccess.RunAndCollect,这项工作正常,但我的查询(Dapper)上没有使用该类型并调用GC.Collect()

我尝试过处理Reflection.Emit的对象,但没有成功(https://stackoverflow.com/questions/2503645/reflect-emit-dynamic-type-memory-blowup?answertab=active#tab-top);

我尝试使用GC.Collect()GC.SuppressFinalize()来释放变量,但不起作用。

我尝试在另一个AppDomain上创建类型,在使用后卸载域,但我做不到,原因有两个: 1.应该在DoCallBack上使用,如果我这样做,我不能将该类型传递给另一种方法; 2.尝试在DoCallBack外部使用我收到错误:"Type 'System.Reflection.Emit.AssemblyBuilder' in assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable."

有人知道如何解决这个问题吗?

0 个答案:

没有答案