gpt4 book ai didi

c# - 我可以使用对象的哈希码作为缓存键吗?

转载 作者:行者123 更新时间:2023-11-30 14:57:50 25 4
gpt4 key购买 nike

我可以使用对象的哈希码作为缓存键吗?

我的假设是每个 Criteria 的哈希值都相同,其中属性值相同?

像这样:

function void Method1(Criteria criteria)
{
        ObjectCache cache = MemoryCache.Default;
string CacheKey = "Method1-" + criteria.GetHashCode();

        if(cache.Contains(CacheKey))
            return (IEnumerable)cache.Get(CacheKey);
        else
        {
            IEnumerable stuff = repository.GetStuff();
 
            CacheItemPolicy cacheItemPolicy = new CacheItemPolicy();
            cacheItemPolicy.AbsoluteExpiration = DateTime.Now.AddHours(1.0);
            cache.Add(CacheKey, stuff, cacheItemPolicy);
 
            return stuff;
        }
}

最佳答案

can I use the hashcode of an object as a cachekey?

没有。并非没有额外的故障保护。

My assumption is that the hash would be the same for each Criteria, where the property values are the same?

假设是错误的。只有实现 IEquatable<T> 的对象才要求哈希码相同和是相等的,但即使在那种情况下,它们也不需要对于不相等的对象是不同的。因为在一般情况下可能不同的数量 Criteria实例是无限的,而哈希码的范围是有限的,由于 pigeonhole principle 总会有冲突.

关于c# - 我可以使用对象的哈希码作为缓存键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com