using AuroraDesk.Core.Interfaces; using AuroraDesk.Core.Entities; using HeroIconsAvalonia.Enums; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; namespace AuroraDesk.Infrastructure.Services; /// /// 图标服务实现 /// public class IconService : IIconService { private readonly ILogger? _logger; private IEnumerable? _cachedIcons; public IconService(ILogger? logger = null) { _logger = logger; } public IEnumerable GetIcons() { // 如果缓存存在,直接返回 if (_cachedIcons != null) { return _cachedIcons; } // 缓存不存在,同步创建(操作很快,不需要异步) try { _logger?.LogInformation("开始加载 HeroIcons 图标"); // 优化:使用 LINQ 批量创建,比循环更快 var iconTypes = Enum.GetValues(typeof(IconType)).Cast().ToArray(); // 预分配容量,避免多次扩容 var icons = new List(iconTypes.Length * 2); // 使用 LINQ Select 批量创建,性能更好 var outlineIcons = iconTypes.Select(iconType => new HeroIconItem { IconType = iconType, IconKind = IconKind.Outline }); var solidIcons = iconTypes.Select(iconType => new HeroIconItem { IconType = iconType, IconKind = IconKind.Solid }); // 合并两个集合 icons.AddRange(outlineIcons); icons.AddRange(solidIcons); _cachedIcons = icons; _logger?.LogInformation("成功加载 {Count} 个 HeroIcons 图标", icons.Count); return icons; } catch (Exception ex) { _logger?.LogError(ex, "加载 HeroIcons 图标时发生错误"); return Enumerable.Empty(); } } }