【问题标题】:Improving Xamarin forms rendering performance提高 Xamarin 表单渲染性能
【发布时间】:2020-12-03 13:28:54
【问题描述】:

我的 Xamarin 应用程序中有一项功能,该功能涉及根据用户输入的观察次数生成数据输入部分。如果用户输入 3,则生成 3 个部分,如果用户输入 100,则生成 100 个部分。当应用程序开始无限期挂起时,当我输入超过 10 或 20 的值时,我遇到了问题。由于我无法限制用户的输入,我需要以某种方式解决此问题。

var newSections = new List<ISection>();
for (int i = currentLength; i < UserInput; i++)
{
    var newSection = DataEntryAttribute.SectionFactories();
    newSections.Add(newSection);

上面的代码 sn-p 是不断生成部分直到达到用户输入的数字的代码。

感谢任何有关加快此过程的可能方法的帮助或见解。

【问题讨论】:

  • 只生成适合页面的数量。按需生成其余部分,或在后台任务中生成。
  • 无限期挂起?你是说它永远挂起?
  • 我很幸运地使用 CollectionView 来显示更长的复杂自定义布局列表,其中包含混合内容并具有不错的性能。当您自动滚动时,它会处理加载/卸载的内容。但是请注意,据我所知,它仍然是一个实验性功能。要使用它,您必须在主要活动的 OnCreate() 中使用 Forms.SetFlags("CollectionView_Experimental");
  • 当我说它无限期挂起时,我的意思是应用程序在输入 60 或 100 等大量数字后冻结了 30-40 秒,并引发警报“您的应用程序没有响应”然后我点击等待,它需要大约 10-20 秒才能正常运行。

标签: c# performance xamarin.forms rendering


【解决方案1】:

当我在应用程序开始时输入大于 10 或 20 的值时 无限期挂起

您的应用程序无限期挂起,因为 UI 线程已被阻塞,您必须等待这些任务完成,然后它才能正常运行。

如果您不必更新 UI,您可以在后台线程中执行这些操作,这样它就不会阻塞 UI 线程并且您的应用不会挂起:

public void test()
{

    Task.Run(async () =>
    {
        var newSections = new List<ISection>();
        await for (int i = currentLength; i < UserInput; i++)
        {
            var newSection = DataEntryAttribute.SectionFactories();
            newSections.Add(newSection);
            ...
        }

        //update UI
    });
}

如果您需要同时更新 UI,您应该按照评论中的说明按需生成它们。也可以试试ListViewCollectionView

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 2012-04-17
    • 2017-01-05
    • 1970-01-01
    • 2012-02-12
    • 2017-05-17
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多