| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Бинарные данные в Axapta
			 
			
			Есть функция в dll (ZLIB), которая возвращает бинарные данные. Функция корректно работает, но проблема в том, как достать полученные данные из класса Binary. 
		
		
		
		
		
		
		
	Вариант скопировать в контейнер вот так: X++: for (i=0;i<sizeBuf.dWord(0);i++)
  ret+=outBuf.byte(i);Подстажите, пожалуйста, способ ускорить данный процесс. Темы: Binary -> Container и container -> image и Axapta и BLOB поля    смотрел, но так и не нашел ответа на свой вопрос.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			копировать в массив с помощью \System Documentation\Classes\Binary\binary() ?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	-ТСЯ или -ТЬСЯ ?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
 
		
				__________________ 
		
		
		
		
	-ТСЯ или -ТЬСЯ ?  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Переброска в массив (экземпляр класса 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); } } Я бы рекомендовал выносить сложные расчетный задачи во внешний код (dll или COM), а в Axapta'у передавать уже результат. 
				__________________ 
		
		
		
		
		
			Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 09.04.2007 в 10:04. Причина: очепятка  | 
| 
	
 |