Xamarin.Android中的Listview性能问题?

时间:2017-07-26 20:08:49

标签: android listview xamarin xamarin.android

我是Xamarin.Android的新手,我制作了一个非常简单的应用程序,并将其与用Java开发的相同应用程序进行了比较,得到了我无法相信的结果。

此应用程序正在执行的所有操作是在按钮单击时使用10000个项目填充ListView。

C#代码:

private void Button_Click(object sender, System.EventArgs e)
{
    var list = new List<String>();

    for (int i = 0; i < 10000; i++)
        list.Add(i.ToString());

    var adapter = 
     new ArrayAdapter<String(this,Android.Resource.Layout.SimpleListItem1, list);
    listView.Adapter = adapter;
}

Java代码:

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final ArrayList<String> list = new ArrayList<>();
            for(int i = 0; i < 100000; i++)
                list.add(Integer.toString(i));

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
            listView.setAdapter(adapter);
        }
    });

我测量了性能,结果如下: Xamarin.Android:约。 950毫秒 Java:小于1毫秒

如何以及为何?我做错了什么?

我认为在Java中并非所有项目都在同一时间填充,但在Xamarin.Android中,如果是这样的话,我该如何避免它并使ListView填充更快?

1 个答案:

答案 0 :(得分:0)

  

Xamarin.Android:约。 950毫秒Java:小于1毫秒。

当您使用new ArrayAdapter(..)方法填充ListView时,如果只填充少量数据(少于约100),则Xamarin.Android和{{1}之间几乎没有差异}}。随着数据的增加,Java的性能几乎没有变化,但在Java中,加载时间的花费时间与数据量成正比。

在我的Android版M6中,当我使用100,000个数据填充Xamarin.Android时,ListView:约。 4200毫秒,Xamarin.Android:约。 42毫秒。

  

如果是这种情况,我该如何避免它并使ListView填充更快?

为了获得更好的效果,您可以创建custom Adapter来填充Java。如果要填充大量数据,建议使用RecyclerView。我在我的设备中使用它来填充100,000个数据,它们都在ListView中具有良好的性能:约。 200毫秒。