C# 从方法签名中的两个对象列表高效地创建缓存密钥

C# 从方法签名中的两个对象列表高效地创建缓存密钥,c#,C#,我在ASP.NET应用程序中有一个方法,该方法经常受到攻击,需要运行时缓存。它接受以下内容: public List<ModelTwo> SomeMethod(List<ModelOne> models, List<Guid> guids) publicslist方法(列表模型、列表guid) 我可以在每个列表中循环选择唯一的值并连接成一个大字符串。但是我想知道是否有一种更快、更有效的方法可以做到这一点?如果这两个项在某种程度上是相关的,您可以创建一个类,

我在ASP.NET应用程序中有一个方法,该方法经常受到攻击,需要运行时缓存。它接受以下内容:

public List<ModelTwo> SomeMethod(List<ModelOne> models, List<Guid> guids)
publicslist方法(列表模型、列表guid)

我可以在每个列表中循环选择唯一的值并连接成一个大字符串。但是我想知道是否有一种更快、更有效的方法可以做到这一点?

如果这两个项在某种程度上是相关的,您可以创建一个类,用一个唯一的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;
   }

}
公共类MyValue
{
公共guid密钥{get;set;}
公共列表模型{get;set;}
公共列表GUID{get;set;}
public void MyValue(列表模型中,列表指南中)
{
key=Guid.NewGuid();
models=modelsIn;
guids=guidsIn;
}
}
公共字典缓存=新字典();
公共列表方法(MyValue valueIn)
{
MyValue-val;
If(Cache.TryGetValue(valueIn.Key,value)
返回缓存[valueIn.Key]。模型;
其他的
{
你知道吗。。。
放入缓存。。。
返回值;
}
}

不清楚。为什么大字符串是一种可行的方法?为什么不将列表存储在缓存中?两个列表之间的关系如何?什么是
ModelTwo
?字符串,因为我使用的是运行时方法CacheItem。“我可以在每个列表中循环选择唯一的值并连接成一个大字符串”,有一种称为序列化的东西通常用于此类问题。听起来您只是希望缓存列表中的唯一值。我将创建这些唯一值的列表,并将CacheItem.Value设置为新列表,每个列表一个CacheItem。无需创建大字符串。@camiloteriento不过,这将为缓存密钥创建更大的字符串。谢谢,但这是不可能的。@leeno我的解决方案失败的限制是什么?您只需要能够从列表中生成密钥吗?如果是这样,本文将解释如何从列表中获取密钥: