I was doing some testing and noticed that flows are stored in memory even after they disappear.
for k,v in pairs(df.global.world.map.map_blocks) do
for kk,vv in pairs(df.global.world.map.map_blocks[k].flows) do
count = count + 1
A dragon on a burnination rampage can quickly rack up thousands of stored flows in memory, even though the flames disappear moments after being created.
I started a test fort, and verified that there were 0 flows on the map in the first few seconds. I then set the top of a small hill on fire with dfhack. After the smoke and flames were all gone, there were 1580 flows in memory. After saving the game, quitting DF, and then loading the game, there were still 1580 flows in memory.
This might mean that flows contribute to the FPS death of the game by accumulating to large numbers that each have to be checked for activity.