-
> Экспорт через XLM без шаблона 250 поставь DisableControls ADODataSetSource-ру, сократишь до ~ 170 ти. но все одно "не догнать".
-
> > Кто врет? > ты конечно, т.к. утверждаешь это голословно, без показа > "как считается", и "что GetTickCount" (где GetTickCount- > ы поставил). >
Офис 2003 Кнопка 1 результат Экспорт через ADO 1187procedure TForm1.BADOClick(Sender: TObject);
var
i:integer;
t:Integer;
begin
t:=GetTickCount;
ADOConnectionSource.Execute(
'SELECT * INTO [Телефоны] IN \"'+GetCurrentDir+'\2.xls\" \"Excel 8.0;\" FROM QMain'
);
ShowMessage('Экспорт завершен');
Memo1.Lines.add('Экспорт через ADO '+IntToStr(GetTickCount-t));
Shellexecute(Application.Handle, 'open', PAnsiChar(GetCurrentDir+'\2.xls'), nil, nil, sw_ShowNormal);
end; Кнопка 2 Экспорт через XLM без шаблона 188procedure TForm1.BXMLWithOutShablonClick(Sender: TObject);
var
i,t:integer;
begin
t:=GetTickCount;
SourceDatasetInit;
XMLDocument1.Active:=false;
XMLDocument1.XML.Clear;
XMLDocument1.xml.Add('<?xml version=\"1.0\"?>');
XMLDocument1.xml.Add('<?mso-application progid=\"Excel.Sheet\"?>');
XMLDocument1.xml.Add('<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"');
XMLDocument1.xml.Add(' xmlns:o=\"urn:schemas-microsoft-com:office:office\"');
XMLDocument1.xml.Add(' xmlns:x=\"urn:schemas-microsoft-com:office:excel\"');
XMLDocument1.xml.Add(' xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"');
XMLDocument1.xml.Add(' xmlns:html=\"http://www.w3.org/TR/REC-html40\">');
XMLDocument1.xml.Add('</Workbook>');
XMLDocument1.Active:=true;
XMLDocument1.ChildNodes.Nodes['Workbook'].ChildNodes.Nodes['Worksheet'].Attribut es['ss:Name']:='Лист1';
with XMLDocument1.ChildNodes.Nodes['Workbook'].ChildNodes.Nodes['Worksheet'].ChildNod es.Nodes['Table'] do begin
Attributes['ss:ExpandedColumnCount']:=IntToStr(ADODataSetSource.FieldCount);
Attributes['ss:ExpandedRowCount']:=IntToStr(ADODataSetSource.RecordCount+1);
Attributes['x:FullColumns']:=1;
Attributes['x:FullRows']:=1;
AddChild('Column');
ChildNodes.Last.Attributes['ss:Index']:=2; ChildNodes.Last.Attributes['ss:Width']:=240; AddChild('Column');
ChildNodes.Last.Attributes['ss:Index']:=3;
ChildNodes.Last.Attributes['ss:Width']:=100; AddChild('Row');
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Телефон';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Имя';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Улица';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Дом';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Корпус';
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:='Квартира';
ADODataSetSource.First;
repeat
AddChild('Row');
for i:=0 to ADODataSetSource.FieldCount-1 do begin;
ChildNodes.Last.AddChild('Cell');
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].Attributes['ss:Type']:='Strin g';
ChildNodes.Last.ChildNodes.Last.ChildNodes['Data'].NodeValue:=ADODataSetSource.F ields[i].AsString;
end;
ADODataSetSource.Next;
until ADODataSetSource.Eof;
end;
XMLDocument1.SaveToFile(GetCurrentDir+'\1.xml');
Memo1.Lines.add('Экспорт через XLM без шаблона '+IntToStr(GetTickCount-t));
shellexecute(Application.Handle,'open',PAnsiChar(GetCurrentDir+'\1.xml'),nil,nil, sw_ShowNormal);
end;
-
GetTickCount в коде есть и там и там...
-
> sniknik © (13.01.11 12:26) [20]
У ADO время сокращается, если xls-файл создан изначально...
-
> ShowMessage('Экспорт завершен'); > Memo1.Lines.add('Экспорт через ADO '+IntToStr(GetTickCount-t));
ну я прям так и знал... измеряешь свое время реакции? два раза LoL
-
> ну я прям так и знал... измеряешь свое время реакции? два > раза LoL
ой.. ё... Ну все равно
Экспорт через ADO 265 Экспорт через CSV 250 :P
-
> sniknik (13.01.2011 08:04:17) [17]
А результаты огласить?
-
> sniknik (13.01.2011 12:23:19) [19]
Какой смысл считать в тиках, результаты будут сильно различаться от машине к машине. Считать надо с помощью аппаратного, системного таймера RDTSc. Результата тоже будут различаться но не значительно и не зависят от тактовой частоты, а только от модели процессора
-
> А результаты огласить? ~31 ("мой") vs ~256 ("его") +- конечно, т.е. вполне может и 78 vs 278 выдать.
сам можешь проверить скачав примеры из [7] (+ скопипастить туда код из [14])
> Какой смысл считать в тиках так, ради общего представления. не более.
> Считать надо с помощью вообще, тут бы нормально тысяч 20-100 записей, но есть только 135. не очень очевидный тест.
-
> вообще, тут бы нормально тысяч 20-100 записей, но есть только > 135. не очень очевидный тест. >
Я бы сказал что "пакетный" ввод тоже мало показателен...Если данные формируется динамически (для простоты, из файла читаем) то все таки надо не ADOConnectionSource.Execute(
'SELECT * INTO [Телефоны] IN \"'+GetCurrentDir+'\2.xls\" \"Excel 8.0;\" FROM QMain'
); измерять а серию insert-в
|