Extreme performance problems with a repeating tabl
Hi to all!!!!
I have a problem with performance of a template working in browser mode. It seems that filling a repeating table using a XmlWriter is the case.
First I tried to fill like this:
foreach (DataRow row in dataTable.Rows)
{
string myNamespace = NamespaceManager.LookupNamespace("my");
using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode( "/my:myFields/my:group1", NamespaceManager).AppendChild())
{
writer.WriteStartElement("Values", myNamespace);
writer.WriteElementString("Value1", myNamespace, row["Value1"].ToString());
writer.WriteElementString("Value2", myNamespace, row["Value2"].ToString());
writer.WriteElementString("Value3", myNamespace, row["Value3"].ToString());
writer.WriteElementString("Value4", myNamespace, row["Value4"].ToString());
writer.WriteElementString("Value5", myNamespace, row["Value5"].ToString());
writer.WriteEndElement();
writer.Close();
}
}
While opening in browser after about half a minute a dialog box apper saying that "A Scripts on this page is causing Internet Explorer to run slowly. If it
continues to run, your computer may become unresponsive".
The InternetExplorer 7 has at this time OVER 0,5 gigs in the task manager!!!!!!!! (The server an the client is up-to-date with all services packs)
It seemed to me that AppendChild() method is the problem so I tried first to generate the xml with the data to MemoryStream:
MemoryStream memoryStream = new MemoryStream();
XmlWriter memoryXmlWriter = XmlWriter.Create(memoryStream);
string myNamespace = NamespaceManager.LookupNamespace("my");
foreach (DataRow row in dtTasks.Rows)
{
memoryXmlWriter.WriteStartElement("Values", myNamespace);
memoryXmlWriter.WriteElementString("Value1", myNamespace, row["Value1"].ToString());
memoryXmlWriter.WriteElementString("Value2", myNamespace, row["Value2"].ToString());
memoryXmlWriter.WriteElementString("Value3", myNamespace, row["Value3"].ToString());
memoryXmlWriter.WriteElementString("Value4", myNamespace, row["Value4"].ToString());
memoryXmlWriter.WriteElementString("Value5", myNamespace, row["Value5"].ToString());
memoryXmlWriter.WriteEndElement();
}
memoryXmlWriter.Flush();
memoryXmlWriter.Close();
string outStr = Encoding.UTF8.GetString(memoryStream.ToArray());
//Add "my:" and "/my:" prefix
string rtXml = AddPrefixMy(outStr);
And then replace directly repeating table InnerXml:
MainDataSource.CreateNavigator().SelectSingleNode( "/my:myFields/my:group1", NamespaceManager).InnerXml = rtXml;
While opening in browser nothing changes and the same dialog box appers.
Do you have any ideas how to optimize this code.
Thanks for ANY reply !!!!!!!!!!!!!!!
|