在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
FormCreate 加一条 或者在project里加上,就是fastmm
Application.Initialize; 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 一、JO 要释放 jo := TJSONObject.ParseJSONValue('{"name": "John Smith", "age": 33}') as TJSONObject; 这个用完jo.free,否则就有内存泄漏 或者 freeandnil(jo); 如果jo多次使用,下面2种方法都可以,释放没问题。 //if jo<>nil then freeandnil(jo); 二、Serialize 有泄漏 self.injson := system.JSON.Serializers.TJsonSerializer.Create.Serialize<TPerson>(inp); 改为 var tt := system.JSON.Serializers.TJsonSerializer.Create;
TJsonSerializer.Create.Deserialize也有泄漏换成 create free就好了 三、TJSONArray 无泄漏 var jr:tjsonarray; jr := jo.GetValue<TJSONArray>('data.dataList') ; for i := 0 to jr.Count - 1 do
封装后调用简单,无内存泄漏 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);//简单到一行代码
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论