【问题标题】:Anyway possible I can speed up adding very large textfile data into AutoComplete ComboBox?无论如何,我可以加快将非常大的文本文件数据添加到 AutoComplete ComboBox 的速度吗?
【发布时间】:2015-12-11 02:27:30
【问题描述】:

为自己制作一个与电影/电视节目有关的小程序。目前,我已将所有电影格式化为 txt 文件。每行一个电影标题。

这个 txt 文件包含大量电影(超过 100MB),我有一个自动完成组合框。 (建议用户自动完成电影名称)。

我现在使用的代码:

private void addComboBox()
    {
        try
        {

            using (StreamReader reader = new StreamReader("movies.txt"))
            {
                String line;
                while ((line = reader.ReadLine()) != null)
                {
                    String editline = line.TrimStart();
                    //System.Console.WriteLine(editline);                                         
                    movies.Items.Add(editline);

                }
            }
        }

        catch (IOException e)
        {
            System.Console.WriteLine("Error opening the file of movies! " + e);
        }
    }

现在,使用代码实际启动程序大约需要 20 秒,并且在输入电影时它非常缓慢。 (猜猜这将发生在 270 万行名称中)

有没有更好的方法来做到这一点?不要以为我看到的问题和我的完全一样。谢谢。

【问题讨论】:

    标签: c# wpf combobox io stream


    【解决方案1】:

    我建议您将此数据导入任何数据库的表中。因此,您可以利用如此快速的索引。

    如果您需要更可扩展和更快速的方法,您可以尝试使用特定的文本索引数据库,例如 Cassandra、Dynamo、Mongo、ElasticSearch 等。

    但在一个简单的场景中,我相信如果你使用任何数据库,即使你选择 Access 或 SQLite,你都会赢很多。

    您也可以尝试一些算法,例如二叉树或哈希表,或者在 Google 上搜索“最好的文本搜索算法”,但在现实世界中我会运行一个数据库。

    之后,您只需进行异步调用即可获得有限列表(即前 20 个)并动态加载选项。

    【讨论】:

    • 如果我要使用数据库,是否有简单的方法可以将 2.7mill 名称实际插入到表中?您提到的数据库会与 ComboBox C# 完全兼容吗?我熟悉 mySQL/SQLite。我以前从未在程序中使用过算法,所以我知道在我的程序中实施需要很长时间。如果您有一个很好的指南来解决与我类似的问题,那就太好了。
    • 通过 MySQL,您可以使用 Workbench。只需创建一个带有一个文本字段的表格,右键单击它并选择“表格数据导入向导”,您可以在几分钟内完成。之后,您必须将您的应用程序连接到该数据库,但这是另一个要讨论的章节,好的。
    • 这里的问题不是数据源。问题是组合框。如果您使用 System.IO.File.ReadAllLines 加载所有文本行,您会看到它非常快速地加载所有数据,但是当添加到组合框和自动完成问题出现时。
    • 我不建议使用数据库或数据表方法,因为 System.IO.File.ReadAllLine 足够快,而且您可以非常快速地在加载的数组中进行搜索。
    • @RezaAghaei 我相信你永远不会有超过 100MB 的字符串作为组合框的选项,并且期望它会很快。至少,不是在今年(2015 年),在一台合理的 PC 上。所以我已经指出了数据库的方式,这似乎更可行。
    【解决方案2】:

    一个选项是将您的数据源设置为 SQL 数据库 - 可能是 SQLite 以使其保持本地和简单,或者实施有效的搜索算法,例如 Trie

    【讨论】:

    • 你有一个很好的 Trie 指南,它可以解决我的问题吗?我可能会使用 mySQL。希望它适用于我的情况。
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多