我在 ASP.NET 应用程序中有一个方法,它经常受到攻击,需要运行时缓存。它接受以下内容:
public List<ModelTwo> SomeMethod(List<ModelOne> models, List<Guid> guids)
我可以遍历每个列表,选择唯一值并连接成一个大字符串。但我想知道是否有更快、更有效的方法可以做到这一点?
如果这两个项目以某种方式相关,您可以创建一个类以使用唯一 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;
}
}