Optimize db read

This commit is contained in:
DHR60 2026-02-28 16:37:12 +08:00
parent ec2367dc88
commit fd577933f2
5 changed files with 26 additions and 44 deletions

View file

@ -248,6 +248,24 @@ public sealed class AppManager
return items.ToDictionary(it => it.IndexId); return items.ToDictionary(it => it.IndexId);
} }
public async Task<List<ProfileItem>> GetProfileItemsOrderedByIndexIds(IEnumerable<string> indexIds)
{
var idList = indexIds.Where(id => !id.IsNullOrEmpty()).Distinct().ToList();
if (idList.Count == 0)
{
return [];
}
var items = await SQLiteHelper.Instance.TableAsync<ProfileItem>()
.Where(it => idList.Contains(it.IndexId))
.ToListAsync();
var itemMap = items.ToDictionary(it => it.IndexId);
return idList.Select(id => itemMap.GetValueOrDefault(id))
.Where(item => item != null)
.ToList();
}
public async Task<ProfileItem?> GetProfileItemViaRemarks(string? remarks) public async Task<ProfileItem?> GetProfileItemViaRemarks(string? remarks)
{ {
if (remarks.IsNullOrEmpty()) if (remarks.IsNullOrEmpty())

View file

@ -52,10 +52,10 @@ public class GroupProfileManager
return false; return false;
} }
foreach (var child in childIds) var childItems = await AppManager.Instance.GetProfileItemsByIndexIds(childIds);
foreach (var childItem in childItems)
{ {
var childItem = await AppManager.Instance.GetProfileItem(child); if (await HasCycle(childItem.IndexId, childItem?.GetProtocolExtra(), visited, stack))
if (await HasCycle(child, childItem?.GetProtocolExtra(), visited, stack))
{ {
return true; return true;
} }
@ -103,17 +103,7 @@ public class GroupProfileManager
return []; return [];
} }
var profileMap = await AppManager.Instance.GetProfileItemsByIndexIdsAsMap(childProfileIds); var ordered = await AppManager.Instance.GetProfileItemsOrderedByIndexIds(childProfileIds);
var ordered = new List<ProfileItem>(childProfileIds.Count);
foreach (var id in childProfileIds)
{
if (id != null && profileMap.TryGetValue(id, out var item) && item != null)
{
ordered.Add(item);
}
}
return ordered; return ordered;
} }

View file

@ -99,15 +99,8 @@ public class AddGroupServerViewModel : MyReactiveObject
Filter = protocolExtra?.Filter; Filter = protocolExtra?.Filter;
var childIndexIds = Utils.String2List(protocolExtra?.ChildItems) ?? []; var childIndexIds = Utils.String2List(protocolExtra?.ChildItems) ?? [];
foreach (var item in childIndexIds) var childItemList = await AppManager.Instance.GetProfileItemsOrderedByIndexIds(childIndexIds);
{ ChildItemsObs.AddRange(childItemList);
var child = await AppManager.Instance.GetProfileItem(item);
if (child == null)
{
continue;
}
ChildItemsObs.Add(child);
}
} }
public async Task ChildRemoveAsync() public async Task ChildRemoveAsync()

View file

@ -255,19 +255,7 @@ public class ProfilesSelectViewModel : MyReactiveObject
{ {
return null; return null;
} }
var lst = new List<ProfileItem>(); var lst = await AppManager.Instance.GetProfileItemsOrderedByIndexIds(SelectedProfiles.Select(sp => sp?.IndexId));
foreach (var sp in SelectedProfiles)
{
if (string.IsNullOrEmpty(sp?.IndexId))
{
continue;
}
var item = await AppManager.Instance.GetProfileItem(sp.IndexId);
if (item != null)
{
lst.Add(item);
}
}
if (lst.Count == 0) if (lst.Count == 0)
{ {
NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer); NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer);

View file

@ -456,14 +456,7 @@ public class ProfilesViewModel : MyReactiveObject
var orderProfiles = SelectedProfiles?.OrderBy(t => t.Sort); var orderProfiles = SelectedProfiles?.OrderBy(t => t.Sort);
if (latest) if (latest)
{ {
foreach (var profile in orderProfiles) lstSelected.AddRange(await AppManager.Instance.GetProfileItemsOrderedByIndexIds(orderProfiles.Select(sp => sp?.IndexId)));
{
var item = await AppManager.Instance.GetProfileItem(profile.IndexId);
if (item is not null)
{
lstSelected.Add(item);
}
}
} }
else else
{ {