我最近继承了一个大量使用会话的应用程序,包括在会话中存储大量自定义数据对象。我使用此应用程序的第一个业务点是至少将会话数据从 InProc 移开,并将其卸载到状态服务器或 SQL Server。
在我使所有适当的数据对象可序列化,并将 web.config 更改为使用状态服务之后,一切似乎都工作正常。
但是,我发现这个应用程序使用 GetHashCode() 进行了很多对象比较。当会话是 InProc 时运行良好的方法不再起作用,因为 HashCode 在它们应该匹配时不再匹配。当您知道子对象的原始哈希码时尝试从父对象中查找特定子对象时,似乎就是这种情况
如果我只是将 web.config 改回使用 inproc,它会再次起作用。
有人对从哪里开始有任何想法吗?
编辑:
qbeuek:感谢您的快速回复。关于:
Object 类中 GetHashCode 的默认实现根据内存中的对象地址或类似的东西返回一个哈希值。如果需要进行其他身份比较,则必须同时覆盖 Equals 和 GetHashCode。
我应该提供更多关于他们如何使用它的信息。基本上,它们有一个父数据对象,并且有多个子对象数组。他们碰巧知道他们需要的特定对象的哈希码,因此他们循环通过特定的子对象数组来寻找匹配的哈希码。一旦找到匹配项,他们就会将该对象用于其他工作。