2013-03-24 2 views
6

Обработка данных с помощью программ XE3 занимает в 10 раз больше, чем с теми же программами, скомпилированными с XE2. Это известная проблема (вероятно, относится главным образом к TStringField), доводится до QC 111942, но пока не исправлена. У кого-нибудь есть исправление/обход проблемы для этой проблемы?Delphi XE3 - проблема с производительностью с TDataSet

ТИА Бранко

+0

IMHO Ваша единственная надежда заключается в том, чтобы понизить или использовать какой-либо компонент таблицы сторонних компонентов – ComputerSaysNo

+0

@ComputerSaysNo - проблема не в TClientDataset, я даже не использую CDS – Branko

ответ

0

же в xe5. Кроме того, дополнительный трафик и все это клиент-серверная вещь требуют> 5 Мбит в секунду (!) Для нормальной работы. Я использую только TFDConnection и TFDQuery. Специально для MySQL скорость совпадает с компонентами Delphi и с сторонним драйвером (libmysql.dll). Если у вас нет FireDAC, вы можете заменить TFDQuery на TSQLQuery. Ниже приведен порядок заполнения сетки:

procedure SelGrid(sql:ansiString;Q:TFDQuery;grid:TStringGrid); 
var i: integer; 
begin 
    Q.Close; 
    Q.SQL.Text:=''; 
    Q.Open(sql); 
    grid.ColCount:=Q.FieldCount; 
    grid.RowCount:=1; 
    while not Q.Eof do begin 
    for i := 0 to grid.ColCount-1 do grid.Cells[i,grid.RowCount-1]:=Q.Fields.Fields[i].AsString; 
    grid.RowCount:=grid.RowCount+1; 
    Q.Next; 
    end; 
    Q.Close; 
    if grid.RowCount>1 then grid.RowCount:=grid.RowCount-1; 
    grid.Row:=0; 
    //AutoSizeGridColumns(grid,30,200); 
end; 

Это сетка строк VCL. Конечно, вы имеете дело с обновлениями и так далее, но у вас не будет проблем с производительностью.

+0

Элемент QC 111942 отмечен как разрешенный в XE4. Вы уверены, что это та же проблема? (Ввод WC включает тестовое приложение для измерения производительности для этой конкретной проблемы) – mjn

+0

Нет, я не уверен, но с MySQL5 у меня были проблемы с производительностью, которые исчезли с сторонним подключением. После этого я начал пытаться и обнаружил, что с TFDConnection и TFDQuery производительность такая же, как libmysql.dll, поэтому я перестроил приложение с TFDConnection и TFDQuery. Теперь я не имею дело с базами данных, так что это была просто старая память. – LHristov

Смежные вопросы