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);//简单到一行代码

  • 相关阅读:
    MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
    DevExpress v17.2新版亮点—DevExtreme篇(三)
    MyEclipse持续性开发教程:用JPA和Spring管理数据(二)
    DevExpress v17.2新版亮点—DevExtreme篇(二)
    多线程(1)
    什么是SpringCloud?
    WebStrom常用快捷键
    七、CommonJS规范和Note.js模块概念的介绍
    六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用
    JSP标签
  • 原文地址:https://www.cnblogs.com/cb168/p/13189264.html
Copyright © 2011-2022 走看看