gpt4 book ai didi

c# - 为什么 HashSet 归因于 MayLeakOnAbort,但 Dictionary 没有?

转载 作者:IT王子 更新时间:2023-10-28 23:30:24 27 4
gpt4 key购买 nike

我在尝试为 SQL Server 编写 CLR 过程时注意到,由于属性为 [HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)],因此不允许使用 HashSet。 . SQL Server CLR 过程不允许使用 MayLeakOnAbort 的对象。已设置。好的,所以在 CLR 过程中需要避免一些类,甚至可能三思而后行在 CLR 过程之外使用。奇怪的是Dictionary<K,V> 没有类似的限制。现在基于我对什么是 HashSet 和 Dictionary 是什么的理解,我希望 Dictionary 应该具有 Hashset 的所有复杂性和 then 一些。那么,为什么 Dictionary 没有类似的限制呢?我正在“三思而后行使用 HashSet<T>”并认真考虑改用字典,即使我没有编写 CLR 过程并且只需要一个可以快速测试复杂键成员资格的集合(未定义比较、散列或相等接口(interface)的对象的对象引用)。我最好使用哈希集或字典吗? Hashset 的不同之处在于它允许使用没有比较或相等接口(interface)的类,纯粹基于内存地址或其他可能是 HashSet 不太“干净”的原因?

最佳答案

HashSet<T>包含 IntersectWith 等方法使用 stackalloc 使用不安全代码实现的. Dictionary<TKey, TValue>不包含任何此类方法。虽然可以将自己的程序集标记为不安全,并避免使用有风险的方法,但我只是放弃并使用了 Dictionary<T, bool>在 SQL CLR 函数中,所有值都是 true ,正是因为这个原因。

关于c# - 为什么 HashSet<T> 归因于 MayLeakOnAbort,但 Dictionary<K,V> 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140885/

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