【问题标题】:Managed C pointer does not release when finish its instant托管 C 指针在完成其瞬间时不会释放
【发布时间】: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不从内存中释放?

感谢收看

【问题讨论】:

    标签: pointers c++-cli managed


    【解决方案1】:

    对于 C++/CLI,引用类型中的析构函数对资源执行确定性清理。终结器清理非托管资源,可以由析构函数确定性地调用,也可以由垃圾收集器非确定性地调用。请参考this

    所以你需要实现终结器来释放内存。

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多