powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Multithreading и WebService
4 сообщений из 4, страница 1 из 1
Multithreading и WebService
    #37666452
Gala_l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Есть метод в Webservice, который отбирает данные из многих таблиц. Для ускорения процесса пытаюсь испольовать несколько потоков. Все запросы разделила на 3 группы:
Select1;
Select2;
Select3.

Теперь пытюсь вызывать каждый Select из нового потока. Использовала BackGroudWorker и ThreadPool. В результате первые несколько вызовов метода веб сервиса отрабатывают гораздо быстрее (с 1.1 секунды до 0,6-0,7 секунды), но начиная с какого-го то момента, все начинает тормозить. BackGroundWorker не входит в Completed, а ThreadPool продолжыеи ждать завершения. Что я делаю не так?
...
Рейтинг: 0 / 0
Multithreading и WebService
    #37666873
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы хотите распараллелить сами сиквел запросы, используйте Asynchronous Processing самого соедиения .

Asynchronous Processing
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
DateTime dtStart = DateTime.Now;
string ver = string.Empty;

SqlConnectionStringBuilder cnSettings = new SqlConnectionStringBuilder(
      "Data Source=.;"
    + "Database=PUBS;"
    + "Asynchronous Processing=true;"
    + "Integrated Security=True;"
    + "Max Pool Size=5"
);

using (SqlConnection cn1 = new SqlConnection(cnSettings.ConnectionString))
using (SqlConnection cn2 = new SqlConnection(cnSettings.ConnectionString))
using (SqlConnection cn3 = new SqlConnection(cnSettings.ConnectionString))
{
    using (SqlCommand cmd1 = cn1.CreateCommand())
    using (SqlCommand cmd2 = cn2.CreateCommand())
    using (SqlCommand cmd3 = cn3.CreateCommand())
    {
        cmd1.CommandText = "WaitFor Delay '00:00:10' Select '1st Query
'";
        cmd2.CommandText = "WaitFor Delay '00:00:10' Select '2nd Query
'";
        cmd3.CommandText = "WaitFor Delay '00:00:10' Select '3rd Query
'";
        cn1.Open();
        cn2.Open();
        cn3.Open();

        IAsyncResult ar1 = cmd1.BeginExecuteReader();
        IAsyncResult ar2 = cmd2.BeginExecuteReader();
        IAsyncResult ar3 = cmd3.BeginExecuteReader();

        ar1.AsyncWaitHandle.WaitOne();
        using (SqlDataReader dr1 = cmd1.EndExecuteReader(ar1))
        {
            while (dr1.Read())
            {
                ver += dr1[0].ToString();
            }
        }

        ar2.AsyncWaitHandle.WaitOne();
        using (SqlDataReader dr2 = cmd2.EndExecuteReader(ar2))
        {
            while (dr2.Read())
            {
                ver += dr2[0].ToString();
            }
        }
    

        ar3.AsyncWaitHandle.WaitOne();
        using (SqlDataReader dr3 = cmd3.EndExecuteReader(ar3))
        {
            while (dr3.Read())
            {
                ver += dr3[0].ToString();
            }
        }
    }
}
DateTime dtEnd = DateTime.Now;
ver += "Running Time: " + (dtEnd - dtStart).ToString() + " Seconds
";
Label1.Text = ver;



Если Вы хотите распараллелить какую-то трудоемкую операцию, курите Parallel, PLinq или Task.
BackGroudWorker и ручные ковыряния в тред пуле - выбросьте в мусорку.
...
Рейтинг: 0 / 0
Multithreading и WebService
    #37667004
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gala_l, вместо многопоточности можно использовать Multiple Active Result Sets (MARS) . Примеры: sqlteam.com , msdn .
...
Рейтинг: 0 / 0
Multithreading и WebService
    #37667872
Gala_l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Multithreading и WebService
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]