Hey everyone, sorry if this questions seems a bit “dumb”, but I honestly have no clue what its answer is.
So, in one of my server modules, I create an object rather frequently. (Not a physical object, rather a “class” /oop object in memory)
Once this object is created though, I want to dispose it after x seconds(in my case x is set to 120 seconds or 2 minutes)
However, I’m not sure if it’s better to tie this module to RunService.Stepped and dispose of the object after time elapsed since it was created: i.e
-- On stepped
for i,v in pairs(objects) do
if tick()-v.TimeCreated >= TIME_TO_REMOVE then
v:Dispose();
end
end
OR
Using delay or a coroutine to accomplish this
-- After object is created in Object.new()
delay(TIME_TO_REMOVE,function() self:Dispose(); end)
I just worry about creating so many threads so often, I’m not sure if it has any big performance impact and I assume that’s what delay(fn) is doing but I don’t know the internals
I’d really appreciate it if someone could let me know if there’s any real difference, and what is best to use for my case. Thanks!
Debris:AddItem is for physical objects/instances, like BaseParts, etc.
Unless you mean creating a temporary physical instance, add it to Debris, and dispose my object when
instance:GetPropertyChangedSignal(“Parent”) says it’s been deleted
delay does not necessarily resume at the time you expect (similar to spawn, wait, or when using coroutines). If there is a lot of other thread resume work going on, the scheduler might decide to postpone it to a later frame. In that sense, there is definitely a difference between 1 and 2, namely that 1 will dispose as soon as possible, and 2 will be slightly more performant but will not always dispose at the soonest possible moment.
A possible further optimization would be to use an object pool, thus saving you time spent destroying and creating the objects at the expense of memory.