【发布时间】:2012-11-29 02:24:07
【问题描述】:
我遇到了一个问题,即从托管 C 生成大量数据并在 C# 中用于 UI。
示例如下:
托管方:
public ref class c1
{
public:
c1(void);
~c1(void);
String ^Name;
double dtata;
};
public ref class c2
{
public:
c2(void);
~c2(void);
!c2();
String ^Name;
List<c1^> ^arrData;
void CreateData();
void Clear();
};
void c2::CreateData()
{
arrData=gcnew List<c1^>();
for(int i=0;i<1000000;i++)
{
c1^ d=gcnew c1;
arrData->Add(d);
}
}
void c2::Clear()
{
if(arrData)
{
delete arrData;
arrData=nullptr;
}
GC::Collect();
}
C#端:
void Test()
{
using (c2 cx = new c2())
{
cx.CreateData();
cx.Clear();
cx.Dispose();
}
}
结果是调用 Test() 函数后内存从 4MB 上升到 13MB
问题是为什么cx不从内存中释放?
感谢收看
【问题讨论】: