SK> Возник вопрос, а возможно ли копировать значения
SK> из очереди в массив быстрее чем с использование
SK> стандартного оператора GET(Que,Ind)
Вообще-то, не так давно в этом списке уже был подобный вопрос. И ответ на него был вполне определенный — НЕТ.
MyQue QUEUE X SHORT END MyTmpArr SHORT,DIM(N) ! Число массива определяется числом записи очереди ... ! Заполнение очереди N - записей Далее нужно элементы очереди поместить в массив ! Сейчас делается так: SizeQue# = Records(MyQue) LOOP Ind#=1 TO SizeQue GET(MyQue,Ind#) MyTmpArr[Ind#] = MyQue.X END ... ! Использование массива
SK> Что то мне подсказывает, что если использовать
SK> внутренний механизм QUEUE и сделать проход по очереди
SK> через соответствующие указатели то будет побыстрее ….
SK> Попробовал пока не получается получить значение из записи,
SK> мож конечно что то не так делаю… и имеет ли это смысл ?
SK> Если возможно подскажи пожалуйста как это сделать …
SK> Если нет, то просьба сообщить чтоб зазря не париться…
Если поищешь в архивах данной рассылки или на общедоступных серверах по Клариону, то найдешь мои письма с описанием внутреннего строения и механизма работы Кларионовских очередей. Почитай внимательно и сам найдешь ответ на свой вопрос.
Если в младших версиях Клариона еще имело смысл получение указателя на определенную запись (и то лишь чисто в познавательных целях, так как GET() это делает так-же быстро и намного надежнее), то в последних версиях это просто бессмысленно! Все дело в том, что в очередях с размером записи больше 127 байт все записи хранятся в упакованном виде. Так что, даже если и получишь прямой указатель на нужную записи, то может возникнуть необходимость предварительно ее распаковать.
Но в любом случае GET() работает так-же быстро и уж точно более надежно чем обычная ручная выборка.
Да, еще забыл добавить, что в памяти записи хранятся не подряд, а в разнобой. Так что здесь не подойдет прямое копирование всех записей в массив, которое было-бы, конечно, намного быстрее GET().