我們在我們的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");
}
}
}