B2026-003 Imported memory handling in the FlexGrid (table) code for when we are replacing many RO values in table cells
This commit is contained in:
@@ -537,6 +537,10 @@ namespace Volian.Controls.Library
|
|||||||
// if it is a modify and there will be no usages if it is new (the usage gets created on the save)
|
// if it is a modify and there will be no usages if it is new (the usage gets created on the save)
|
||||||
if (!MyFlexGrid.IsRoTable)
|
if (!MyFlexGrid.IsRoTable)
|
||||||
{
|
{
|
||||||
|
// B2026-003 we where using a string.format on this inside the while loop - allocating memory each time
|
||||||
|
// so I move it outside the while loop and did a simple assigment of text
|
||||||
|
string lookForLinks = @"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>";
|
||||||
|
|
||||||
while (r < h)
|
while (r < h)
|
||||||
{
|
{
|
||||||
CellRange cr = MyFlexGrid.GetMergedRange(r, c);
|
CellRange cr = MyFlexGrid.GetMergedRange(r, c);
|
||||||
@@ -546,8 +550,7 @@ namespace Volian.Controls.Library
|
|||||||
{
|
{
|
||||||
// see if there are any links and save these so that any deleted ROs or transitions in the
|
// see if there are any links and save these so that any deleted ROs or transitions in the
|
||||||
// steprtb can have associated usages/transitions records removed from the database.
|
// steprtb can have associated usages/transitions records removed from the database.
|
||||||
string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v '?{{}}~\\]+)*\\v(\\[^v \\]+)* #Link:(ReferencedObject|Transition[^:]*?):.*?\[END>");
|
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookForLinks);
|
||||||
MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookFor);
|
|
||||||
for (int i = matches.Count - 1; i >= 0; i--)
|
for (int i = matches.Count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
Match m = matches[i];
|
Match m = matches[i];
|
||||||
|
|||||||
@@ -272,10 +272,12 @@ namespace Volian.Controls.Library
|
|||||||
for (int i = 0; i < rows * cols; i++)
|
for (int i = 0; i < rows * cols; i++)
|
||||||
datum.Add("|");
|
datum.Add("|");
|
||||||
XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
|
XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
|
||||||
string data = string.Empty;
|
// B2026-003 use StringBuilder a "using" statement around the RichTextBox for better mememory management
|
||||||
|
StringBuilder data = new StringBuilder();
|
||||||
foreach (XmlNode xn in nl)
|
foreach (XmlNode xn in nl)
|
||||||
{
|
{
|
||||||
RichTextBox rtb = new RichTextBox();
|
using (RichTextBox rtb = new RichTextBox())
|
||||||
|
{
|
||||||
rtb.Rtf = xn.InnerText;
|
rtb.Rtf = xn.InnerText;
|
||||||
XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
|
XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
|
||||||
string[] rc = xa.InnerText.Split(',');
|
string[] rc = xa.InnerText.Split(',');
|
||||||
@@ -284,9 +286,10 @@ namespace Volian.Controls.Library
|
|||||||
int index = r * cols + c;
|
int index = r * cols + c;
|
||||||
datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
|
datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
foreach (string s in datum)
|
foreach (string s in datum)
|
||||||
data += s;
|
data.Append(s);
|
||||||
return data;
|
return data.ToString();
|
||||||
}
|
}
|
||||||
private string GetCellFormatString(XmlDocument xd)
|
private string GetCellFormatString(XmlDocument xd)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user