DGKumar Ответов: 1

Как использовать асинхронный метод в C#, чтобы избежать времени выполнения?


У меня есть список usersIds, для каждого из которых есть 200 выше безопасных ролей.
Я использовал приведенный ниже код для выполнения, но это заняло много времени.
Не могли бы вы, пожалуйста, дать предложение о том, каков наилучший подход для такого типа сценариев в C#

List<SRInformation> objSrInformation = new List<SRInformation>();
//UserList 250
foreach(int userId in userList)
{
      List<SRInformation> SRInformationlist = new List<SRInformation>();
      List<int> srList =new List<int>();
      srList = GetSRListByUserID(id);
      //SR List each one conatin min 200
      foreach(int srId in srList)
      {
	SRInformationlist = GetDetailsBySRId(srID)
        objSrInformation.Add(SRInformationlist);
      }
      
}


Что я уже пробовал:

Я уже пробовал
List<SRInformation> objSrInformation = new List<SRInformation>();
//UserList 250
foreach(int userId in userList)
{
      List<SRInformation> SRInformationlist = new List<SRInformation>();
      List<int> srList =new List<int>();
      srList = GetSRListByUserID(id);
      //SR List each one conatin min 200
      foreach(int srId in srList)
      {
	SRInformationlist = GetDetailsBySRId(srID)
        objSrInformation.Add(SRInformationlist);
      }
      
}

Richard Deeming

objSrInformation.Add(SRInformationlist);

Эта строка не будет компилироваться. Вы это имели в виду AddRange?

List<int> srList = new List<int>();
srList = GetSRListByUserID(id);

Зачем создавать новый объект, если вы просто собираетесь выбросить его, не используя?

1 Ответов

Рейтинг:
2

OriginalGriff

Мы не можем сказать, мы понятия не имеем, где это медленно, не говоря уже о том, почему.
Начните с профилирования вашего приложения и выясните, где оно занимает время и сколько на самом деле занимает. Затем вы можете начать думать о том, как улучшить его, и иметь ориентир для того, насколько большое улучшение вы получаете. Ручное профилирование будет включать в себя добавление Класс секундомера[^] экземпляры к вашему коду и протоколирование времени, которое занимают различные биты, или вы можете использовать профилировщик Visual Studio[^] если ваша версия VS поддерживает его.

Скорее всего, многопоточность не поможет существенно, если она не нацелена на параллельные узкие места - это не волшебная пуля, она включает в себя добавление потоков (которые добавляют время обработки для поддержки), каждый из которых нуждается в свободном ядре для выполнения. Как только все ядра в вашей машине используются, поток приостанавливается в ожидании свободного и не запускается до тех пор, пока он не будет доступен. Добавление потоков без разбора может значительно замедлить работу приложений, поскольку каждый поток использует больше памяти и требует дополнительной вычислительной мощности для управления потоками и их переключения.