我有一個數據庫,我需要儘可能快地查詢一遍又一遍。我的查詢執行得很快,但似乎有一些額外的滯後。從外部應用程序查詢MYSQL(是我的代碼效率低下)?
我有一種感覺,這種滯後是由於我每次啓動和取消啓動連接連接的事實。有沒有辦法避免這種情況?
我沒有使用libmysql(至少不是直接)。我在Lazarus/FreePascal(類似於delphi)中使用「mysql50」包,後者又使用libmysql(我認爲)。
如果有人看了我的代碼並指出(或者甚至是固定的)一些低效率,我將非常感激。
這個庫的目的是傳遞從MQL4發出的查詢(一種用於金融交易市場的類似C語言),並從我的MYSQL數據庫(通過管道連接到它)返回一行, 。
{$CALLING STDCALL}
library D1Query;
{$mode objfpc}{$H+}
uses
cmem,
Windows,
SysUtils,
profs_win32exceptiontrap,
mysql50;
var
sock: PMYSQL;
qmysql: st_mysql;
type
VArray = array[0..100] of Double;
PArray = ^VArray;
procedure InitSQL; stdcall;
begin
mysql_init(PMySQL(@qmysql));
sock :=
mysql_real_connect(PMysql(@qmysql), '.', 'root', 'password', 'data', 3306, 'mysql', CLIENT_MULTI_STATEMENTS);
if sock = nil then
begin
OutputDebugString(PChar(' Couldn''t connect to MySQL.'));
OutputDebugString(PChar(mysql_error(@qmysql)));
halt(1);
end;
end;
procedure DeInitSQL; stdcall;
begin
mysql_close(sock);
end;
function SQL_Query(QRY: PChar; output: PArray): integer; stdcall;
var
rowbuf: MYSQL_ROW;
recbuf: PMYSQL_RES;
i: integer;
nfields: LongWord;
begin
InitSQL();
if (mysql_query(sock, QRY) < 0) then
begin
OutputDebugString(PChar(' Query failed '));
OutputDebugString(PChar(' ' + mysql_error(sock)));
end;
recbuf := mysql_store_result(sock);
nfields := mysql_num_fields(recbuf);
rowbuf := mysql_fetch_row(recbuf);
if (rowbuf <> nil) then
begin
for i:=0 to nfields-1 do
output^[i] := StrToFloatDef(rowbuf[i], -666);
end;
mysql_free_result(recbuf);
DeInitSQL();
Result := i;
end;
exports
SQL_Query,
InitSQL,
DeInitSQL;
begin
end.
本應該去代碼審查 – Ibu 2011-05-25 05:08:41
嗯,我根本不知道存在。 – 2011-05-25 05:29:48