Я не понимаю механизм доступа к данным в Axapta 2.5 Сделал простенький тест
PHP код:
static void Job_test(Args _args)
{
Connection Con = new Connection();
Statement Stmt = Con.createStatement();
ResultSet R;
CommaIo fileOut;
int timenowBegin, i;
InventTable inventTable;
;
// Формирование ResultSet
fileOut = new CommaIo("C:\test_con.txt","W");
timenowBegin=timenow();
R = Stmt.executeQuery('SELECT TOP 1000 * FROM InventTable');
while ( R.next() )
{
fileOut.write(R.getString(1),
R.getString(2),
R.getString(3),
R.getString(4),
R.getString(5),
R.getString(6),
R.getString(7),
R.getString(8),
R.getString(9),
R.getString(10),
R.getString(11),
R.getString(12),
R.getString(13),
R.getString(14),
R.getString(15),
R.getString(16),
R.getString(17),
R.getString(18),
R.getString(19),
R.getString(20) );
}
info("Время сброса ResultSet = "+int2str(timenow()-timenowBegin));
Stmt.close();
// Чтение из табличной переменной
fileOut = new CommaIo("C:\test_sel.txt","W");
i = 0;
timenowBegin=timenow();
select * from inventTable;
while (i<=1000)
{
i++;
next inventTable;
fileOut.write(inventTable.ItemGroupID,
inventTable.ItemID,
inventTable.ItemName,
inventTable.ItemType,
inventTable.PURCHMODEL,
inventTable.HEIGHT,
inventTable.WIDTH,
inventTable.SALESMODEL,
inventTable.COSTGROUPID,
inventTable.REQGROUPID,
inventTable.PRIMARYVENDORID,
inventTable.NETWEIGHT,
inventTable.DEPTH,
inventTable.UNITVOLUME,
inventTable.BOMUNITID,
inventTable.DENSITY,
inventTable.SCRAPTYPEID,
inventTable.DIMENSION[1],
inventTable.DIMENSION[2],
inventTable.DIMENSION[3] );
}
info("Время сброса прямого сканирования = "+int2str(timenow()-timenowBegin));
}
Получил расхождение в скорости примерно на порядок (если увеличить число выбрасываемых полей или количество строк это будет заметнее). Т.е. выброс в текстовый файл из ResulSet примерно на порядок
МЕДЛЕННЕЕ, чем тот же выброс из табличной переменной. Почему собственно?
Собственно, изначально вопрос возник в попытке ускорить выброс результата выборки в текстовый файл. Выполнение Query с последующим циклом оказалось сопоставимо по времени с выбросом из ResulSet (примерно одинаково). Т.е. наиболее оптимальным по скорости оказалась такая технология:
-) Создать таблицу на сервере
-) Выполнить хранимую процедуру сервера по наполнению этой таблицы
-) Средствами Axapta сделать выброс из этой таблицы в текстовый файл
Но это достаточно сложно по исполнению, поэтому не хотелось бы этого делать.
Меня интересует, почему есть такое явное расхождение в скорости обработки казалось бы одинаковых операций?