Blazor потребляет слишком много памяти - PullRequest
1 голос
/ 07 января 2020

Я тестировал Blazor и обнаружил что-то странное, вероятно, что-то, что я сделал неправильно, но результат действительно странный. Это не виртуальная машина, это просто мой ноутбук (Macbook pro 16GB Ram) и контейнер 1 docker с sql server linux.

Я создал новый компонент под названием Buildertest с объектом в качестве параметра , если запустить проект, do tnet потребляет не менее 70 ГБ ОЗУ и много ЦП (это странная часть). Обычно visual studio переносит меня на главную страницу в chrome почти сразу, но не в этот раз. код, который я думаю, очень прост:

/ index.razor:

@page "/"
@using Loginnmodels2.Data
@inject IModalService Modal

<h1>Hello, world!</h1>

Welcome to your new app.


<buildertest generic_object="a" />

@code
{
    private UserHasCases a = new UserHasCases();
}

Buildertest.cs:

using System;
using Microsoft.AspNetCore.Components.Rendering;
using Microsoft.AspNetCore.Components;
using System.Reflection;

namespace Loginnmodels2.Pages
{
    public class buildertest : ComponentBase
    {
        [Parameter] public Loginnmodels2.Data.UserHasCases generic_object { get; set; }
        private PropertyInfo[] Propiedades;

        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            base.BuildRenderTree(builder);
            GetListOfProperties();
            int counter = 0;

            builder.OpenElement(++counter, "table");
            builder.OpenElement(++counter, "tbody");
            foreach (var item in Propiedades)
            {
                builder.OpenElement(++counter, "tr");

                builder.OpenElement(++counter, "td");
                builder.AddContent(++counter, item.Name);
                builder.CloseElement();

                builder.OpenElement(++counter, "td");
                builder.OpenElement(++counter, "Input");
                builder.CloseElement();

                builder.CloseElement();

            }
            builder.CloseElement();
            builder.CloseElement();


        }   

        private void GetListOfProperties()
        {
            Propiedades = new PropertyInfo[5];
            Propiedades = generic_object.GetType().GetProperties();
        }
    }
}

Конечно, я новичок в Blazor, но мой предположение состоит в том, что каким-то образом параметр класса buildertest что-то тормозит.

есть идеи?

я использую visual studio для ма c

заранее спасибо.

Скриншот монитора активности

Класс UserHasCases:

using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace Loginnmodels2.Data
{
    public class UserHasCases
    {
        public User usr {get; set;}
        public Case connected_case { get; set; }
        public int Sequence { get; set; }

        [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Int64 int_counter { get; set; }
    }
}

это класс, который я создал как сервис

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
//using System.Data.Entity;
using Loginnmodels2.Data;
using Microsoft.EntityFrameworkCore;

namespace Loginnmodels2.DataServices
{
    public interface IUserDataService
    {
        Task<List<Data.User>> Get();
        Task<Data.User> Get(string usr_name);
        Task<Data.User> Add(Data.User a);   
        Task<List<Data.UserHasCases>> GetCases(User param_usr);
        void Delete(Data.User a);
    }

    public class UserDataService : IUserDataService
    {
        dbcontext1 _context;

        public UserDataService(dbcontext1 ctx)
        {
            _context = ctx;
        }

        public async Task<List<Data.User>> Get()
        {
            return await _context.Users.ToListAsync();
        }

        public async Task<Data.User> Get(string usr_name)
        {
            return await GetAllUsers().Where(x => x.user_name == usr_name).FirstOrDefaultAsync();
        }

        public async Task<Data.User> Add(Data.User a)
        {
            _context.Users.Add(a);
            await _context.SaveChangesAsync();
            return a;
        }

        public async void Delete(Data.User a)
        {
            _context.Users.Remove(a);
            await _context.SaveChangesAsync();            
        }

        public IQueryable<User> GetAllUsers()
        {
            return _context.Users.AsQueryable();
        }

        private IQueryable<UserHasCases> GetAllCases()
        {
            return _context.UserCaseRelation.AsQueryable();
        }

        public async Task<List<Data.UserHasCases>> GetCases(User param_usr)
        {
            return await GetAllCases().Where(x => x.usr == param_usr).ToListAsync();
        }

        public async Task<List<Data.UserHasCases>> GetAllValidCases()
        {
            return await GetAllCases().Where(x => x.connected_case.is_valid == true).ToListAsync();
        }

    }
}

это настройка в visual studio: настройка в vstudio

1 Ответ

2 голосов
/ 08 января 2020

В моем случае builder.CloseElement (); скучал. Это вызвало странное поведение в приложении Blazor.

После добавления CloseElement все приложение работало идеально.

...