Debugger: Improved performance when refreshing a large list of labels (e.g 3+k)

This commit is contained in:
Souryo 2016-12-01 21:45:12 -05:00
parent da3cfdeeec
commit 9d870294d6

View file

@ -92,11 +92,11 @@ namespace Mesen.GUI.Debugger.Controls
public void UpdateLabelList() public void UpdateLabelList()
{ {
lstLabels.BeginUpdate(); List<CodeLabel> labels = LabelManager.GetLabels();
lstLabels.Items.Clear(); List<ListViewItem> items = new List<ListViewItem>(labels.Count);
foreach(CodeLabel label in LabelManager.GetLabels()) { foreach(CodeLabel label in labels) {
if(label.Label.Length > 0) { if(label.Label.Length > 0) {
ListViewItem item = lstLabels.Items.Add(label.Label); ListViewItem item = new ListViewItem(label.Label);
Int32 relativeAddress = InteropEmu.DebugGetRelativeAddress(label.Address, label.AddressType); Int32 relativeAddress = InteropEmu.DebugGetRelativeAddress(label.Address, label.AddressType);
if(relativeAddress >= 0) { if(relativeAddress >= 0) {
@ -119,15 +119,17 @@ namespace Mesen.GUI.Debugger.Controls
item.SubItems[1].Tag = label; item.SubItems[1].Tag = label;
item.Tag = relativeAddress; item.Tag = relativeAddress;
items.Add(item);
} }
} }
lstLabels.BeginUpdate();
lstLabels.Items.Clear();
lstLabels.Items.AddRange(items.ToArray());
lstLabels.Sort(); lstLabels.Sort();
lstLabels.EndUpdate(); lstLabels.EndUpdate();
_listItems = new List<ListViewItem>(); _listItems = items;
foreach(ListViewItem item in lstLabels.Items) {
_listItems.Add(item);
}
} }
private void lstLabels_DoubleClick(object sender, EventArgs e) private void lstLabels_DoubleClick(object sender, EventArgs e)