【发布时间】:2014-06-02 04:22:01
【问题描述】:
我在尝试为 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过程并且只需要一个可以快速测试复杂键成员资格的集合(未定义比较、散列或相等接口的对象的对象引用)。我最好使用哈希集或字典吗? Hashset 的不同之处在于它允许使用没有比较或相等接口的类,纯粹基于内存地址或其他可能是 HashSet 不太“干净”的原因?
【问题讨论】:
标签: c# sql-server memory hashset sqlclr