我得到一个XML提要,并将其解析为我的MQ服务器,然后我有一个服务来监听MQ服务器并阅读其所有消息。在foreach循环中打开线程
我打开一个新的线程每次迭代中,为了使解析更快foreach循环,原因有在MQ大约500消息(意味着有500个XML)
foreach (System.Messaging.Message m in msgs)
{
byte[] bytes = new byte[m.BodyStream.Length];
m.BodyStream.Read(bytes, 0, (int)m.BodyStream.Length);
System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
ParserClass tst = new ParserClass(ascii.GetString(bytes, 0, (int)m.BodyStream.Length));
new Thread(new ThreadStart(tst.ProcessXML)).Start();
}
在ParserClass我有这样的代码:
private static object thLockMe = new object();
public string xmlString { get; set; }
public ParserClass(string xmlStringObj)
{
this.xmlString = xmlStringObj;
}
public void ProcessXML()
{
lock (thLockMe)
{
XDocument reader = XDocument.Parse(xmlString);
//Some more code...
}
}
的问题是,当我运行这个foreach循环,只有1个线程,它可以完美运行,但速度缓慢。
当我用多于一个线程运行它时,出现错误“未将对象引用设置为对象的实例”。
我想我的锁定有问题,因为我对线程不是很有经验。
我有点无望,希望你能帮助!
干杯!
哪一行引发异常? – Tudor 2012-01-15 20:51:55
不要启动500个线程。 – 2012-01-15 20:54:47
购买一个500核心CPU,那么它将100%并行,超级快速和无bug。 (换句话说,你的核心想法很可能是错误的,修复同步问题在一天结束时不会帮助你。) – 2012-01-15 20:57:16