Skip to content

Commit

Permalink
修复 重复加载插件后卸载内存溢出
Browse files Browse the repository at this point in the history
  • Loading branch information
MakesYT committed Feb 24, 2025
1 parent 4b32108 commit 04aadad
Showing 1 changed file with 22 additions and 8 deletions.
30 changes: 22 additions & 8 deletions Core/SDKs/Services/Plugin/PluginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
using System.IO.Compression;
using System.Reflection;
using System.Text;
using AvaloniaEdit.Utils;

using CommunityToolkit.Mvvm.Messaging;
using Core.SDKs.CustomScenario;
using Core.SDKs.Services.Config;
using Core.SDKs.Services.Onnx;
using Core.ViewModel.Pages;
using log4net;
using Microsoft.Extensions.DependencyInjection;
Expand Down Expand Up @@ -37,12 +38,12 @@ public static void Init()
{
PluginCore.Kitopia.ISearchItemTool =
(ISearchItemTool)ServiceManager.Services.GetService(typeof(ISearchItemTool))!;
PluginCore.Kitopia.IClipboardService = ServiceExtensions.GetService<IClipboardService>(ServiceManager.Services);
PluginCore.Kitopia.IClipboardService =ServiceManager.Services.GetService<IClipboardService>()!;
PluginCore.Kitopia.IToastService = (IToastService)ServiceManager.Services.GetService(typeof(IToastService))!;
PluginCore.Kitopia._i18n = CustomScenarioGloble._i18n;
PluginCore.Kitopia.ToolTipConverters = CustomScenarioGloble.ToolTipConverters;
PluginCore.Kitopia.JsonConverters = CustomScenarioGloble.JsonConverters;
PluginCore.Kitopia.InferenceSessionManager = ServiceExtensions.GetService<IInferenceSessionManager>(ServiceManager.Services);
PluginCore.Kitopia.InferenceSessionManager = ServiceManager.Services.GetService<InferenceSessionManager>()!;
Load(true);
}

Expand Down Expand Up @@ -144,13 +145,22 @@ public static Type GetType(string[] strings)

public static void EnablePlugin(PluginLocalInfo pluginInfoEx)
{
if (EnablePlugins.ContainsKey(pluginInfoEx.ToPlgString()))
{
return;
}
EnablePluginWithoutReloadOthers(pluginInfoEx);
CustomScenarioManger.ReCheck(true);
WeakReferenceMessenger.Default.Send(
new PluginStateChanged(pluginInfoEx.PluginBaseInfo.NameSign));
}
public static void EnablePluginWithoutReloadOthers(PluginLocalInfo pluginInfoEx)
{
if (EnablePlugins.ContainsKey(pluginInfoEx.ToPlgString()))
{
return;
}

EnablePlugins.Add(pluginInfoEx.ToPlgString(),
new Plugin(pluginInfoEx));
ConfigManger.Config.EnabledPluginInfos.Add(pluginInfoEx.PluginBaseInfo);
Expand Down Expand Up @@ -265,7 +275,7 @@ public static (bool, ConcurrentDictionary<string, VersionCheckResult>) CheckDepe
var onlinePluginInfo = await GetOnlinePluginInfo(pluginSignName);
if (onlinePluginInfo is null)
{
ServiceExtensions.GetService<IToastService>(ServiceManager.Services)
ServiceManager.Services.GetService<IToastService>()
.Show("自动下载插件失败", $"未找到ID:{pluginSignName}的插件");
canLoad = false;
results.TryAdd(pluginSignName, VersionCheckResult.依赖远端不存在);
Expand All @@ -277,12 +287,12 @@ public static (bool, ConcurrentDictionary<string, VersionCheckResult>) CheckDepe

if (downloadPluginOnline)
{
ServiceExtensions.GetService<IToastService>(ServiceManager.Services)
ServiceManager.Services.GetService<IToastService>()
.Show("自动下载插件成功", $"已自动下载并启用{onlinePluginInfo.Name}");
}
else
{
ServiceExtensions.GetService<IToastService>(ServiceManager.Services)
ServiceManager.Services.GetService<IToastService>()
.Show("自动下载插件失败", $"下载ID:{pluginSignName}的插件时遇到错误");
results.TryAdd(pluginSignName, VersionCheckResult.依赖下载失败);
}
Expand Down Expand Up @@ -608,16 +618,20 @@ public static async Task<bool> Update(int pluginId, string pluginSign, int? targ
{
return false;
}
UnloadPlugin(pluginLocalInfoByPlgStr);
await UnloadPlugin(pluginLocalInfoByPlgStr);

if (pluginLocalInfoByPlgStr.UnloadFailed)
{
await File.WriteAllTextAsync($"{pluginLocalInfoByPlgStr.Path}.update", targetVersionId.ToString());
}
else
{
await PluginManager.DownloadPluginAndEnable(pluginLocalInfoByPlgStr.PluginBaseInfo.Id,
var downloadPluginAndEnable = await PluginManager.DownloadPluginAndEnable(pluginLocalInfoByPlgStr.PluginBaseInfo.Id,
pluginLocalInfoByPlgStr.PluginBaseInfo.NameSign, targetVersionId);
if (!downloadPluginAndEnable)
{
ServiceManager.Services.GetService<IToastService>()!.Show("更新插件失败", $"更新插件{pluginLocalInfoByPlgStr.PluginBaseInfo.Name}失败");
}
}
}
catch (Exception e)
Expand Down

0 comments on commit 04aadad

Please sign in to comment.