2014-05-03 106 views
0

我有一个预先加载的静态xmldocument对象,它有错误代码和它的描述, 如果我使用多线程应用程序,并试图获得特定错误代码的错误代码描述,我需要把一个锁定该方法或不锁定。静态对象线程安全

这是我在简短的代码(请。忽略GetErrorCodeDescription方法的实现,只考虑_oXmlDoc已使用),

预装静态的XmlDocument _oXmlDoc

后来我打电话GetErrorCodeDescription方法得到这样的错误代码描述,

Public string GetErrorCodeDescription(string errorCode) 
{ 
string errorDEscption=""; 

    XmlNodeList elemList = **_oXmlDoc**.GetElementsByTagName(errorCode); 

    for (int i=0; i < elemList.Count; i++) 
    { 
     errorDEscption=elemList[i].InnerXml); 
    } 

return errorDEscption; 

} 

回答

0

你会更好地做这个XML解析一次并将所有错误代码和相应的描述放入字典中。如果您为此使用ConcurrentDictionary,则应该是安全的。

+0

ConcurrentDictionary不必要的慢。正常的字典_is_线程安全的只是reaing。 –

0

the XmlDocument docs;

线程安全

任何公共静态此类型的成员(在Visual Basic中的Shared)都是线程安全的。 任何实例成员不保证是线程安全的。

因此,不,您的静态实例的使用不保证是线程安全的,不会锁定。

+0

我在做只读过程,不是线程安全的。 – user3597242

+0

@ user3597242文档中没有规定读取操作的线程安全性。查询对象可能会 - 例如 - 使用非线程安全集合构建缓存。 –

+0

正式更正,但这是MSDN上的模板文本。如果只读不安全,我会感到惊讶,但唯一确定的方法是检查源代码或找到更多的授权声明。 –