powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эффективная работа с базой данных
15 сообщений из 15, страница 1 из 1
Эффективная работа с базой данных
    #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
Эффективная работа с базой данных
    #38920648
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max aka maxно сдается мне что новое подключение создается каждый раз когда вызываю метод get,
из пула берётся, никаких проблем
max aka maxХотелось бы при запуске приложения создать статическое подключение
не стоит
...
Рейтинг: 0 / 0
Эффективная работа с базой данных
    #38920654
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max aka max, Вы используете pooling, но при этом не знаете, что это такое?

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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