如果您将控件设置为“虚拟化”,则可能会减少内存占用量。看看ListView,如果你设置了ownerDrawn = true和VirtualMode = true并且VirtualListSize = 3000,以下代码将创建项目(并存储它们)并进行自定义绘制。
您可能会为一些额外的编程是因为你的所有者绘制控件天下没有免费的...
// should be a cache of some sort, WeakReference'd etc, this is NOT reducing memory load (it is adding memory load)
Dictionary<Int32, ListViewItem> dict = new Dictionary<int, ListViewItem>();
private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
ListViewItem lvi = null;
if (dict.ContainsKey(e.ItemIndex))
{
Debug.WriteLine(String.Format("from cache:{0}", e.ItemIndex));
lvi = dict[e.ItemIndex];
}
else
{
Debug.WriteLine(String.Format("created:{0}", e.ItemIndex));
lvi = new ListViewItem { Text = String.Format("item:{0}", e.ItemIndex) };
lvi.SubItems.Add(new ListViewItem.ListViewSubItem{Text = String.Format("si:{0}", e.ItemIndex)});
dict.Add(e.ItemIndex, lvi);
}
e.Item = lvi;
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
// you can draw yourself...
// e.Graphics.DrawString(e.Item.Text, System.Drawing.SystemFonts.DefaultFont, new SolidBrush(Color.Red), 0f, 0f);
e.DrawText();
}
这是一个真棒集的PS1游戏,你必须有:d – 2011-01-28 21:28:44
笑。是的,我是一个FF粉丝:) – Redshirt 2011-01-28 21:35:03