当前位置: 首页 > 编程语言 > C#

从XmlDocument对象读取是线程安全的吗?Share

时间:2023-04-10 22:19:09 C#

从XmlDocument对象线程读取是否安全?我想知道我是否可以使用SelectNodes()和SelectSingleNode()从多个线程安全地读取XmlDocument对象而没有任何问题。MSDN说它们不能保证是线程安全的。如果SelectNodes()和SelectSingleNode()确实存在从多线程运行的问题,我可以使用正确的锁定来避免任何问题吗?我有一个WCF服务设置,需要从数据库中获取一大块xml并从该xml中选择一些信息。我想缓存xml以避免频繁访问数据库,但我担心线程安全和性能。有一个更好的方法吗?谢谢。这是交易。如果文档说不能保证实例方法是线程安全的,那最好注意一下。如果您决定在没有适当同步机制的情况下在多线程场景中使用该类,那么您需要1)了解忽略文档的后果,以及2)为所有假设在该类的未来版本中失败做好准备。即使对于似乎只读取内部状态的方法,这个建议也是有效的。你怎么知道SelectNodes和SelectSingleNodes不修改内部变量?因为如果他们这样做,他们肯定不是线程安全的!现在,我碰巧用Reflector查看内部,我可以看到它们没有修改任何内部变量。但是你怎么知道在未来的版本中不会改变呢?现在,由于我们实际上知道SelectNodes和SelectSingleNodes不会修改类的内部状态,因此它们对于多线程操作可能是安全的,尽管当且仅当以下条件适用时才会发出警告。我的建议......从文档中字面理解警告并使用适当的同步机制。当您想要写入/读取XML文档时,如果您不想遇到竞争条件,则需要同步这两个操作。如果您关心性能(谁不关心?),ReaderWriterLockSlim可能比锁定更好。SelectNodes/SelectSingleNode应该是安全的(它们只读取数据)。当然,您需要将这些与实际修改XML的任何方法同步。您还可以在调用createInstance时使用MsXmlFreeThreadedDOMDocument模型而不是经典的DomDocument。请注意,根据本文,FreeThreadedDOMDocument比传统DomDocument慢7或10倍。以上就是C#学习教程:从XmlDocument对象线程读取是否安全?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: