создание потокового или параллельного программирования для нескольких раскрывающихся списков, заполненных SQL Server - PullRequest
0 голосов
/ 21 марта 2012

Итак, у меня есть класс Poco с методом расширения, который заполняет список выбора, как показано ниже. Предположим, у меня есть 10 выпадающих списков, и каждый метод расширения попадает в базу данных и заполняет список SelectList. Теперь я хочу начать каждый метод как поток, это хорошая идея .... Я ищу советы и вещи, которые были бы лучше для повышения производительности и скорости. Поток дороже, чем подключение SQL? Должен ли я запустить два процесса на поток, три, четыре ...?

class person
{
  public person()
  { 
   CrimesListbox1      = CrimesListBox1.populate();
   CrimesListBox2      = CrimesListBox1.populate();
   CrimesListBox3      = CrimesListBox1.populate();
    //so instead of the above way should i..... do the following? 


   Thread t = new Thread (this.CrimesListBox1.populate());          // Kick off a new thread
   t.Start();
   Thread t2 = new Thread (this.CrimesListBox2.populate());   
   t2.Start();
  }
    public SelectList CrimesListBox1{get;set}
    public SelectList CrimesListBox2{get;set}



    public static SelectList populate(this SelectList Object)
        {
                CrimesDataContext LinqCtx = new CrimesDataContext ();

                var CrimesListBox1=
                       (
                        from x in LinqCtx.CrimesListBox1
                        orderby x.Crimes
                        select x
                       );
                Object= 
                        new SelectList
                        (
                            CrimesListBox1, "CrimeId", "CrimeName"
                        );
                return Object;
            }
}//end of the person class

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Теперь я хочу запустить каждый метод как поток, это хорошая идея ....

Нет.Это идея, начинающаяся с «S» и заканчивающаяся «D» и имеющая 4 буквы.

Потоки имеют накладные расходы.Давайте разберемся с точками:

  • В действительности может быть мало смысла использовать асинхронное программирование в любой форме - просто это не приведет к заметной разнице, если ящики длинные.
  • , еслиони, тем не менее, могут быть полезныНо использование отдельных потоков граничит с незнанием .NET Framework.

Решение:

  • Для текущего .NET используйте ЗАДАЧИ.Фреймворк Tasks создан именно для этого.
  • Для .NET 4.5 используйте асинхронные методы.

Те, кто использует внутренне boh поток POOL, поэтому они не открывают другой поток для каждого маленькогозапросить, но сохранить пул рабочих потоков, которым назначены эти небольшие задачи.Потому что создание и уничтожение потока имеет нетривиальные накладные расходы.ThreadPool (решение до .net 4.0), структура задач и асинхронные методы в следующей версии были сделаны специально, чтобы НЕ иметь дело с этими элементами.Задачи достаточно хороши и доступны сейчас.

0 голосов
/ 21 марта 2012

Использование потоков для этой цели - плохая идея.Рассмотрим это правило.Не используйте многопоточность, когда конкурируете за один и тот же ресурс.Ресурс может быть диском, базой данных, экраном, пользовательским интерфейсом.Ваша база данных не становится быстрее при использовании многопоточности, потому что объем работы одинаков для одного и того же ресурса.

Так же, как вычисление тяжелого вычисления на одном ядре не будет быстрее при разделении работыиспользуя потоки.Так же, как чтение нескольких файлов с одного диска не будет быстрее, если разделить работу с потоками.

В этих примерах используется один ресурс, процессор и диск, который работает максимально быстро.

Потоки полезны, когда вы хотите объединить два ресурса.Чтение с диска во время вычисления процессора, многопоточность может быть преимуществом для предварительной выборки данных для расчета и т. Д.

0 голосов
/ 21 марта 2012

Вы можете использовать Parallel Linq (PLinq), если вы используете .Net 4.0 или выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...