【发布时间】:2021-04-06 07:57:39
【问题描述】:
我正在尝试将 10k 行数据库 XML 导出加载到 C# 中的组合框中,但打开窗口的时间很长,我确信 10k 行并没有那么多需要处理,但我仍然需要大约 20 秒才能完成最大化我的一个 CPU 线程。我尝试在 C# 中创建一个新线程,但出现跨线程错误。我有什么办法可以将加载时间缩短到 1 或 2 秒?
public partial class AddGameWindow : Form
{
public AddGameWindow()
{
InitializeComponent();
Application.UseWaitCursor = true;
}
private void AddGameWindow_Load(object sender, EventArgs e)
{
var doc = XDocument.Parse(Properties.Resources.GameDB);
var rows = doc.Descendants("table").Select(el => new Game
{
Name = el.Element("title").Value,
Url = el.Element("link").Value,
Img = el.Element("imglink").Value
});
if (gamesList.Items.Count == 0 ) {
// for some reason fires again when window closed :(
int i = 0;
foreach (var row in rows)
{
//nejak to tam nahazet at to dlouho netrva
gamesList.Items.Insert(i, row.Name);
i++;
}
Application.UseWaitCursor = false;
}
}
}
class Game
{
public string Name;
public string Url;
public string Img;
}
【问题讨论】:
-
下拉列表中的一万行只是不好的 UI。想办法让列表更小,也许首先使用类别下拉列表。
-
我正在尝试将 10k 行 ... 加载到 C# 中的组合框中 - 您似乎在错误的站点上发布。请立即访问 ux.stackexchange.com 并告诉他们您的计划。穿一些可燃性有限的东西
-
或者this。
-
在 Combo-Box 中加载 10k 行并不是一个好主意。我的意思是,一点也不。例如,您可以加载 100 行,然后如果用户向下滚动,则再加载 100 行,依此类推。此外,您可以使用异步方法加载不会阻塞您的 UI 的数据。
-
没有人类用户能够理解或能够在包含 10,000 个选项的庞大、连续、未经过滤的列表中找到任何内容。这是荒谬的。组合框不能很好地使用它的原因是因为它没有针对大量数据进行优化,因为它的设计者认为没有人会愚蠢到最多可以在其中放入几十个项目。如果您离截止日期还有几天时间,那么您就有足够的时间来弄清楚如何进行过滤或自动完成搜索,并制作一个合理且实际可用的 UI。