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

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. Какую можно найти альтернативу?
 

psn

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