[C#] Альтернатива DataTable.Select при иcпользовании Parallel.For

Тема в разделе ".NET", создана пользователем batyrLAN, 3 авг 2012.

  1. batyrLAN

    batyrLAN Писатель

    Регистр.:
    29 июл 2012
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте.
    У меня такая проблема: есть Datatable с двумя столбцами "id' и "col1". Мне необходимо делать выборку значения в столбце "col1" по заданному "id". При обычном переборе цикла for всё работает нормально.

    Код:
    private void testFunction (Datatable dTable1)
    {
      float f1;
      float f2;
      Datarow [] dr1;
     
      for (int i = 0; i < 1000; i++)
      {
          for (int j = 0; j < 1000; j++)
          {
            .........................
            dr1 = dTable1.Select(expression);
            f1 = Convert.ToSingle(dr1[0]["col1"];
            f2 = f1 + ...........;
            .........................
          }
      }
    }
    Но стоит мне использовать Parallel.For, как отладчик на строке f1 = Convert.ToSingle(dr1[0]["col1"]; дает ошибку IndexOutOfRangeException

    Код:
    private void testFunction (Datatable dTable1)
    {
      float f1;
      float f2;
      Datarow [] dr1;
     
      Parallel.For(0, 660, i =>
      {
          for (int j = 0; j < 1000; j++)
          {
            .........................
            dr1 = dTable1.Select(expression);
            f1 = Convert.ToSingle(dr1[0]["col1"];  //тут дает ошибку IndexOutOfRangeException
            f2 = f1 + ...........;
            .........................
          }
      });
    }
    Как я понимаю, в TPL не рекомендуется работать с Datatable и Datarow. Какую можно найти альтернативу?
     
  2. psn

    psn

    Регистр.:
    30 апр 2009
    Сообщения:
    227
    Симпатии:
    30
    бред написан, прочитайте что такое Parallel.For (а также что такое поток) ... кстати, использование Parallel.For далеко не всегда работает быстрее чем просто for в 1 потоке, со всеми вашими выборками
     
    max498 нравится это.