zoukankan      html  css  js  c++  java
  • delphi 内存泄漏检测

    FormCreate 加一条 或者在project里加上,就是fastmm
    ReportMemoryLeaksOnShutdown:=true;

      Application.Initialize;
      Application.MainFormOnTaskbar := True;

    ReportMemoryLeaksOnShutdown:=true;

    退出程序的时候,如果有内存泄漏,会弹出一个对话框.

    *1就是有1个,3就是有3个,2就是有2个

    13 - 20 bytes: TJSONNumber x 1, TJSONObject x 1, TJSONString x 3, TJSONPair x 2, UnicodeString x 2
    21 - 28 bytes: UnicodeString x 1, Unknown x 1
    29 - 36 bytes: UnicodeString x 1
    37 - 44 bytes: TList<System.JSON.TJSONPair> x 1

     一、JO 要释放

    jo := TJSONObject.ParseJSONValue('{"name": "John Smith", "age": 33}') as TJSONObject;

    这个用完jo.free,否则就有内存泄漏 或者 freeandnil(jo);

    如果jo多次使用,下面2种方法都可以,释放没问题。

    //if jo<>nil then  freeandnil(jo);
    if jo<>nil then  jo.Free;

    二、Serialize 有泄漏

    self.injson := system.JSON.Serializers.TJsonSerializer.Create.Serialize<TPerson>(inp);

    改为

    var tt :=  system.JSON.Serializers.TJsonSerializer.Create;
    self.injson:= Serializer.Serialize<TPerson>(inp);
    tt.Free;

    TJsonSerializer.Create.Deserialize也有泄漏换成 create free就好了

    三、TJSONArray  无泄漏

    var jr:tjsonarray;

    jr := jo.GetValue<TJSONArray>('data.dataList') ;

          for i := 0 to jr.Count - 1 do
      begin
        jrow := jr.Get(i) as TJSONObject;
      self.Caption:=  jrow.GetValue<string>('ampm');

    end;

    封装后调用简单,无内存泄漏

      TKPJSON=class
        class function  Deserialize<T>(const AJson: string): T;
        class function  Serialize<T>(const AValue: T): string;
      end;
    
      class function TKPJSON.Deserialize<T>(const AJson: string): T;
    begin
      var tt :=  system.JSON.Serializers.TJsonSerializer.Create;
      result:= tt.Deserialize<T>(ajson);
      tt.Free;
    end;
    
    class function TKPJSON.Serialize<T>(const AValue: T): string;
    begin
    var tt :=  system.JSON.Serializers.TJsonSerializer.Create;
    result:= tt.Serialize<T>(AValue);
    tt.Free;
    end;

    self.injson:=  TKPJSON.Serialize<T100110>(inp);//简单到一行代码
    var top :=  TKPJSON.Deserialize<T100110>(self.injson);//简单到一行代码

  • 相关阅读:
    Navicat Premium_11.2.7简体中文版 破解版本 windows版本 失效
    php多维数组排序 3
    php 多维数组排序
    php对二维数组排序
    mysql子查询批量找id最大的
    教你如何选择相机的曝光模式(转)
    3分钟搞懂曝光直方图(转)
    摄影新手最想知道的10件事(转)
    教你搞懂光圈大小的成像差异(转)
    新手必须掌握的20个摄影构图法 转
  • 原文地址:https://www.cnblogs.com/cb168/p/13189264.html
Copyright © 2011-2022 走看看