Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不管怎样,我可以加速将非常大的文本文件数据添加到自动完成组合框中吗?_C#_Wpf_Combobox_Io_Stream - Fatal编程技术网

C# 不管怎样,我可以加速将非常大的文本文件数据添加到自动完成组合框中吗?

C# 不管怎样,我可以加速将非常大的文本文件数据添加到自动完成组合框中吗?,c#,wpf,combobox,io,stream,C#,Wpf,Combobox,Io,Stream,为自己制作一个与电影/电视节目有关的小节目。目前我已经将所有电影格式化为txt文件。每行一个电影标题 这个txt文件有大量的电影(超过100MB),我有一个自动完成的组合框。(向用户建议自动完成电影名称) 我现在使用的代码是: private void addComboBox() { try { using (StreamReader reader = new StreamReader("movies.txt"))

为自己制作一个与电影/电视节目有关的小节目。目前我已经将所有电影格式化为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万行的名字会出现这种情况)


有没有更好的方法?别以为我见过和我一样的问题。谢谢。

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

如果您需要更具伸缩性和更快速的方法,您可以尝试特定的文本索引数据库,如Cassandra、Dynamo、Mongo、ElasticSearch和其他

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

你也可以尝试一些算法,比如二叉树或哈希表,或者在谷歌上搜索“最佳文本搜索算法”,但在现实世界中,我会运行一个数据库


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

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

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