【发布时间】:2011-01-25 16:41:07
【问题描述】:
我正在编写一个简单的字典应用程序,它会在您键入时提供单词建议。建议显示在ListBox 中,每次查询更改时,应该会出现大约 10 条建议。
很遗憾,目前性能很低。结果出现几乎需要一秒钟,我不明白为什么。 EQATEC Profiler 表明我的方法运行顺利。我已经通过在我的代码周围添加Stopwatch 来确认这一点。我还尝试了建议的数量,并且随着项目的减少,性能确实有所提高。
这使我得出结论,渲染 ListBox(我认为它发生在我的方法之外)是性能不足的罪魁祸首。
- 在 ListBox 中渲染 10 个项目真的需要超过 250 毫秒吗?
- 如何快速将少量单词放到屏幕上?
编辑: 我填写 ListBox 的方式非常简单。方法对吗?
resultsListBox.Items.Clear();
foreach (string s in suggestions.Words)
{
resultsListBox.Items.Add(s);
}
resultsListBox.SelectedIndex = suggestions.MatchIndex;
您在这里看到的是真的:默认列表框、字符串项、没有模板。我是否违反了这些原则之一?
- 确保项目数据模板位于固定大小的容器(网格)中。
- 当数据对象可以轻松提供相同的信息时,避免/删除使用复杂的转换器。
- 避免/删除嵌套结构,列表框项中的示例列表框。
- 强烈建议不要在数据模板中使用用户控件。
- 避免/删除数据模板中的自定义控件
下面的链接包含一个简单项目中 ListBox 性能的演示。
该项目还展示了另一种(更快)显示列表的方法,即使用带有按钮的网格。此列表不可滚动,因此不是真正的解决方案。
http://www.mediafire.com/?jypcfm4cs3nvo5c
请记住在设备上运行项目,因为模拟器的性能非常不同。我已经在三星 Omnia 7 上测试过了。
【问题讨论】:
-
下面的链接包含一个简单项目中 ListBox 性能的演示。该项目还展示了另一种(更快)显示列表的方法,使用带有按钮的网格。此列表不可滚动,因此不是真正的解决方案。 mediafire.com/?jypcfm4cs3nvo5c 记得在设备上运行项目,因为模拟器的性能差别很大。我已经在三星 Omnia 7 上测试过了。
标签: performance windows-phone-7 listbox