Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эффективная работа с базой данных / 15 сообщений из 15, страница 1 из 1
30.03.2015, 08:39
    #38920637
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
Доброго времени суток Всем!

Разрабатываю многопользовательское приложение для компании, отделы которой разбросаны по всей России. Есть 3 базы данных с которыми приложение должно работать, каждая база состоит из более 1000 таблиц с общим объемом не менее 3 гигов.
Хотел бы узнать Ваше мнение как эффективнее работать с базами данных, т.е., хотел бы слышать концепцию подключения к базам данных и получения (переполучения) данных. Сейчас для каждой базы сделал свои классы отличающимися друг от друга только строкой подключения с поддержкой Connection Pool.
Класс для работы с БД:
Код: 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.
public static class Claris
    {
        private static string connString = "server=SERVER_IP;database=DBASE_NAME;uid=DBLOGIN;password=DBPASS;Min Pool Size=1;Max Pool Size=20;MultipleActiveResultSets=True;Pooling=True;Enlist=true;";
 
        public static DataTable get(string query)
        {
            DataTable result = new DataTable();
            result.Rows.Clear();
            try
            {
                using (SqlConnection conn = new SqlConnection(connString))
                {
                    conn.Open();
                    
                        SqlDataAdapter da = new SqlDataAdapter();
                        da.SelectCommand = new SqlCommand(query, conn);
                        da.Fill(result);

                    conn.Close();
                }
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }
            return result;
        }

        public static void fillInBackground(DataTable table, string query)
        {
            table.Rows.Clear();
            Thread myThread = new System.Threading.Thread(delegate()
            {
                try
                {
                    using (SqlConnection conn = new SqlConnection(connString))
                    {
                        conn.Open();
                        SqlDataAdapter da = new SqlDataAdapter ();
                        da.SelectCommand = new  SqlCommand(query, conn);
                        da.Fill(table);
                        conn.Close();
                    }
                }
                catch (SqlException e)
                {
                    mfunc.info(e.Message);
                }
            });
            myThread.IsBackground = true;
            myThread.Start();
        }       

    }



методом get я каждый раз получаю нужные мне данные для grid, dbcombobox и т.д., но сдается мне что новое подключение создается каждый раз когда вызываю метод get, а кол-во подключений на сервере БД ограничено.
Хотелось бы при запуске приложения создать статическое подключение и все дальнейшие запросы проводить через него. а еще должно поддерживаться многопоточность чтобы информационные блоки приложения заполнялись в режиме background.

Спасибо всем за участие.
...
Рейтинг: 0 / 0
30.03.2015, 08:51
    #38920648
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxно сдается мне что новое подключение создается каждый раз когда вызываю метод get,
из пула берётся, никаких проблем
max aka maxХотелось бы при запуске приложения создать статическое подключение
не стоит
...
Рейтинг: 0 / 0
30.03.2015, 08:56
    #38920654
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka max, Вы используете pooling, но при этом не знаете, что это такое?

Читайте: SQL Server Connection Pooling (ADO.NET)
...
Рейтинг: 0 / 0
30.03.2015, 09:10
    #38920667
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
skyANA,

про Pool я знаю, но дело в том что, если я укажу Max Pool Size = 20, значит ли это что приложение создает 20 новый подключений и хранит их в своем "массиве", таким образом у меня с одного приложения создается 20 подключений на сервер ?
...
Рейтинг: 0 / 0
30.03.2015, 09:37
    #38920702
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxskyANA,

про Pool я знаю, но дело в том что, если я укажу Max Pool Size = 20, значит ли это что приложение создает 20 новый подключений и хранит их в своем "массиве", таким образом у меня с одного приложения создается 20 подключений на сервер ?Нет, конечно если Вы сами такой код не написали.

У Вас возникают какие-то проблемы, или Вы просто фантазируете?
...
Рейтинг: 0 / 0
30.03.2015, 10:36
    #38920769
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
skyANA,
Вышеприведенный класс у меня для работы с БД, я нигде больше не создаю никаких подключений, все что нужно я забираю из БД методом Claris.get("Select ALL FROM TABLE");
Ничего не фантазирую, просто хотел узнать мнения форумчан по поводу класса в коде.
...
Рейтинг: 0 / 0
30.03.2015, 10:42
    #38920779
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
skyANA,

и еще вопрос, например, если приложение минут 15 простоит без работы, а потом делаешь какое нибудь действие которое обращается к БД, то приложение намертво зависает на минут 2-3, грешу опять же на подключение, только никак не могу уловить в чем проблема.
...
Рейтинг: 0 / 0
30.03.2015, 11:05
    #38920820
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxРазрабатываю многопользовательское приложение для компании, отделы которой разбросаны по всей России
max aka maxкак эффективнее работать с базами данных, т.е., хотел бы слышать концепцию подключения к базам данных и получения (переполучения) данных

Не нужно клиент -сервер, используйте многозвенку, например, WebAPI + OData
...
Рейтинг: 0 / 0
30.03.2015, 11:12
    #38920830
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
Arm79Не нужно клиент -сервер, используйте многозвенку, например, WebAPI + OData

что за смесь звери ? не просветите ? на какой логике основана ?
...
Рейтинг: 0 / 0
30.03.2015, 11:16
    #38920834
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxArm79Не нужно клиент -сервер, используйте многозвенку, например, WebAPI + OData

что за смесь звери ? не просветите ? на какой логике основана ?
https://msdn.microsoft.com/ru-ru/magazine/dn201742.aspx
...
Рейтинг: 0 / 0
30.03.2015, 11:25
    #38920855
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxskyANA,
Вышеприведенный класс у меня для работы с БД, я нигде больше не создаю никаких подключений, все что нужно я забираю из БД методом Claris.get("Select ALL FROM TABLE");Это ни о чём не говорит. Сколько у Вас одновременных вызовов методов get и fillInBackground?
max aka maxНичего не фантазирую, просто хотел узнать мнения форумчан по поводу класса в коде.Так себе хелпер.
...
Рейтинг: 0 / 0
30.03.2015, 11:30
    #38920867
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxskyANA,

и еще вопрос, например, если приложение минут 15 простоит без работы, а потом делаешь какое нибудь действие которое обращается к БД, то приложение намертво зависает на минут 2-3Нужны подробности. Отделы разбросаны по всей России, а сервера где? При старте программы таже петрушка?
max aka maxгрешу опять же на подключение, только никак не могу уловить в чем проблема.Мониторить и профилировать надо, а не грешить.
...
Рейтинг: 0 / 0
30.03.2015, 14:21
    #38921188
max aka max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
skyANA,

Сервера все находятся в Москве, скорость интернета и конфигурации серверов очень приличные, там БД вообще не тормозят. Подключение к БД при запуске приложения занимает около 5-6 секунд. а где посмотреть профайлер? ведь в SQL profiler я могу смотреть только действия уже после того как запрос пришел на сервер. Я вот ищу где висят эти 5-6 секунды
...
Рейтинг: 0 / 0
01.04.2015, 10:12
    #38923411
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka max,

Гуглить по "performance profiler .net". И не забывать про заветы Ильича: "учиться, учиться и учиться".
...
Рейтинг: 0 / 0
01.04.2015, 10:24
    #38923440
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективная работа с базой данных
max aka maxskyANA,

Сервера все находятся в Москве, скорость интернета и конфигурации серверов очень приличные, там БД вообще не тормозят. Подключение к БД при запуске приложения занимает около 5-6 секунд. а где посмотреть профайлер? ведь в SQL profiler я могу смотреть только действия уже после того как запрос пришел на сервер. Я вот ищу где висят эти 5-6 секундыТо есть Вы убедились, что проблемы не на стороне сервера? Что 5-6 секунд он ждёт запроса от клиента?

Если так, то мониторить сеть и смотреть профайлером (встроенным в студию, или бесплатным CLR Profiler) что в этот момент происходит в приложении.
Также на стороне клиента можно SQL Management Studio запустить и посмотреть, что там с соединением происходит и запросами.

ИМХО долго устанавливается физическое соединение с сервером. А через 15 минут бездействия клиента, сервер отрубает сокет и по новой.
Тут не в приложении проблема, тут к админам надо идти.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эффективная работа с базой данных / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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