powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / inject container self to service
20 сообщений из 20, страница 1 из 1
inject container self to service
    #39604801
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему поднялся вопрос. может кто то отговорит.
вообщем сделал сервис с массовой загрузкой ef летает все ок. загружаем по 100 записей и потом их отправляем в бд(всего записей около 100к и фоном грузится в джобе).
схематично код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Importer
{
  private IRepo _repo;

  public Importer(IRepo repo)
  {
    _repo = repo;
  }

  public void Process (...)
  {
    while(contion)
    {
     var flag = repo.Where(condition).tolist();
     if (flag)
     {
       _repo.AddRange();
       _repo.CommitAsync();
     }
   }
 }
}


все летает до ориентировочно 200 итерации, вставка 100 записей и получение флага до 100мс, после начинает трабла и операция получения flag тормозит до 2 минут и потом снова быстрая вставка. Кто то скажет что ef не для массовых вставок и я соглашусь. Но если пересоздавать контекст на каждую вставку проблем уже нет. Поэтому я подумал как завести сам контейнер в сервис и руками резолвить инстанс репозитория на каждую итерацию. конечно переписать на нативный скул не проблема, но пока хочется остаться на орм. Что то типо такого
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void Process (...){

while(contion){
_repo = resolver.Resolve<IRepo >();
 var flag = _repo.Where(condition).tolist();
 if (flag)
  {
     _repo.AddRange();
     _repo.CommitAsync();
     _repo.Dispoce();
   }
 }
}


или я делаю очень плохое решение? и да я не совсем понимаю как зарегать контейнер .. регистрация в одной точке на уровне приложения, а сервисы на уровне бизнес-логики.
...
Рейтинг: 0 / 0
inject container self to service
    #39604905
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,
Не делают орм для простых инсерт. Оно вам надо? Долго переписать?
Ну и где лог запроса который тормозит? Что именно 2 минуты делается?
3. Там вроде флаг есть в ef выкл трекера....
...
Рейтинг: 0 / 0
inject container self to service
    #39604906
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

Отключай трекинг.
...
Рейтинг: 0 / 0
inject container self to service
    #39604941
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123handmadeFromRu,
Не делают орм для простых инсерт. Оно вам надо? Долго переписать?


не особо так как дженерик репо, просто подсунуть другую реализацию через тот же дапер. просто пока хотел в одном стиле пока возможно.

трекинг на вставку отключен.
щас порылся в коде - оказалось есть обновление одной сущности, а вот там трекинг включен.

вообщем заводить контейнер внутрь сервиса плохая идея?
...
Рейтинг: 0 / 0
inject container self to service
    #39604966
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

resolver внутрь сервиса? конечно плохая, инжектировать через конструктор -- хорошая идея )
...
Рейтинг: 0 / 0
inject container self to service
    #39604987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,
Логирование, логи, отладка, профилрование.
Выясни чем занят комп 2 мин. Какой был запрос перед зависанием?
Это наша работа.
...
Рейтинг: 0 / 0
inject container self to service
    #39605121
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostthandmadeFromRu,

resolver внутрь сервиса? конечно плохая, инжектировать через конструктор -- хорошая идея )

конечно через конструктор и только через него. но тут пришла идея сделать это через такое в dryioc
Код: c#
1.
2.
3.
public Class(Func<IRepo> repoFactory) {
    var repo = repoFactory();
}


чтоб вызывать новый просто выполняю функтор должно сработать. Просто не хотел некией интерфейс IResolver прокидывать на уровень сервисов.
...
Рейтинг: 0 / 0
inject container self to service
    #39605122
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123handmadeFromRu,
Логирование, логи, отладка, профилрование.
Выясни чем занят комп 2 мин. Какой был запрос перед зависанием?
Это наша работа.

да я понимаю, покрыл по тупому стовотчами и в логфайл, как раз на получение списка из бд висело. хотя судя по sql профилировщику всего 30мс запрос на чтение было. проблема вскрылась именно на продакшине. тесты легко проходили не сразу заметили медленность фонового процесса.
...
Рейтинг: 0 / 0
inject container self to service
    #39605142
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,
Ну дак трекинг отключили и без изменений?
Потом, вы же можете после пачки по 100 штук пересоздать контекст, а не после каждой вставки.
Потом, можно сделать тест вставки отдельно от проекта, и прогнать для уточнения ситуации.
...
Рейтинг: 0 / 0
inject container self to service
    #39605235
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuчтоб вызывать новый просто выполняю функтор должно сработать. Просто не хотел некией интерфейс IResolver прокидывать на уровень сервисов.

а зачем новый? как регистрируешь?
...
Рейтинг: 0 / 0
inject container self to service
    #39605242
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123handmadeFromRu,
Ну дак трекинг отключили и без изменений?
Потом, вы же можете после пачки по 100 штук пересоздать контекст, а не после каждой вставки.
Потом, можно сделать тест вставки отдельно от проекта, и прогнать для уточнения ситуации.
да я ж писал на вставку у меня нет трекинга, трекинг только для update. и там есть апрдей одной сущности.
да я и делал вставку по 100 штук. перешел к идее пересоздания контекта и эт основой вопрос ж мой был)
...
Рейтинг: 0 / 0
inject container self to service
    #39605246
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа зачем новый? как регистрируешь?
чтоб пересоздать контекст, регистрирую как обычно
Код: c#
1.
2.
3.
4.
5.
6.
        public static void Register(this IContainer builder)
        {
            builder.Register(typeof(IUnitOfWork<>), typeof(UnitOfWork<>), reuse: Reuse.InWebRequest);
            builder.Register(typeof(IContextRepository<,,>), typeof(EfRepository<,,>), reuse: Reuse.InWebRequest);
            ...
         }


почитал доку dryioc и он может вернуть функтор на создание нового объекта со всеми зависимости. то что надо

п.с. правда я все ж думаю сделать репозиторий через дапер на случай такие
...
Рейтинг: 0 / 0
inject container self to service
    #39605400
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuчтоб пересоздать контекст, регистрирую как обычно

эт странно. если ты пересоздаёшь контекст в одном скоупе, а потом вызываешь у IUnitOfWork.Save, где и что сохраняется?

смысл плодить инстансы репо? очень странное решение :)
...
Рейтинг: 0 / 0
inject container self to service
    #39605453
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttэт странно. если ты пересоздаёшь контекст в одном скоупе, а потом вызываешь у IUnitOfWork.Save, где и что сохраняется?

смысл плодить инстансы репо? очень странное решение :)

ну я вроде и спрашиваю как лучше сделать) а поп поводу твоих вопрос то IUnitOfWork.Save, сохраняте пачками в моем случае по 100 штук + пара полей другой сущности обновляет в бд. если что то случиться такое не откатить уже конечно
...
Рейтинг: 0 / 0
inject container self to service
    #39605491
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

ef extensions bulk
...
Рейтинг: 0 / 0
inject container self to service
    #39605528
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123handmadeFromRu,

ef extensions bulk
пробовал также минусы что и у пересоздания контекста. а так да шустренько.
...
Рейтинг: 0 / 0
inject container self to service
    #39605533
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,
Что за минусы? Он специально для вставки по несколько штук записей.
...
Рейтинг: 0 / 0
inject container self to service
    #39605563
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123handmadeFromRu,
Что за минусы? Он специально для вставки по несколько штук записей.
1 транзакцией провести?
и чет дохера http://joxi.ru/4Ak00oKFyONGqr
...
Рейтинг: 0 / 0
inject container self to service
    #39605580
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu, Платный?
))
Фигово.
А ef utilites?
...
Рейтинг: 0 / 0
inject container self to service
    #39605592
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 жизнь боль и нет поддержки core net,
Bulk Insert Library

There is three major library supporting Bulk Insert:

Entity Framework Extensions (Paid but supported)
EntityFramework.BulkInsert (No longer supported)
EFUtilities (No longer supported)

пока вопрос закрыт в таком виде.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / inject container self to service
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]