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:
2026-01-23 15:55:36 -05:00
parent a4ea200e38
commit 258b1d2d1f
2 changed files with 28 additions and 22 deletions

View File

@@ -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];

View File

@@ -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)
{ {