是否可以在.NET中设置第0代堆的最小大小?
我有一个下面的sistuation.我有一个函数,分配大约20-30 MB的1KB对象,对它们做一些事情,然后终止,让所有分配的对象都被GC编辑.现在,在性能监视器中,我可以看到第0代堆大小是5-6 MB,这还不足以接受我需要的所有20-30 MB的对象.当我开始分配时,gen0 GC开始运行,并且因为需要所有对象,所以它们将它们提升为gen1.GC下次开始运行时,这些对象将在gen2中升级.所以最终大约15MB的对象最终进入gen2堆.根据我的逻辑,这些是临时对象,绝不应该在gen2堆中结束.我相信问题在于gen0堆大小的大小.但我不确定.我知道在Java中有可能设置最小的代数堆.在.NET中有这样的方式吗?
给出以下代码:
using System;
using System.Reflection.Emit;
using System.Diagnostics;
using System.Reflection;
namespace ConsoleApplication1
{
class A
{
public int Do(int n)
{
return n;
}
}
public delegate int DoDelegate();
class Program
{
public static void Main(string[] args)
{
A a = new A();
Stopwatch stopwatch = Stopwatch.StartNew();
int s = 0;
for (int i = 0; i < 100000000; i++)
{
s += a.Do(i);
}
Console.WriteLine(stopwatch.ElapsedMilliseconds);
Console.WriteLine(s);
DynamicMethod dm = new DynamicMethod("Echo", typeof(int), new Type[] { typeof(int) }, true);
ILGenerator il …Run Code Online (Sandbox Code Playgroud)