If you consume each browsed message before you call nextElement(), a new index snapshot must be internally created in order to get the next message. That might create the delays.
The way how you work with JMS seems to be suboptimal. Rather to retrieve a message by a browser, process it and at the end consume it, you may just consume regularly (and rollback if you can't process it). That's much, much faster. Further, a message retrieved by a browser is not for processing but for viewing (browsing). It is not locked and while you browse, another consumer can process is and so it will be processed multiple times if you misuse a browser for that.