This has been a hard problem to diagnose and I was hoping someone could help me out.
We have an AIR app (http://www.trainerroad.com) that uses Native Process to read data from a command line that comes from a USB stick. It’s a cycling app the data is heart rate, cadence, speed and power.
While someone workouts, we record that data to a sqlite database every second. We have a sqlite connection to the database. We have a timer that ticks every second and that’s what triggers our inserts.
We have a few hundred users. A few of them have seen it where the app will run for 45 minutes fine, then hang for 30 seconds to a couple minutes. Then, it will release and the clock in the workout will tick down really fast. That means the timers are all getting hit.
This makes me think that something is hanging the app, but I can’t figure out what. The app executed the same code every second for 45 or so minutes, then suddenly freezes. (btw, it isn’t EVERY 45 minutes, but it does happen after the workout has been running for a while).
I’m thinking it has to do with SQLite. Maybe the database is being compacted while it’s being executed against? I’m stumped and I can’t reproduce this locally.
Does anyone have any ideas of how to debug this or what area of my app might be causing this? I know it’s a hard one.
update
I ran the memory profiler for 20 minutes while it was running and I didn’t see peak memory usage increase at all. I could tell it was garbage collecting by looking at the peak vs current memory usage.
I’ve added two system.gc() calls every 60 ticks. I’m hoping this doesn’t make it gittery, but I’m not doing much while it plays so I think I should be good. Not sure if this is what was causing the problem though.
It looks like the manual garbage collection has fixed the issue. We haven’t seen this since we put that upgrade in.