From 5667aef495029977db206661dbd61679397c566c Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Sat, 13 Jun 2026 09:42:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20OnDisable=20+=20Dispose=20=E6=9B=BF?= =?UTF-8?q?=E4=BB=A3=20OnDestroy=20+=20Close=EF=BC=8C=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?domain=20reload=20SQLite=20=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OnDisable 在 domain reload 前触发,Dispose() 清理 prepared statements 并调用 GC.SuppressFinalize,阻止 GC finalizer 线程崩溃 --- .../CounterDrone.Core/CounterDrone.Core.dll | Bin 116736 -> 116736 bytes .../Assets/Scripts/Managers/GroupManager.cs | 2 +- .../Assets/Scripts/Managers/ModelManager.cs | 2 +- .../Assets/Scripts/Managers/ReportManager.cs | 2 +- .../Scripts/Managers/ScenarioManager.cs | 2 +- .../Scripts/Managers/SimulationRunner.cs | 3 ++- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll index ad033a2fa3b94ee4678230d31b4e2b440145ae17..50ae5277897f3a0ca0ef4d75660b42e8ac6d7cbf 100644 GIT binary patch delta 247 zcmZpez}_%{eL@Gz*-NW_H1=%mVVp5vpmZCG2OZoGGC4yg++<^g+g} z%>EV(#tddan8c9AkPIX(fqWw{GzF3-42cXDK-v;WS~8e3qyj}!fnte3GMT{uNSg!o Um;hO(K>Y>`Y1`|MGBz>+0HP;UPyhe` delta 247 zcmZpez}_%{eL@Gz$FEgK8hf_(FwU4SPL%*e>pGSMi}Ff}dF)YQN{%_0pbYLH}TYLRNPy=x!iB}SH>&o$epCmdi5 z5K#G=DBAJD*KhugOJ^;0 _db?.Close(); + void OnDisable() { _db?.Dispose(); _db = null; } public Group Create(string name, GroupType type, string desc = "") => _service.CreateGroup(name, type, desc); diff --git a/src/Unity/Assets/Scripts/Managers/ModelManager.cs b/src/Unity/Assets/Scripts/Managers/ModelManager.cs index cc009ac..6a41157 100644 --- a/src/Unity/Assets/Scripts/Managers/ModelManager.cs +++ b/src/Unity/Assets/Scripts/Managers/ModelManager.cs @@ -24,7 +24,7 @@ namespace CounterDrone.Unity _service = new ModelService(new ModelRepository(_db), _paths); } - void OnDestroy() => _db?.Close(); + void OnDisable() { _db?.Dispose(); _db = null; } public ModelInfo Import(string filePath, string name) => _service.ImportModel(filePath, name); public void Delete(string id) => _service.DeleteModel(id); diff --git a/src/Unity/Assets/Scripts/Managers/ReportManager.cs b/src/Unity/Assets/Scripts/Managers/ReportManager.cs index 288415b..ec8fa54 100644 --- a/src/Unity/Assets/Scripts/Managers/ReportManager.cs +++ b/src/Unity/Assets/Scripts/Managers/ReportManager.cs @@ -22,7 +22,7 @@ namespace CounterDrone.Unity _service = new ReportService(_db, _paths); } - void OnDestroy() => _db?.Close(); + void OnDisable() { _db?.Dispose(); _db = null; } public SimulationReport Generate(string taskId, TaskFullConfig cfg, List events, string status, float duration) => _service.Generate(taskId, cfg, events, status, duration); diff --git a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs index e729f51..92a462f 100644 --- a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs +++ b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs @@ -35,7 +35,7 @@ namespace CounterDrone.Unity } } - void OnDestroy() => _db?.Close(); + void OnDisable() { _db?.Dispose(); _db = null; } public SimTask CreateTask(string name, string number) => _service.CreateTask(name, number); public void DeleteTask(string id) => _service.DeleteTask(id); diff --git a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs index 87e0b40..c3d471b 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs @@ -149,7 +149,8 @@ namespace CounterDrone.Unity } public void Stop() => _engine?.Stop(); - void OnDestroy() { Stop(); _db?.Close(); } + void OnDisable() { _db?.Dispose(); _db = null; } + void OnDestroy() => Stop(); private void SpawnDroneVisual(DroneEntity drone) {