我有一个 Id 映射缓存,它占用了太多内存。它用于容纳对象的 3 种不同类型的 Id 的组合,并且它们的映射从表中读取,并缓存在 6 个不同的字典中,以便从任何一种 Id 类型快速查找/翻译到另一种(性能是对我的申请很重要)。
我想将它重写为内存占用更小的东西,所以我确实实现了 Id 的合并列表,并使用 linq/lambda 表达式来提取我想要的值。现在看起来像这样。
public struct IdMappings
{
public int Id1;
public int Id2;
public int Id3;
}
//new cache
private static List<IdMappings> AllIdMappings = null;
//current cache implementation
private static Dictionary<int, int> Id1ToId2 = null;
private static Dictionary<int, int> Id1ToId3 = null;
//etc.
public static void FillCache(DataSet data)
{
foreach (DataRow r in data.Tables[0].Rows)
{
//fill list and/or dictionaries with id's
}
}
示例查找将是:
public static int GetId2FromId1(int id1)
{
return AllIdMappings.FirstOrDefault(m => m.Id1 == id1).Id2;
//or
return Id1ToId2[id1];
}
这在减少内存使用方面满足了我的需求,但是查找的性能因此受到影响,所以我正在研究如何实现不同的东西。有没有办法进行多索引键或多键查找比遍历列表相对更快?