我不認爲Application.ProcessMessages
會在這裏幫助,因爲所有的工作都發生在Assign
的一次調用中。
請問SynEditLog
有BeginUpdate
/EndUpdate
方法嗎?我會使用它們,看看你如何去。例如:
SynEditLog.BeginUpdate;
try
SynEditLog.Lines.Assign(str);
finally
SynEditLog.EndUpdate;
end;
針對這一不工作
你需要字符串列表的任務分解到Lines屬性。事情是這樣的:
var
LIndex: integer;
begin
SynEditLog.BeginUpdate;
try
//added: set the capacity before adding all the strings.
SynEditLog.Lines.Capacity := str.Capacity;
for LIndex := 0 to str.Count - 1 do
begin
SynEditLog.Lines.Add(str[LIndex]);
if LIndex mod 100 = 0 then
Application.ProcessMessages;
end;
finally
SynEditLog.EndUpdate;
end;
end;
(注意:直接輸入到瀏覽器的代碼,可能無法編譯)
如果太慢,嘗試增加LIndex mod 100 = 0
更大的東西,像1000或5000甚至
N @
來源
2011-07-18 03:44:47
Nat
爲什麼首先加載到字符串列表中?爲什麼不直接加載控制?我敢打賭,TMemo可以在8秒內裝載30 000行。 –
我在那裏做一些操作。不要緊。我檢查過。如果直接做 - 同一時間。 – maxfax