我已经实现了一个非常简单的查找缓存,以优化某些数据库实体的处理。缓存类如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SyncEngine.Caches
{
class TenantsCache : Cache
{
System.Collections.Generic.List<tenant> list;
public override void ReadFromDB()
{
using (var ctx = new MyContext())
{
this.list = ctx.tenants.ToList<tenant>();
}
}
public override void Add(object o)
{
list.Add((tenant)o);
}
public tenant LookupByFNandGID(string fn, int groupId)
{
tenant match = null;
foreach (tenant t in list)
{
if (t.friendlyName == fn && t.groupId == groupId) // <-- slowest line
{
match = t;
break;
}
}
return match;
}
}
}
通过分析CPU使用情况,我发现这个Lookup(特别是高亮线)占用了大量的处理时间。
在这里实现此查找/缓存和/或比较是否有更好,更有效的方法?是否有更高效的内置集合,并通过两个字段进行优化查找?
答案 0 :(得分:3)
您可以使用包含两个字段的自定义键创建词典:
Dictionary<Key, tenant> foo = new Dictionary<Key, tenant>();
然后你可以使用比列表更快的字典:
erb :myerb, locals: {text: "aaaaa", saved: false}