How to prevent too many "dropped items" in world?

Hi guys, I’m looking for some good tips. I have a (VR) open world game, and there are many different items you can carry around, use, trade etc. I imagine, that players will often discard or lose items, or simply not pick up stuff they find, so more and more of them will be “lying around”.
I can’t think of a smart way of tidying up or removing items that are left behind. Giving them a life span could result in items unintentionally being destroyed. Like, you can actually hold something in your hand for quite a while, and it should not be destroyed, because you are still holding onto it. But if it’s just lying there untouched, it should get destroyed after a while.
Of course I could set timers up, then check if the item is held or not, but I would have a lot of timers running all the time. Is there a smarter way of doing this?

Consider the following:

  • each item has a timestamp variable set when it’s dropped - a date time struct spat out by Now node
  • either give the dropped items a Dropped tag when they’re dropped, or add the items to a Dropped array
  • have a single timer periodically (every 10s perhaps) loop through the array (or get all actor with a tag)
  • Now - Time Stamp = Time Difference Threshold; destroy the item if the threshold was crossed

You may want to add a check for items old enough to be destroyed but still in the player’s fov, and skip them for now. Things popping out of existent in front of your eyes may be just too spooky.

This will not affect anything that the player is still holding as held items have yet to earn their Dropped tag; which can be, btw, removed when the item is picked up again.

If you have a lot (100s) of items to destroy, it may cause a stutter; instead of destroying them straightaway, add them to an array and use another timer to destroy them periodically, several at a time only.