AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2004, 15:29   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
? Почему такое расхождение в скорости выполнения
Я не понимаю механизм доступа к данным в Axapta 2.5 Сделал простенький тест

PHP код:
static void Job_test(Args _args)
{
    
Connection      Con = new Connection();
    
Statement       Stmt Con.createStatement();
    
ResultSet       R;
    
CommaIo         fileOut;
    
int             timenowBegini;
    
InventTable     inventTable;

;

    
// Формирование ResultSet
    
fileOut = new CommaIo("C:\test_con.txt","W");
    
timenowBegin=timenow();
    
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");
    
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 сделать выброс из этой таблицы в текстовый файл

Но это достаточно сложно по исполнению, поэтому не хотелось бы этого делать.

Меня интересует, почему есть такое явное расхождение в скорости обработки казалось бы одинаковых операций?
Теги
profiler, sql, полезное, производительность, профайлер

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расхождение суммы проводки по поставщику и сопоставленной суммы petr DAX: Функционал 2 15.10.2008 23:31
Почему loka DAX: Программирование 2 01.12.2005 17:36
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Профили выполнения проводки George V. Tavrizoff DAX: Функционал 8 07.09.2004 16:56
Можно ли проследить историю выполнения заказа? Hard DAX: Функционал 3 14.08.2003 10:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:43.