我在后台保存了超过100000个文件,一切都很快等等......我正在使用tpl库,真正使线程更容易。
我的问题: 被要求为用户观点添加一些UI。 我现在有2个列表视图
我无法使用“AddRange”,因为我一次更新一个,但添加和删除项目会使我减慢1000次
以下是一些简化的测试代码,可以为您提供一个想法
private void button1_Click(object sender, EventArgs e)
{
int count = 0;
var parOpts = new ParallelOptions();
string[] files = GetFiles();
parOpts.MaxDegreeOfParallelism = Environment.ProcessorCount;
Task t1 = Task.Factory.StartNew(() =>
{
Parallel.ForEach(files, parOpts, (file, loopState) =>
{
count = Interlocked.Increment(ref count);
SaveFile(file, count);
});
});
}
private void SaveFile(string file, int count)
{
// FileProcess.Save(file);
//update listview but removing the file
// from the processing listview and add to the Saved listview
var item = new ListViewItem(Path.GetFileName(file));
lvwInProcess.Invoke(new MethodInvoker(() => lvwInProcess.Items.Add(item)));
lvwSaved.Invoke(new MethodInvoker(() => lvwSaved.Items.Remove(item)));
lvwInProcess.Invoke(new MethodInvoker(() => lvwProcessing.Refresh()));
lvwSaved.Invoke(new MethodInvoker(() => lvwSaved.Refresh()));
}
在添加和删除时无法使用VirtualListView 我应该使用不同的控件吗?
可以改善上述内容吗? 你会怎么做?
答案 0 :(得分:0)
在ListViews中有这么多项目,我肯定会在Add / Refresh方法中使用BeginUpdate和EndUpdate。这将减少UI的一些渲染时间。也可以使用BeginInvoke()来异步更新UI。