Another thing I should bring up is that WP8 XAML Silverlight based apps have performance issues in general. This is because there is only 1 Direct3D rendering context that must be shared between Corona and Microsoft’s XAML UI framework… and they are in direct competition for dominance of that one rendering resource. Other 3rd party SDKs, such as Unity, have this same issue (search their forums; a lot of them are getting less than 30 FPS). Unfortunately, if you want to use WP8’s native UI such as ad banners, text boxes, and other UI features, then you have no choice but to make it a Silverlight app. (Versus a pure C++ Direct3D app would not have this performance issue, but then you lose native UI and .NET support.)
On my Lumia 920, my framerate with a busy physics based app usually hovers around 45 FPS. Without physics, I get just over 50 FPS. I’ve also concluded that getting 60 FPS from a Silverlight based app on a Lumia 920 is impossible because the Direct3D rendering thread on WP8 (which is out of our control) has a nasty habit of rendering late every 4th frame. (Note that Microsoft considers my Lumia 920 a low-end device, so, the framerate we squeezed out of it might be considered good for what it is.)
Now, other Corona developers I’ve worked with have reported to me that the framerate is actually pretty good now. I’ve spent a considerable amount of time with a Corona developer named @whammy (one of our first beta developers) in squeezing out as much performance as we could get from a low-end WP8 device. He said he saw a noticeable improvement. Just out of interest, have your tried testing your app on a newer quad-core WP8 device? You should see a better framerate compared to what I’ve posted in my paragraph above.
One more thing. Setting up your app for 60 FPS *might* have a negative performance impact if you display native UI. The reason is because when you put Corona in 60 FPS mode, then we’ve set up our code internally to *dominate* the Direct3D thread to ensure that we can render as many frames as possible (otherwise Microsoft’s XAML framework will dominate it and prevent Corona from rendering in time). Some native UI, such as the WebBrowser control, are not affected. But a TextBox control with the native keyboard displayed will have cause a huge framerate impact and both Corona and the native UI will stutter for it. If your app tends to display a lot of native UI, then you should set up your app for 30 FPS, because that puts Corona in a mode to make it more native UI friendly. Meaning, we yield the Direct3D thread to the native UI and wait for it to give us that Direct3D resource when it’s ready. Unfortunately, this make framerates higher than 30 FPS impossible on our end. There is no solution to make it work both ways, so, this is the compromise we had to make. That said, displaying native UI in 60 FPS mode will probably look okay if your app is displaying a static/non-animated background, because then the dip in the framerate won’t be noticeable to the end-user.