Vb6 有没有更快的方法将18k项目加载到组合下拉列表中?

Vb6 有没有更快的方法将18k项目加载到组合下拉列表中?,vb6,Vb6,我必须修复一些旧的VB6代码,其中一个问题是应用程序在启动时将18k项加载到3个不同的组合下拉列表中。不用说,这需要很长时间。所以我从使用.AddItem方法改为使用SendMessageAPI。这大大缩短了时间(大约60%),但每次下载仍然需要1.4秒才能加载,因此启动时间仍然是5秒 我还试图说服用户不要把所有的18k都放在那里,但他们坚持所有条目都必须放在那里以便快速查找 我的问题 有没有更快的方法来装载这么多的物品 无论如何,只是在3个组合框之间共享数据,而不是在每个组合框中添加18k 任

我必须修复一些旧的VB6代码,其中一个问题是应用程序在启动时将18k项加载到3个不同的组合下拉列表中。不用说,这需要很长时间。所以我从使用.AddItem方法改为使用SendMessageAPI。这大大缩短了时间(大约60%),但每次下载仍然需要1.4秒才能加载,因此启动时间仍然是5秒

我还试图说服用户不要把所有的18k都放在那里,但他们坚持所有条目都必须放在那里以便快速查找

我的问题

  • 有没有更快的方法来装载这么多的物品
  • 无论如何,只是在3个组合框之间共享数据,而不是在每个组合框中添加18k
  • 任何我可能忽略的其他解决方案 我想您已经使用了(而不是CB_INSERTSTRING)

    下一项我建议您使用:

    检查组合框是否未设置

    在填充-隐藏这些框时,它可以加快一点速度


    最后-将这些组合框填充为3个单独的线程

    在加载过程中设置为false可节省大量时间。

    @AngryHacker您可以使用CreateThread Win32 API,但请记住VB6调试器无法处理多个线程。但所有windows UI不都需要在同一线程上吗?我会在同一表单上填充3个组合。~CB_INITSTORAGE~确实有点帮助。每个组合节省0.15秒,这非常重要。@AngryHacker windows中没有单独的UI线程,您可以从任何线程更新控件,只需确保这些更新不冲突(这不是您的情况)@Ilya Bursov:有一个创建窗口的线程,调度其消息的线程。当在单个线程上创建所有应用程序窗口时,该线程称为进程的UI线程。VB6(和大多数其他应用程序)就是这种情况。最快的加载时间是一个没有
    CBS\u hastrings
    的所有者绘制的组合框。您只需将这些18k条目保存在一个数组中,并根据需要绘制它们。问题是在VB6中创建这样的组合框。