我在ASP.NET应用程序中有一个方法很受欢迎,需要运行时缓存。它接受以下内容:
public List<ModelTwo> SomeMethod(List<ModelOne> models, List<Guid> guids)
我可以遍历每个列表,选择唯一值并连接成一个大字符串。但是我想知道是否有更快更有效的方法呢?
答案 0 :(得分:0)
如果这两个项目以某种方式相关,您可以创建一个类,将它们与唯一ID组合在一起。您可能需要编辑其中一些代码(我还没有对此进行编译),但您可以基本了解如何将两个集合与唯一ID(密钥)相关联,并将该密钥用于缓存。这比循环遍历列表并将其连接成一个大字符串更有效。
字符串是不可变的。意味着一旦创建它们就无法更改。因此,每次进行连接时,您实际上都在创建一个新字符串。如果您有很多值,这可能会降低性能。
public class MyValue
{
public guid key {get;set;}
public List<ModelOne> models {get;set;}
public List<Guid> guids {get;set;}
public void MyValue(List<ModelOne> modelsIn, List<Guid> guidsIn)
{
key = Guid.NewGuid();
models = modelsIn;
guids = guidsIn;
}
}
public Dictionary<Guid,MyValue> Cache = new Dictionary<Guid,MyValue>();
public List<ModelTwo> SomeMethod(MyValue valueIn)
{
MyValue val;
If(Cache.TryGetValue(valueIn.Key, value)
return Cache[valueIn.Key].models;
else
{
Do Stuf...
put in cache...
return value;
}
}