나는이 문제가 TStringGrid에이 숫자를 추가 한 것이 아닌 것으로 생각합니다.
100K 행을 추가하는 데 1 초 (700ms)가 걸리지 않습니다 (고급형 PC가 아닌 듀얼 코어 만 사용).
procedure TForm1.btn1Click(Sender: TObject);
Const
arr : array[1..5] of string = ('One','Two','Three','Four','Five');
Rows = 100000;
var
I: Integer;
F,E : Integer;
begin
StringGrid1.RowCount := Rows;
F := GetTickCount;
for I := 0 to Rows do
begin
StringGrid1.Cells[1,I] := Arr[1] + IntToStr(I);
StringGrid1.Cells[2,I] := Arr[2]+ IntToStr(I);
StringGrid1.Cells[3,I] := Arr[3]+ IntToStr(I);
StringGrid1.Cells[4,I] := Arr[4]+ IntToStr(I);
StringGrid1.Cells[5,I] := Arr[5]+ IntToStr(I);
end;
E := GetTickCount;
ShowMessage(Inttostr(E-F));
end;
코드 속도가 느린 것 같습니까? 데이터베이스에서 데이터를 가져 옵니까? 그렇다면 코드의 병목 현상이 발생하며 사용자에게 표시 할 WHATEVER GRID에 50k를 추가합니다. "나쁜 습관".
그리고 코드를 표시하지 않고 느린 이유를 설명하기가 어렵습니다.
코드가 왜 느린 지 알 수없는 경우 몇 가지 코드를 게시해야합니다. –
먼저 50K 행을로드해야하는 이유는 무엇입니까? 화면에 한 번에 25-50 개 정도만 표시 할 수 있습니까? 두 번째로 시스템 (또는 가상 머신)의 메모리 용량과 50K 행의 용량을 알려주지 않았습니다. 시스템 메모리 이상을 필요로한다면 "가상 메모리"가 작동하여 HDD를 사용할 것입니다. , 아마 어쩌면 당신의 SSD) RAM보다 느리다. 내 발언을 공격으로 생각하지 마라, 나는 당신의 문제를 이해하려고 노력하고있다. – ComputerSaysNo
+1 충분히 공정한 질문입니다. 나는 20-50 개의 행만 표시 할 수 있지만 어딘가에 데이터가 "필요"합니다. Mayeb 나는 문자열 격자가 아닌 DB에 넣을 수도 있고 아니면 내 프로그램에 그대로두고 db를 사용하지 않을 수도 있습니다. 어느 경우 든 두 세트의 데이터를 갖게 될 것입니다. 여기에는 50 개의 행을 유지하는 문자열 격자와 나머지를 유지하는 soemwhere가 있으며, 이들을 동기화하는 데 까다로운 코드가 필요합니다. 내가 왜이 질문을하고 있는지를 반영하는 잘 만들어진 견해. – Mawg