Forum » Programiranje » [Delphi] Memory leak ob klicu WebService-a
[Delphi] Memory leak ob klicu WebService-a
zhigatsey ::
Živjo,
za iskanje poslovnih partnerjev sem uporabil ddv inetis spletno storitev. Ker delphijev WSDL importer ne prebavi dobro wsdl datoteke, sem importani unit ročno popravil. Ko po klicu web service-a zaprem aplikacijo, dobim poročilo o memory leakih (ReportMemoryLeaksOnShutdown := True). Uporabljam Delphi 2010. Spodaj je popravljeni importani unit in primer klica. Ali lahko kdo preveri ali tudi v novejših verzijah delphija javi memory Leake oz. ali je mogoče problem v moji kodi. Če preverim s FastMM4 ne javi nič memory leakov ob koncu izvajanja, torej samo z delphijevim "vgrajenim" memory leak detektorjem dobim leake.
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: Unknown x 1
13 - 20 bytes: Unknown x 3
61 - 68 bytes: Unknown x 1
Wsdl importer popravljena koda:
Primer klica:
za iskanje poslovnih partnerjev sem uporabil ddv inetis spletno storitev. Ker delphijev WSDL importer ne prebavi dobro wsdl datoteke, sem importani unit ročno popravil. Ko po klicu web service-a zaprem aplikacijo, dobim poročilo o memory leakih (ReportMemoryLeaksOnShutdown := True). Uporabljam Delphi 2010. Spodaj je popravljeni importani unit in primer klica. Ali lahko kdo preveri ali tudi v novejših verzijah delphija javi memory Leake oz. ali je mogoče problem v moji kodi. Če preverim s FastMM4 ne javi nič memory leakov ob koncu izvajanja, torej samo z delphijevim "vgrajenim" memory leak detektorjem dobim leake.
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: Unknown x 1
13 - 20 bytes: Unknown x 3
61 - 68 bytes: Unknown x 1
Wsdl importer popravljena koda:
// ************************************************************************ // // The types declared in this file were generated from data read from the // WSDL File described below: // WSDL : http://ddv.inetis.com/Iskalnik.asmx?wsdl // >Import : http://ddv.inetis.com/Iskalnik.asmx?wsdl>0 // >Import : http://ddv.inetis.com/Iskalnik.asmx?wsdl>1 // Encoding : utf-8 // Version : 1.0 // (11.9.2009 8:45:59 - - $Rev: 16699 $) // ************************************************************************ // unit libDDVInetis; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; const IS_OPTN = $0001; IS_UNBD = $0002; IS_NLBL = $0004; IS_REF = $0080; type // ************************************************************************ // // The following types, referred to in the WSDL document are not being represented // in this file. They are either aliases[@] of other types represented or were referred // to but never[!] declared in the document. The types from the latter category // typically map to predefined/known XML or Borland types; however, they could also // indicate incorrect WSDL documents that failed to declare or import a schema type. // ************************************************************************ // // !:string - "http://www.w3.org/2001/XMLSchema"[Gbl] TxmlTransakcijskiRacun = class(TRemotable) private FxmlTRR: String; FxmlVrstaRacuna: string; FxmlZaprt: Boolean; FxmlDatumZaprtja: TXSDateTime; FxmlDatumZadnjeSpremembe: TXSDateTime; FxmlImeBanke: String; FxmlDatumOdprtja: TXSDateTime; public destructor Destroy; override; published property xmlTRR: String read FxmlTRR write FxmlTRR; property xmlVrstaRacuna: string read FxmlVrstaRacuna write FxmlVrstaRacuna; property xmlImeBanke: String read FxmlImeBanke write FxmlImeBanke; property xmlDatumOdprtja: TXSDateTime read FxmlDatumOdprtja write FxmlDatumOdprtja; property xmlDatumZadnjeSpremembe: TXSDateTime read FxmlDatumZadnjeSpremembe write FxmlDatumZadnjeSpremembe; property xmlZaprt: Boolean read FxmlZaprt write FxmlZaprt; property xmlDatumZaprtja: TXSDateTime read FxmlDatumZaprtja write FxmlDatumZaprtja; end; TArrayOfTxmlTransakcijskiRacun = array of TxmlTransakcijskiRacun; TXmlZavezanec = class(TRemotable) private FxmlDavcnaStevilka: String; FxmlMaticnaStevilka: String; FxmlNaslov: String; FxmlStatus: string; FxmlNaziv: String; FxmlZavezanecZaDDV: Boolean; FxmlPlacnikDDV: Boolean; FxmlDatumRegistracije: TXSDateTime; FxmlDejavnost: String; FxmlUrad: String; FTxmlTransakcijskiRacun: TArrayOfTxmlTransakcijskiRacun; public destructor Destroy; override; published property xmlDavcnaStevilka: String read FxmlDavcnaStevilka write FxmlDavcnaStevilka; property xmlMaticnaStevilka: String read FxmlMaticnaStevilka write FxmlMaticnaStevilka; property xmlStatus: string read FxmlStatus write FxmlStatus; property xmlNaziv: String read FxmlNaziv write FxmlNaziv; property xmlNaslov: String read FxmlNaslov write FxmlNaslov; property xmlZavezanecZaDDV: Boolean read FxmlZavezanecZaDDV write FxmlZavezanecZaDDV; property xmlPlacnikDDV: Boolean read FxmlPlacnikDDV write FxmlPlacnikDDV; property xmlDatumRegistracije: TXSDateTime read FxmlDatumRegistracije write FxmlDatumRegistracije; property xmlDejavnost: String read FxmlDejavnost write FxmlDejavnost; property xmlUrad: String read FxmlUrad write FxmlUrad; property xmlTransakcijskiRacuni: TArrayOfTxmlTransakcijskiRacun read FTxmlTransakcijskiRacun write FTxmlTransakcijskiRacun; end; TArrayOfTxmlZavezanec = array of TxmlZavezanec; // ************************************************************************ // // Namespace : http://ddv.inetis.com/ // soapAction: http://ddv.inetis.com/Isci // transport : http://schemas.xmlsoap.org/soap/http // style : document // binding : IskalnikSoap // service : Iskalnik // port : IskalnikSoap // URL : http://ddv.inetis.com/Iskalnik.asmx // ************************************************************************ // IskalnikSoap = interface(IInvokable) ['{F1C4A65E-6E4B-E029-0CE4-7BF71E71C4FF}'] function Isci(const iskalni_niz: string): TArrayOfTxmlZavezanec; stdcall; end; function GetIskalnikSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IskalnikSoap; implementation uses SysUtils; // TXmlZavezanec destructor TXmlZavezanec.Destroy; var I: Integer; begin FreeAndNil(FxmlDatumRegistracije); for I := 0 to System.Length(FTxmlTransakcijskiRacun)-1 do SysUtils.FreeAndNil(FTxmlTransakcijskiRacun[I]); System.SetLength(FTxmlTransakcijskiRacun, 0); inherited Destroy; end; // TXmlTransakcijskiRacun destructor TXmlTransakcijskiRacun.Destroy; begin FreeAndNil(FxmlDatumZaprtja); FreeAndNil(FxmlDatumZadnjeSpremembe); FreeAndNil(FxmlDatumOdprtja); inherited Destroy; end; function GetIskalnikSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IskalnikSoap; const defWSDL = 'http://ddv.inetis.com/Iskalnik.asmx?wsdl'; defURL = 'http://ddv.inetis.com/Iskalnik.asmx'; defSvc = 'Iskalnik'; defPrt = 'IskalnikSoap'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as IskalnikSoap); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; initialization InvRegistry.RegisterInterface(TypeInfo(IskalnikSoap), 'http://ddv.inetis.com/', 'utf-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IskalnikSoap), 'http://ddv.inetis.com/Isci'); InvRegistry.RegisterInvokeOptions(TypeInfo(IskalnikSoap), ioDocument); RemClassRegistry.RegisterXSInfo(TypeInfo(TXmlZavezanec), 'http://ddv.inetis.com/', 'xmlZavezanec'); RemClassRegistry.RegisterXSInfo(TypeInfo(TXmlTransakcijskiRacun), 'http://ddv.inetis.com/', 'xmlTransakcijskiRacun'); end.
Primer klica:
procedure ClearZavezanci(Zavezanci: libDDVInetis.TArrayOfTxmlZavezanec); var iZavezanec: Integer; begin for iZavezanec := 0 to Length(Zavezanci) - 1 do TXMLZavezanec(Zavezanci[iZavezanec]).Free; SetLength(Zavezanci, 0); end; procedure TForm1.Button1Click(Sender: TObject); var Zavezanci: libDDVInetis.TArrayOfTxmlZavezanec; Iskalnik: libDDVInetis.IskalnikSoap; begin Iskalnik := libDDVInetis.GetIskalnikSoap; Zavezanci := Iskalnik.Isci('Mercator'); ClearZavezanci(Zavezanci); end;
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 332504 (72507) | Macketina |
» | Podatki o slovenskih podjetjihOddelek: Pomoč in nasveti | 1301 (1148) | PaX_MaN |
» | Odprtje s.p.Oddelek: Loža | 8238 (6641) | next3steps |
» | Davčna in matična številka podjetjaOddelek: Informacijska varnost | 4168 (3837) | Miha 333 |
» | [Java]kompailiranje iz cmdOddelek: Programiranje | 1297 (1021) | ragezor |