Skip to content

Navigation ViewModel Load DataGrid take about 1s,How to Improve it? #7

@321Oscar

Description

@321Oscar

Hi SingletonSean,
I used the Navigation source code in the tutorial and found that when navigating to a View with a datagrid, loading is very time-consuming. The data bound to the datagrid is only 40 rows. I would like to ask how to optimize it.
it is the load log

16:07:56 486 view changed
16:07:56,486 navigation Analog: 4 ms
16:07:56 574 analog view
16:07:57 273 datagrid loaded take 698 ms

it is AnalogView and layoutNavigation Code:

public partial class AnalogView : UserControl
    {
        Stopwatch watch;

        public AnalogView()
        {
            InitializeComponent();
            Console.WriteLine($"{DateTime.Now:HH:mm:ss fff} analog view");
            watch = new Stopwatch();
            watch.Restart();
            this.Loaded += AnalogView_Loaded;
        }
        ~AnalogView()
        {

        }
        private void AnalogView_Loaded(object sender, RoutedEventArgs e)
        {

            //watch.Stop();
            //Console.WriteLine($"{watch.ElapsedMilliseconds}");
            this.Loaded-= AnalogView_Loaded;
        }

        private void datagrid_Loaded(object sender, RoutedEventArgs e)
        {
            watch.Stop();
            Console.WriteLine($"{DateTime.Now:HH:mm:ss fff} datagrid loaded take {watch.ElapsedMilliseconds} ms");

            this.datagrid.Loaded -= datagrid_Loaded;
        }
    }
 public class LayoutNavigationService<TViewModel> : INavigationService
        where TViewModel : ObservableRecipient
    {
        private readonly NavigationStore _navigationStore;
        private readonly Func<TViewModel> _createViewModel;
        private readonly Func<NavigationBarViewModel> _createNavigationBarViewModel;
        private System.Diagnostics.Stopwatch stopwatch;
        public LayoutNavigationService(NavigationStore navigationStore, Func<TViewModel> createViewModel, Func<NavigationBarViewModel> createNavigationBarViewModel, 
            string navigationName)
        {
            NavigationName = navigationName;
            Console.WriteLine($"{DateTime.Now:HH:mm:ss,fff} ctor navigation {NavigationName}");
            stopwatch = new System.Diagnostics.Stopwatch();
            //stopwatch.Restart();
            _navigationStore = navigationStore;
            _createViewModel = createViewModel;
            _createNavigationBarViewModel = createNavigationBarViewModel;
        }
        ~LayoutNavigationService()
        {
            Console.WriteLine($"{DateTime.Now:HH:mm:ss,fff} dispose navigation {NavigationName}");
        }
        public string NavigationName { get; set; }
        public void Navigate()
        {
            //stopwatch.Stop();
            //string time1 = stopwatch.ElapsedMilliseconds.ToString();
            stopwatch.Restart();
            _navigationStore.CurrentViewModel = new LayoutViewModel(_createNavigationBarViewModel(), _createViewModel());
            stopwatch.Stop();
            string time2 = stopwatch.ElapsedMilliseconds.ToString();

            Console.WriteLine($"{DateTime.Now:HH:mm:ss,fff} navigation {NavigationName}: {time2} ms");
        }
    }

Looking forward to your reply,Thank you

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions