The creation of the text bitmap via Microsoft’s Silverlight APIs is the cause of the performance issue. So, anytime you create a text object or update an existing text object’s text, Corona is forced to create a new bitmap to render text to and then push that new text bitmap to the GPU as a texture. It works this way on all platforms, and if you think about it, generating a new text bitmap/texture everytime you update text is an a generally expensive thing to do on all platforms as well. It just happens to be most expensive on WP8.
So, to recap, the following will cause a performance issue:
-
Creating a text object.
-
Updating a text object’s text.
-
Resuming your app while it is displaying text objects. (We’re forced to re-render all text since WP8 flushes all textures in the GPU when your app gets suspended. This happens on Android too.)
But that said, text objects have their advantages too. Since their text is rendered by the operating system, you’re leveraging Microsoft’s hard work in making text render correctly for all languages/locales. Particularly much more complex text such as Arabic/Asian where it’ll also handle text wrapping correctly for the different languages/locales. So, I would say text objects are appropriate for text that you rarely update or for text that comes from a source that is out of your control, like Facebook, Twitter, or other Internet sources.
For text that you update frequently, like an FPS framerate counter, bitmap font would provide the best performance. And bitmap font text is only appropriate for text that is under your control, because you need to ensure that each character is within your image sheet (aka: sprite sheet).
Regarding your scroll view, if the number of rows is hard coded, then perhaps a quick solution would be to pre-load all of your text objects and re-use them as they scroll back into view. Otherwise, bitmap font is the only solution that would yield best performance.