This is a great tool. But I found it often crashed randomly after some hours or tens of hours running.
So I captured some memory dumps, and find out some finalizable objects does NOT dispose correctly and quickly. Too many Zeta.Game.Internals.SNO.SNORecordActor objects not freed on time.
From the source code, I think you should check Trinity manager code, for example : method UpdateAvoidances(void)。
if (flag6)
{
Core.Logger.Log(LogCategory.Avoidance, string.Format("Created new Avoidance from {0} RActorId={1} ({2}, Immune: {3})", new object[]
{
actor.InternalName,
actor.RActorId,
avoidance.Definition.Name,
avoidance.IsImmune
}), Array.Empty<object>());
this._cachedActors.Add(rActorId, actor);// Removed slowly or NOT removed.
this.CurrentAvoidances.Add(avoidance);
}
I attached 3 windbg simple log files, please check it.
please check 3 attached files. U can search: !finalizequeue, then check "Zeta.Game.Internals.SNO.SNORecordActor", # of these objects are : 5657, then 6165, then 6792. For the SNORecordActor, method Zeta.Game.Internals.SNORecord.Dispose() never be called.
So, I suggest u call this method before cache remove action, or ASAP remove this object from the cache.
So I captured some memory dumps, and find out some finalizable objects does NOT dispose correctly and quickly. Too many Zeta.Game.Internals.SNO.SNORecordActor objects not freed on time.
From the source code, I think you should check Trinity manager code, for example : method UpdateAvoidances(void)。
if (flag6)
{
Core.Logger.Log(LogCategory.Avoidance, string.Format("Created new Avoidance from {0} RActorId={1} ({2}, Immune: {3})", new object[]
{
actor.InternalName,
actor.RActorId,
avoidance.Definition.Name,
avoidance.IsImmune
}), Array.Empty<object>());
this._cachedActors.Add(rActorId, actor);// Removed slowly or NOT removed.
this.CurrentAvoidances.Add(avoidance);
}
I attached 3 windbg simple log files, please check it.
please check 3 attached files. U can search: !finalizequeue, then check "Zeta.Game.Internals.SNO.SNORecordActor", # of these objects are : 5657, then 6165, then 6792. For the SNORecordActor, method Zeta.Game.Internals.SNORecord.Dispose() never be called.
So, I suggest u call this method before cache remove action, or ASAP remove this object from the cache.






