![]() |
|
TClientDataset Memory Leak - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: TClientDataset Memory Leak (/showthread.php?tid=1086) |
TClientDataset Memory Leak - edo - 19-06-2017 Merhaba, TClientDataset'den türeterek bir component geliştirmeye çalışıyorum ve bir memory leak ile karşılaştım ve çözemedim. Neyseki soru sormak için kaynak kodun tamamını paylaşmak yerine sorunu reproduce edebilecek bir kod geliştirdim. Aşağıdaki kodu çalıştırıp uygulamamayı kapatırken (reportmemoryleaksonshutdonw ise) memory leak hatası veriyor. FastMM ile hatayı dosyaya logladım, ilgili kısım da aşağıdaki gibidir. Sorunun olduğu yerde bir assembly kod var ama sebebini açıkçası çözemedim. Yardımlarınız memnuniyetle karşılanacaktır procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.Tag := 1;
ClientDataSet1.Open;
//ClientDataSet1.AppendRecord(['General']);
end;
procedure TForm1.ClientDataSet1BeforeOpen(DataSet: TDataSet);
begin
if ClientDataSet1.Tag = 1 then
begin
ClientDataSet1.Tag := 0;
ClientDataSet1.Fields.Clear;
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('Collection', ftString, 50);
ClientDataSet1.FieldDefs.Find('Collection').CreateField(ClientDataSet1);
ClientDataSet1.CreateDataSet;
end;
end;
--------------------------------2017/6/19 12:00:21-------------------------------- A memory block has been leaked. The size is: 68 This block was allocated by thread 0x4FA8, and the stack trace (return addresses) at the time was: 418CD6 [FastMM4.pas][FastMM4][DebugAllocMem$qqri][9900] 407276 [System.pas][System][AllocMem$qqri][4557] 65F91B [Datasnap.DBClient.pas][Datasnap.DBClient][Dbclient.TCustomClientDataSet.AllocKeyBuffers$qqrv][3965] 6598AE [Datasnap.DBClient.pas][Datasnap.DBClient][Dbclient.TCustomClientDataSet.InternalOpen$qqrv][1514] 623BC8 [Data.DB.pas][Data.DB][Db.TDataSet.DoInternalOpen$qqrv][12527] 623C77 [Data.DB.pas][Data.DB][Db.TDataSet.OpenCursor$qqro][12556] 65885B [Datasnap.DBClient.pas][Datasnap.DBClient][Dbclient.TCustomClientDataSet.OpenCursor$qqro][1282] 623B2F [Data.DB.pas][Data.DB][Db.TDataSet.SetActive$qqro][12508] 62396B [Data.DB.pas][Data.DB][Db.TDataSet.Open$qqrv][12464] 65BE16 [Datasnap.DBClient.pas][Datasnap.DBClient][Dbclient.TCustomClientDataSet.CreateDataSet$qqrv][2342] 706827 [Unit1.pas][Unit1][TForm1.ClientDataSet1BeforeOpen$qqrp16Data.Db.TDataSet][64] The block is currently used for an object of class: Unknown The allocation number is: 1092 Current memory dump of 256 bytes starting at pointer address 7EF776F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F1 7F B4 7C 80 80 80 80 80 80 80 80 00 00 00 00 C1 70 F7 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 73 04 00 00 D6 8C 41 00 76 72 40 00 1B F9 65 00 AE 98 65 00 C8 3B 62 00 77 3C 62 00 5B 88 65 00 2F 3B 62 00 6B 39 62 00 F4 65 70 00 D5 A7 53 00 A8 4F 00 00 A8 4F 00 00 AA 72 40 00 BE F5 60 00 AF F9 65 00 FA 9A 65 00 B8 3C 62 00 06 8C 65 00 9C 3B 62 00 F7 31 62 00 3C 8B 41 00 51 8B 41 00 29 7A 65 00 3C 00 00 00 00 00 00 00 69 F3 D9 86 E4 FB 71 00 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ñ ´ | € € € € € € € € . . . . Á p ÷ ~ . . . . . . . . . . . . . . . . s . . . Ö Œ A . v r @ . . ù e . ® ˜ e . È ; b . w < b . [ ˆ e . / ; b . k 9 b . ô e p . Õ § S . ¨ O . . ¨ O . . ª r @ . ¾ õ ` . ¯ ù e . ú š e . ¸ < b . . Œ e . œ ; b . ÷ 1 b . < ‹ A . Q ‹ A . ) z e . < . . . . . . . i ó Ù † ä û q . € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € TClientDataset Memory Leak - SimaWB - 19-06-2017 Teknik olarak önce DataSet oluşturup sonra Open yapılmalı. Yani önce CreateDataSet'i çağırmalısınız. TClientDataset'in kaynak kodları incelenip problemin kaynağı net olarak bulunabilir. Vaktim elverdiği ölçüde hızlıca baktığımda; CreateDataSet içerisinde zaten Open'ın çağrıldığı görülüyor. Yani sadece CreateDataSet kullanmak yeterli. TClientDataset Memory Leak - edo - 19-06-2017 Evet Open metodunu reintroduce edip, kodları oraya taşıdım ve Open içersinde inherited'a gitmeden işlemlerimi yaptım. ReportMemoryLeaksOnShutdown şu anda hata vermiyor fakat FastMM yine hata veriyor ama benim kodumla ilişkilendiremedim FastMM'in verdiği hatayı. [attachment=121] --------------------------------2017/6/19 17:37:23-------------------------------- A memory block has been leaked. The size is: 20 This block was allocated by thread 0x49C4, and the stack trace (return addresses) at the time was: 4DB29E54 4DB28419 4DB21AA9 4DB1A52D 4DB1A537 4DB24059 77A209AE [Unknown function at RtlpNtEnumerateSubKey] 77A21958 [Unknown function at RtlpNtEnumerateSubKey] 77A2193C [Unknown function at RtlpNtEnumerateSubKey] 77A2193C [Unknown function at RtlpNtEnumerateSubKey] 779DA863 [Unknown function at RtlUlonglongByteSwap] The block is currently used for an object of class: Unknown The allocation number is: 58991 Current memory dump of 256 bytes starting at pointer address 7E8DDCB0: E4 8B C6 00 80 80 80 80 50 75 B4 7E 80 80 80 80 73 A1 D5 54 80 80 80 80 00 00 00 00 70 72 8D 7E 00 00 00 00 00 00 00 00 78 9D 41 00 00 00 00 00 7A E6 00 00 54 9E B2 4D 19 84 B2 4D A9 1A B2 4D 9F 71 B1 4D 2D A5 B1 4D 37 A5 B1 4D 53 4D B2 4D AE 09 A2 77 58 19 A2 77 3C 19 A2 77 3C 19 A2 77 C4 49 00 00 C4 49 00 00 A5 85 40 00 F9 8D 40 00 89 D3 73 00 27 87 40 00 DC CF 73 00 27 87 40 00 48 E1 73 00 27 87 40 00 28 F4 73 00 F9 8D 40 00 27 87 40 00 10 00 00 00 90 75 73 00 DC 3C 3E 81 E4 8B C6 00 80 80 80 80 50 75 B4 7E 80 80 80 80 23 C3 C1 7E 80 80 80 80 00 00 00 00 11 D9 8D 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7F E6 00 00 54 9E B2 4D 19 84 B2 4D A9 1A B2 4D D8 03 98 77 FD 19 B2 4D 7C 32 AF 4D 1E 31 AF 4D 2C 5C 14 77 FC 0C 14 77 96 8E 41 00 A5 8E 41 00 ä ‹ Æ . € € € € P u ´ ~ € € € € s ¡ Õ T € € € € . . . . p r ~ . . . . . . . . x A . . . . . z æ . . T ² M . „ ² M © . ² M Ÿ q ± M - ¥ ± M 7 ¥ ± M S M ² M ® . ¢ w X . ¢ w < . ¢ w < . ¢ w Ä I . . Ä I . . ¥ … @ . ù @ . ‰ Ó s . ' ‡ @ . Ü Ï s . ' ‡ @ . H á s . ' ‡ @ . ( ô s . ù @ . ' ‡ @ . . . . . u s . Ü < > ä ‹ Æ . € € € € P u ´ ~ € € € € # à Á ~ € € € € . . . . . Ù ~ . . . . . . . . . . . . . . . . æ . . T ² M . „ ² M © . ² M Ø . ˜ w ı . ² M | 2 ¯ M . 1 ¯ M , \ . w ü . . w – A . ¥ A . |