我有一个系统,每 1 秒通过 GET 获取一个 html 来更新这个 html 中的系统数据可以有 1-20 个表单,需要获取所有表单并组装每个表单的查询字符串字段,我有一个函数可以做到这一点,问题是它比获取服务器 html 花费的时间更长,代码有什么问题?或者如何以不同的方式做到这一点?
procedure XThread.GetForms;
var
sTemp, xResF : String;
FormItem, v: Variant;
Field: Variant;
J, q, i, contCampos,
tmForm : Integer;
IDocForm : IHTMLDocument2;
begin
IDocForm := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
v := VarArrayCreate([0, 0], VarVariant);
v[0] := strFormMAT; //string html
IDocForm.Write(PSafeArray(System.TVarData(v).VArray));
IDocForm.Close;
tmForm := (IDocForm.all.tags('FORM') as IHTMLElementCollection).Length;
SetLength(matFormsArray, 0); //matFormsArray = Global Array of Array
SetLength(matFormsArray, tmForm);
for q := 0 to tmForm -1 do
begin
SetLength(matFormsArray[q], 2);
FormItem := (IDocForm.all.tags('FORM') as IHTMLElementCollection).item(q, 0);
xResF := '';
sTemp := FormItem.Name;
contCampos := FormItem.Length;
for j := 0 to contCampos - 1 do
begin
Field := FormItem.Item(j);
xResF := xResF + Field.Name + '=' + Field.Value;
if j < FormItem.Length - 1 then
xResF := xResF + '&';
end;
matFormsArray[q, 0] := sTemp;
matFormsArray[q, 1] := xResF;
end;
end;
strFormMAT =
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="fprin" id="fprin">
<input type="hidden" name="field11" value="value11"></input>
<input type="hidden" name="field12" value="value12"></input>
<input type="hidden" name="field13" value="value13"></input>
</form>
<table>
<tr>
<td>Title</td>
<td>Title</td>
<td>Title</td>
<td>Title</td>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx1" id="xxx1">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field11" value="value11"></input>
<input type="hidden" name="field12" value="value12"></input>
<input type="hidden" name="field13" value="value13"></input>
<input type="hidden" name="field14" value="value14"></input>
</form>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx2" id="xxx2">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field21" value="value21"></input>
<input type="hidden" name="field22" value="value22"></input>
<input type="hidden" name="field23" value="value23"></input>
<input type="hidden" name="field24" value="value24"></input>
</form>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx3" id="xxx3">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field31" value="value31"></input>
<input type="hidden" name="field32" value="value32"></input>
<input type="hidden" name="field33" value="value33"></input>
<input type="hidden" name="field34" value="value34"></input>
</form>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx4" id="xxx4">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field41" value="value41"></input>
<input type="hidden" name="field42" value="value42"></input>
<input type="hidden" name="field43" value="value43"></input>
<input type="hidden" name="field44" value="value44"></input>
</form>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx5" id="xxx5">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field51" value="value51"></input>
<input type="hidden" name="field52" value="value52"></input>
<input type="hidden" name="field53" value="value53"></input>
<input type="hidden" name="field54" value="value54"></input>
</form>
</tr>
<tr>
<td>Value</td>
<td>Value</td>
<td>Value</td>
<form name="xxx6" id="xxx6">
<td>Value</td>
<td>Value</td>
<input type="hidden" name="field61" value="value61"></input>
<input type="hidden" name="field62" value="value62"></input>
<input type="hidden" name="field63" value="value63"></input>
<input type="hidden" name="field64" value="value64"></input>
</form>
</tr>
</table>
</body>
</html>
我在 Thread 中使用过程调用Synchronize(GetForms);
,然后崩溃和缓慢。
我的问题是没有获取html,它已经启动并运行,问题是提取html的形式,这个过程很慢