To keep the exact functionality you have here and increase performance, you actually want to use a Global Variable. GVs are a lot more efficient than FGV. Shamelss plug: A Look At Race Conditions
But the real question here is "What are you doing with the data?" I see nowhere that the data is being read. Do you need to process every sample? Or do you only care about the latest values?
A DVR, GV, and FGV are all lossy: you can miss writes. They only return the latest value. This is a form of a race condition.
Personally, I would use a Queue or User Event to send the data to whoever needs it. This way all of the data is processed, it is done quickly, and efficiently.
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
"Not that we are sufficient in ourselves to claim anything as coming from us, but our sufficiency is from God" - 2 Corinthians 3:5