C# 不管怎样,我可以加速将非常大的文本文件数据添加到自动完成组合框中吗?
为自己制作一个与电影/电视节目有关的小节目。目前我已经将所有电影格式化为txt文件。每行一个电影标题 这个txt文件有大量的电影(超过100MB),我有一个自动完成的组合框。(向用户建议自动完成电影名称) 我现在使用的代码是: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"))
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。希望它能对我的情况起作用。