function TServerMethods.GetData(SQLStr: String): TFDJSONDataSets;
var
Q: TFDQuery;
begin
Q := TFDQuery.Create(nil);
Q.Connection := DataM.FDCon;
try
Q.Open(SQLStr);
Result := TFDJSONDataSets.Create;
// Add departments dataset
TFDJSONDataSetsWriter.ListAdd(Result,Q);
finally
Q.Free; ?????加上這句提取資料時報錯,不加記憶體泄露
end;
end;
環境: XE6
我看了 Data.FireDACJSONReflect 單元
destructor TFDJSONDataSetsBase.Destroy;
begin
if FOwnsDataSets and (FDataSets <> nil) then
while FDataSets.Count > 0 do
begin
{$IFNDEF NEXTGEN}
FDataSets[0].Value.Free; ?????這塊好像并沒釋放DATASET
{$ENDIF}
FDataSets.Delete(0);
end;
FDataSets.Free;
inherited;
end;
uj5u.com熱心網友回復:
我碰到類似的問題,服務端物件的釋放function TdssmServerMethods.GetDataR(const ASQLStr: string): TDBXReader;
var
aDBXCommand:TDBXCommand;
begin
Result:=nil;
if not sqlconMethods.Connected then
sqlconMethods.Open;
aDBXCommand:=sqlconMethods.DBXConnection.CreateCommand;
try
aDBXCommand.Text:=ASQLStr;
aDBXCommand.CommandType:=TDBXCommandTypes.DbxSQL; //'Dbx.SQL'
Result:=aDBXCommand.ExecuteQuery;
except
sqlconMethods.Close; //這里是回傳一個TDBXReader實體給客戶端,估計TDBXReader是長連接,所以不能關閉連接
end;
end;
這里的 aDBXCommand不能釋放,
也不能這樣
finally
sqlconMethods.Close;
據說是客戶端呼叫這個方法, 客戶端的實體TDBXReader釋放后,服務端自動釋放。。。。。
uj5u.com熱心網友回復:
你定義的方法:function TServerMethods.GetData(SQLStr: String): TFDJSONDataSets;
中的Q: TFDQuery;
不能任意釋放,因為還在傳遞資料呢,釋放了,傳遞什么?
這里DataSanp默認自動釋放。
uj5u.com熱心網友回復:
finallyQ.Free; ?????加上這句提取資料時報錯,不加記憶體泄露
在關閉客戶端后,再退出服務器端就報記憶體泄露
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/87385.html
標籤:數據庫相關
