从方法签名中的两个对象列表有效地创建缓存键

时间:2018-05-08 13:43:50

标签: c#

我在ASP.NET应用程序中有一个方法很受欢迎,需要运行时缓存。它接受以下内容:

public List<ModelTwo> SomeMethod(List<ModelOne> models, List<Guid> guids)

我可以遍历每个列表,选择唯一值并连接成一个大字符串。但是我想知道是否有更快更有效的方法呢?

1 个答案:

答案 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;
   }

}