2010-08-17 2 views
2

я хочу Seach более 15000 значений в операторе отбора, как показано ниже:Многопоточный поиск с использованием C#

select * from tableA where id in (1,2,3......16000)

Могу ли я использовать темы, скажем, около 3, и partion 15000 значений в diffrent оператора выбора.

  1. select * from tableA where id in (1,2,3......5000)
  2. select * from tableA where id in (5001....10000)
  3. select * from tableA where id in (10001....15000)

и запустить эти 3 выберите Постулаты параллельно.

+0

Это может помочь, если вы включили, что дб вас» re using –

+2

Вы технически можете это сделать, но если вы не намерены обрабатывать данные в кусках, это не поможет вам. Фактическое вытягивание данных будет выполняться более эффективно, чем однократное. Если это так, вам нужно обработать данные в кусках, я сначала вытащил данные, а потом разделил их на стороне клиента, а не пытался вытащить их как отдельные наборы с сервера. –

ответ

2

Да, но реальный вопрос - почему?

Нечто подобное могло бы, чтобы вы начали:

var itms = new List<YourDataClass>(); 

var thr1 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 
var thr2 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 
var thr3 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 

thr1.Start(); 
thr2.Start(); 
thr3.Start(); 

Однако, что сказал, если ваши идентификаторы являются целыми числами и (в зависимости от вашего образца) диапазон IN значений последовательно, вы можете переключиться на a where id > 1 and id < 16000 стиль. Это может повысить производительность.

+0

ids не являются последовательными и могут быть или не быть intrger – TalentTuner

+0

Понял, образцы данных в вашем вопросе заставили его выглядеть так, как они могут быть. – Nate

0

Это возможно и может быть хорошей идеей, так как отправка (очень) большого IN оператора в базу данных может привести к ошибкам.

Ваша база данных должна обрабатывать ваши параллельные запросы правильно и без проблем.

1

Вы можете пытались параллельного программирования особенность C# 4.0

Это довольно просто:

List<String> jobs = new List<String>(); 
Parallel.ForEach(jobs, job=> 
    { 
     Foo(job); 
    } 
); 

Посмотрите на это: http://msdn.microsoft.com/en-us/library/dd460720.aspx

Смежные вопросы