更新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