0

我正在开发一个具有离线搜索功能的 Android 应用程序。这需要我阅读一个包含大约 170,000 个条目的字典文件。

我正面临严重的性能问题,最初认为这是由于我的代码String.match(regex)循环了ArrayList我已将数据读入的代码。

然而,深入挖掘,我发现主要问题实际上是数据 I/O。仅通过BufferedReader+读取字典文件就需要大约 10,000 毫秒InputStream,而无需执行任何搜索。我尝试过其他读取数据的方法,例如使用 a StringBuilder,但它们似乎没有多大帮助。

这个问题有哪些可能的解决方案?

需要考虑的几点:

  • 搜索是递归的
  • 该应用程序必须保持离线
  • 这些条目基本上是文本行,尽管是东亚语言(增加了搜索的难度,因为整个句子可以是单个字符串。)

我用于读取数据的标准代码是:

InputStream is = getResources().openRawResource(R.raw.data);     
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
     while(br.readLine() != null){
         blahblah....
        }
4

1 回答 1

0

我同意 Reuben L。我会使用 sqlite 数据库而不是解析文本文件。

在我的一个应用程序中,我将捷克共和国的所有村庄和城市(超过 200000 条记录)放入数据库以进行快速离线搜索。它可以在最多 1 秒内找到基于名称前缀的城市列表。

为了让它更快,我引入了数据库索引。我添加了一列并在那里填写城市名称的第一个字母。然后我可以像这样按前缀搜索城市:

select * from cities where firstLetter = ? and cityName like ?;

它提高了两倍以上的性能。

于 2013-06-02T16:14:15.923 回答