Для начала можно избавиться от второго вызова getFirst. Так должен висеть в два раза быстрее
X++:
c = _fds.getFirst(1, 1);
if (c == NULL)
c = _fds.cursor();
while (c)
{
// ...
c = _fds.getNext();
}
Но это так, оптимизация, проблему это не решит. Возможно причиной подвисания является отсутствие индекса на таблице. У вас источник данных отфильтрован или отсортирован по каким-либо полям? Создайте соответствующий индекс на таблице.