zoukankan      html  css  js  c++  java
  • EhLib的内存泄漏

    EhLibADO,

    initialization
      RegisterDatasetFeaturesEh(TADOSQLDatasetFeaturesEh, TADOQuery);
      RegisterDatasetFeaturesEh(TADOCommandTextDatasetFeaturesEh, TCustomADODataSet);

    EhLibCDS

    initialization
    {$IFDEF EH_LIB_6}
      RegisterDatasetFeaturesEh(TCDSDatasetFeaturesEh, TCustomClientDataSet);
    {$ELSE}
      RegisterDatasetFeaturesEh(TCDSDatasetFeaturesEh, TClientDataSet);
    {$ENDIF}

    居然没有UnRegisterData……看来EhLib团队也有菜鸟

    移植到DLL中,退出EXE报AV错误,原因是这里没有UnRegister

    修改后用FastMM4发现有内存泄漏

    查看RegisterDatasetFeaturesEh发现

    procedure RegisterDatasetFeaturesEh(DatasetFeaturesClass: TDatasetFeaturesEhClass;
      DataSetClass: TDataSetClass);
    var
      DatasetFeatures: TDatasetFeaturesEh;
      ClassIndex: Integer;
    begin
      DatasetFeatures := DatasetFeaturesClass.Create;
      DatasetFeatures.FDataSetClass := DataSetClass;
      if DatasetFeatures.FDataSetClass = nil then
        Exit;   //既然等Nil,何必要去创建(DatasetFeatures)……
      ClassIndex := DatasetFeaturesList.IndexOf(DatasetFeatures.FDataSetClass.ClassName);
      if ClassIndex >= 0
        then DatasetFeaturesList.Objects[ClassIndex] := DatasetFeatures    //如果已经有了之前那个对象怎么办……
        else DatasetFeaturesList.AddObject(DatasetFeatures.FDataSetClass.ClassName,
                DatasetFeatures);
    end;

    //还好提供源码。修正后,没有问题了

  • 相关阅读:
    d3 之deal with data
    git 使用小结
    【nodemailer】之 work with mustache
    Mustache
    【nodemailer】 初试
    【计算机基础】二.组成1(总线、输入输出)
    【计算机基础】一.概述
    Sring事务管理
    【并发编程】4.JUC中常用的锁
    【并发编程】3.线程与线程池
  • 原文地址:https://www.cnblogs.com/DKSoft/p/2027304.html
Copyright © 2011-2022 走看看