我想知道是否可以安全地从XmlDocument对象使用SelectNodes()和SelectSingleNode()方法在多个线程中读取,MSDN称它们不能保证线程安全。如果SelectNodes()和SelectSingleNode()在多个线程中运行会出现问题,那么我可以使用适当的锁来避免任何问题吗?我已经设置了一个WCF服务,需要从数据库中获取一段XML并选择其中的一些信息。我想缓存XML以避免频繁访问数据库,但我担心线程安全和性能问题。有更好的方法来实现这个目标吗?谢谢
如果您要读取/写入XML文档,为了避免竞争条件,需要同步这两个操作。如果您关心性能(谁不关心?),那么ReaderWriterLockSlim可能比锁定更好。
SelectNodes / SelectSingleNode 应该是安全的(它们只读取数据)。当然,您需要将它们与任何实际修改 XML 的方法同步。
在调用createInstance时,您也可以使用MsXml FreeThreadedDOMDocument模型,而不是传统的DomDocument。
请注意,根据本文所述,FreeThreadedDOMDocument比传统的DomDocument慢7倍或10倍。