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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.04.2007, 09:37   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Бинарные данные в Axapta
Есть функция в dll (ZLIB), которая возвращает бинарные данные. Функция корректно работает, но проблема в том, как достать полученные данные из класса Binary.
Вариант скопировать в контейнер вот так:
X++:
for (i=0;i<sizeBuf.dWord(0);i++)
  ret+=outBuf.byte(i);
работает очень долго т.к. объем данных очень большой.

Подстажите, пожалуйста, способ ускорить данный процесс.

Темы: Binary -> Container и container -> image и Axapta и BLOB поля
смотрел, но так и не нашел ответа на свой вопрос.
Старый 05.04.2007, 10:19   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Есть функция в dll (ZLIB), которая возвращает бинарные данные.
..
Вариант скопировать в контейнер вот так:
..
работает очень долго т.к. объем данных очень большой.
Подстажите, пожалуйста, способ ускорить данный процесс.
копировать в массив с помощью \System Documentation\Classes\Binary\binary() ?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 05.04.2007, 10:27   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Vadik Посмотреть сообщение
копировать в массив с помощью \System Documentation\Classes\Binary\binary() ?
С этого места по подробнее, пожалуйста.

Как с помощью метода
X++:
public void binary(int _offset, Binary _value)
скопировать данные в массив?
Старый 05.04.2007, 15:43   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Как с помощью метода
X++:
public void binary(int _offset, Binary _value)
скопировать данные в массив?
звиняйте, бес попутал - по памяти отвечал, по аналогии с COMVariant.safeArray()
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.04.2007, 11:51   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Переброска в массив (экземпляр класса Array) мало чем поможет.
Дело в том, что скорость доступа к элементам массива равна скорости доступа к элементам Binary. Т.е. для массива, в итоге, время будет больше - за счет прибавки времени конвертации (у меня получилось дополнительно порядка 400 мс на мегабайт).

Но задачу в том виде, что вы привели, можно ускорить процентов на 40 просто за счет обращение не к byte(), а к dWord()
Примерно так
X++:
int sizeDiv4;
int sizeMod4;
int val;
int size;
;
...
sizeDiv4 = sizeBuf.dWord(0) div 4;
sizeMod4 = sizeBuf.dWord(0) mod 4;
size = sizeDiv4 + (sizeMod4 ? 1 : 0);
for (i=0;i<size;i++)
{
    if (sizeDiv4 > i)
    {
        val = outBuf.dword(i * 4);
        k += val & 0xff;
        k += val >> 8 & 0xff;
        k += val >> 16 & 0xff;
        k += val >> 24 & 0xff;
    }
    else
    {
        k += outBuf.byte(i * 4);
        if (sizeMod4 > 1)
            k += outBuf.byte(i * 4 + 1);
        if (sizeMod4 > 2)
            k += outBuf.byte(i * 4 + 2);
    }
}
PS Вообще, Axapta не рекордсмен по производительности в плане выполнения тех же математических операций.
Я бы рекомендовал выносить сложные расчетный задачи во внешний код (dll или COM), а в Axapta'у передавать уже результат.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 09.04.2007 в 10:04. Причина: очепятка
Теги
binary, dll, указатели

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta и Ин. языки SIRS DAX: Администрирование 4 01.03.2006 10:02
Русские демо-данные для Axapta 3.0 2b4fITin DAX: Администрирование 16 15.01.2004 14:01
не получается синхронизировать данные из Outlook в Axapta alpin DAX: Функционал 12 14.01.2004 16:22
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:01.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.