2010-11-11 2 views
0

привет у меня есть ситуации сущности customerManager склад клиент и поставщики мои цели:C#, как реализовать базу данных, которая опрашивается нитями

  1. склад является singletone и открытым дб во время выполнения.
  2. customerManager управляет клиентами как потоки, которые запрашивают склад и обновляют его (после покупки персонала).
  3. Когда один из предметов на складе заканчивается, мы просим поставщика в другой цепочке предоставить его нам ", пока поставщик делает свое дело (предположим, что это что-то вроде 5 секунд) клиент ждет (в очереди) и вызывается, когда метод поставщика возвращается истинный (предположим, что это возвращает истину всегда) ..

поэтому мои вопросы о 3 вещи:

  1. дизайн - в случае, если customerManager держит внутри его магазин ouse и клиентов? это похоже на лучшую душу, кто-то порекомендовал иначе? (тема дизайна C#)

  2. сколько потоков может идти в БД сразу? может ли db обработать его самостоятельно, поэтому мне не нужно делать это самостоятельно? должен ли я удерживать для них SqlCommand (s)? следует ли использовать набор данных или datareader? другими словами может кто-нибудь посоветовать мне, как это сделать? я должен сделать для 10 потоков:

    for (int i = 0 ; i < 10 ; i++) 
    { 
        SqlConnection sqlConnection = new SqlConnection(r_ConnectionString);  
        sqlConnection.Open(); 
        sqlConnection.Close(); 
    } 
    

... так Conection бассейн будет открыт в течение 10 connectiones?

** базы данных ADO.NET ** тема

  1. как следует нити ждать в очереди? (Для того, чтобы ждать метода поставщика будить их), как их разбудить? есть ли хорошее решение в C# для этого? (тема темы C#)

Я думаю, что этот вопрос слишком длинный, но в противном случае он был бы слишком вне контекста, поэтому я был бы признателен, если бы вы напили в заголовке какой вопрос вы хотите ссылаться.

спасибо.

+0

Все базы данных задаются потоками :) – Woot4Moo

+0

@ Woot4Moo, так что если я знаю, что у меня есть 10 потоков, я должен выполнить sqlConnection.Open() и sqlConnection.Close(); 10 раз, чтобы у пула было 10 соединений? –

+0

Это звучит намного лучше, чем пытаться использовать одно и то же SQL-соединение из 10 потоков ... – 2010-11-12 00:03:01

ответ

0

SqlConnections реализованы в .net, используя пул соединений. Вам не нужно беспокоиться об управлении своими соединениями. Единственное требование для вас - это то, что вы открываете их, которые вы вызываете .close. .net будет эффективно управлять остальными для вас.

Если вы хотите одновременно запускать несколько запросов, вы можете вызвать sqlcommand с вызовом begin и end invoke.

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

Однако вы читаете ADO.Net, потому что многое из того, о чем вы говорите, не нужно, когда вы знаете, как это работает.

как для набора данных, так и для datareader, который зависит от вашей проблемы, Dataset - очень тяжелый объект, но datareaders легкие и быстрые, что позволяет легко заполнять коллекцию.

Я предпочитаю использовать инфраструктуру linq2sql хотя или сущность. ADO.Net является довольно хрупким, потому что вы должны делать много кастинга на данных и вручную сопоставлять объекты, которые подвержены ошибкам во время выполнения, а не время компиляции.

1

Ваши рабочие нити могут быть обработаны через BlockingCollection или ConcurrentQueue.

Для управления соединением вам лучше сделать это:

using (SqlConnection conn = new SqlConnection(...)) 
{ 
} 

, так как это обеспечивает Dispose() вызывается для вас. Как отмечено в других отзывах, вы можете сделать это, не беспокоясь о фактическом подключении к БД с ADO.Net manages a pool of physical connections за кулисами.

Никто не может сказать, работает ли DataSet или DataReader, это зависит от вашего использования данных после его загрузки. DataReader обеспечивает последовательное считывание каждой записи по очереди, в то время как DataSet обеспечивает кеш-память в базе данных базовых данных БД и в этом смысле является абстракцией более высокого уровня.

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