Delphi XE 使用 DataSnap 當WEB Server,為何記憶體一直會累加上去,如何清掉記憶 |
答題得分者是:GrandRURU
|
pkz0718
一般會員 發表:4 回覆:7 積分:2 註冊:2013-08-13 發送簡訊給我 |
以下是小弟的程式碼,麻煩各位大大指導,謝謝
var dbx4Conn: TDBXConnection; function TWebModule1.GetQueryS(const scmd: string): TJSONArray; var date_temp_s: TDBXReader; i: integer; arr: TJSONArray; begin arr := TJSONArray.Create; if (Assigned(dbx4Conn)) then begin cmd := dbx4Conn.CreateCommand; end else begin dbx4Conn := TDBXConnectionFactory.GetConnectionFactory.GetConnection (db_conn, id_conn, pw_conn); if (Assigned(dbx4Conn)) then cmd := dbx4Conn.CreateCommand; end; try cmd.Text := scmd; date_temp_s := cmd.ExecuteQuery; while date_temp_s.Next do begin for i := 0 to date_temp_s.ColumnCount - 1 do begin if not date_temp_s.Value[i].IsNull then begin arr.Add(UnicodeString(date_temp_s.Value[i].AsString)); end else begin arr.Add(''); end; end; end; FreeAndNil(date_temp_s); except raise; end; date_temp_s.Free; FreeAndNil(dbx4Conn); Result := arr; end;
已經做了 FreeAndNil(dbx4Conn);,還是無法清除記憶體 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
[code delphi] function TWebModule1.GetQueryS(const scmd: string): TJSONArray; var date_temp_s: TDBXReader; i: integer; begin Result := TJSONArray.Create; try if (Assigned(dbx4Conn)) then begin cmd := dbx4Conn.CreateCommand; end else begin dbx4Conn := TDBXConnectionFactory.GetConnectionFactory.GetConnection (db_conn, id_conn, pw_conn); if (Assigned(dbx4Conn)) then cmd := dbx4Conn.CreateCommand; end; try cmd.Text := scmd; date_temp_s := cmd.ExecuteQuery; while date_temp_s.Next do begin for i := 0 to date_temp_s.ColumnCount - 1 do begin if not date_temp_s.Value[i].IsNull then begin Result.Add(UnicodeString(date_temp_s.Value[i].AsString)); end else begin Result.Add(''); end; end; end; except raise; end; finally FreeAndNil(date_temp_s); FreeAndNil(dbx4Conn); end; end; [/code] |
pkz0718
一般會員 發表:4 回覆:7 積分:2 註冊:2013-08-13 發送簡訊給我 |
感謝大大的指導。因為小弟第一次做web server所以近期過到server的記憶體一直累加上去。那目前已經將程式換成大大所指導的方式。未來如有其他問題。再麻煩請大大指導,謝謝
===================引 用 GrandRURU 文 章=================== [code delphi] function TWebModule1.GetQueryS(const scmd: string): TJSONArray; var date_temp_s: TDBXReader; i: integer; begin Result := TJSONArray.Create; try if (Assigned(dbx4Conn)) then begin cmd := dbx4Conn.CreateCommand; end else begin dbx4Conn := TDBXConnectionFactory.GetConnectionFactory.GetConnection (db_conn, id_conn, pw_conn); if (Assigned(dbx4Conn)) then cmd := dbx4Conn.CreateCommand; end; try cmd.Text := scmd; date_temp_s := cmd.ExecuteQuery; while date_temp_s.Next do begin for i := 0 to date_temp_s.ColumnCount - 1 do begin if not date_temp_s.Value[i].IsNull then begin Result.Add(UnicodeString(date_temp_s.Value[i].AsString)); end else begin Result.Add(''); end; end; end; except raise; end; finally FreeAndNil(date_temp_s); FreeAndNil(dbx4Conn); end; end; [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |