我们在我们的Windows服务中使用Funq来执行一些计划任务,并且对于每一轮我们都创建一个子容器,而不是创建所有对象,并在最终处置子容器时发现元素由此子容器创建的不是GC,因为根容器具有在调用处理子容器后停留在那里的子容器的集合。这段代码再现了我们的问题,并将消耗(并保持)800MB的内存。Funq和处理子容器
对我们来说,这是相当令人惊讶的,这是用这种方式使用funq的错误模式,在这种情况下我们该如何使用它?或者它只是一个错误?
感谢
public class Dummy
{
public string Content { get; set; }
public void Generate(int size)
{
this.Content = new string('X', size);
}
}
class Program
{
static void Main(string[] args)
{
var container = new Container();
container.RegisterAutoWired<Dummy>().ReusedWithin(ReuseScope.Container);
int size = 20000;
for (int i = 0; i < size; i++)
{
using (var c = container.CreateChildContainer())
{
var d= c.Resolve<Dummy>();
d.Generate(size);
}
PrintInfo(i);
}
Console.ReadLine();
}
private static void PrintInfo(int i)
{
if (i%1000 == 0)
{
int divide = 1024*1024;
GC.Collect();
var p = System.Diagnostics.Process.GetCurrentProcess();
Console.WriteLine(p.WorkingSet64/divide + "MB");
Console.WriteLine(p.PrivateMemorySize64/divide + "MB");
}
}
}