更新1:我写既是一个MFC-C++实现和一个老派的Win32应用程序和录制的视频演示该问题,真的是多么糟糕的是:为什么ListView对某些字符渲染速度很慢?
https://www.youtube.com/watch?v=f0CQhQ3GgAM
由于老派Win32应用程序没有展示这个问题,这导致我相信C#和MFC都使用必须导致此问题的相同渲染API(基本上解除了我的怀疑,问题可能出在OS /图形驱动程序级别)。
原帖:
虽然不必显示一个ListView里面休息一下数据,我遇到了一个非常奇特的问题:
对于某些输入,ListView的渲染会到字面上慢在水平滚动的同时爬行。
在我的系统和典型的带有“OptimizedDoubleBuffer”的子类ListView中,ListView中只有6个项目会减慢渲染过程中的渲染速度,使我可以看到头部“游泳”,即渲染项目和标题在滚动不匹配。
对于常规非子类的ListView与10个项目,我可以从字面上看每个项目被单独绘制而滚动(重绘约需1-2S)。
这里的示例代码(是的,我知道的是,这些看起来像熊,蝴蝶表情,这个问题是由用户提供的数据发现,毕竟):
using System;
using System.Windows.Forms;
namespace SlowLVRendering
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += new System.EventHandler(this.Form1_Load);
}
private void Form1_Load(object sender, EventArgs e)
{
const string slow = "ヽ( ´。㉨°)ノ Ƹ̴Ӂ̴Ʒ~ ღ (ヽ( ´。㉨°)ノ ༼ つ´º㉨º ༽つ) (」゚ペ)」ヽ( ´。㉨°)ノ Ƹ̴Ӂ̴Ʒ~ ღ (ヽ( ´。㉨°)ノ ༼ つ´º㉨º ༽つ) (」゚ペ)」";
ListView lv = new ListView();
lv.Dock = DockStyle.Fill;
lv.View= View.Details;
for (int i = 0; i < 2; i++) lv.Columns.Add("Title "+i, 500);
for (int i = 0; i < 10; i++)
{
var lvi = lv.Items.Add(slow);
lvi.SubItems.Add(slow);
}
Controls.Add(lv);
}
}
}
有人能说明什么问题是,以及如何解决它?
看一看点击:http:/ /www.virtualdub.org/blog/pivot/entry.php?id=273 – SteveFerg
@SteveFerg你有没有去上面提供的ListView的子类版本提供的示例? – MrCC