Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14

Медленно работает приложение

05.09.2017, 11:30. Показов 5347. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Прошу помочь, приложение тормозит. Приложение консольное. Это видно по тому, как происходит закрытие по вводу любого символа ReadKey(), а именно нажимаем на любою кнопку, символ становиться виден на экране, потом проходит где-то 3 секунды и приложение закрывается.

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

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
 
/*Активный клиент*/
    class Program
    {
        static void Main()
        {
            Console.Title = "Action Client";
 
 
            // Начало установки связи с локальным моим сервисом
 
            Console.WriteLine("Активный клиент запущен!");           
 
            NachProv();
 
            Console.ReadKey();
        }   
 
        public static int NachProv() // Начальная проверка на присутствие списка нод 
        {
            int a;            
            a = 0;            
            string connect = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename='C:\Users\Dim\documents\visual studio 2017\Projects\ActionClient\ActionClient\DataChain.mdf';Integrated Security=True";
            string query;
 
            SqlConnection sqlcon = new SqlConnection(connect);
            SqlDataReader sqlreader;
            sqlreader = null;
 
            try
            {
                sqlcon.Open();
 
                query = "SELECT COUNT(id) FROM ListNodes";
                SqlCommand comand = new SqlCommand(query, sqlcon);
 
                sqlreader = comand.ExecuteReader();
                sqlreader.Read();
 
                if (Convert.ToInt32(sqlreader[0]) == 0)
                {
                    Console.WriteLine("");
                    Console.WriteLine("Введите список нод в своем клиенте!");
                    Console.WriteLine("Ожидание...");
                    Console.WriteLine("");                    
                }                
 
                if (sqlreader != null)
                {
                    sqlreader.Close();
                }
 
                sqlcon.Close();
                
                a = 1;                
                                
            }
            catch (Exception ex)
            {
                Console.WriteLine("");
                Console.WriteLine("Ошибка связана с базой данных! " + ex);
                Console.WriteLine("");
                a = 0;
                if (sqlreader != null)
                {
                    sqlreader.Close();
                }
                sqlcon.Close();
            }
 
            return a;
        } 
 
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.09.2017, 11:30
Ответы с готовыми решениями:

Datagridview медленно работает
Добрый день ребята. Долго грузятся данные в datagridview из sqlserver 2008r2 да так что форма зависает секунд на 5-7. Это печалька... ...

Очень медленно работает код!
В этом коде производится приращение значений r,g,b - по выбору(из ComboBox) public partial class LavelsRGB : Form { ...

Приложение медленно работает по непонятным причинам
Доброго времени суток! Есть одно приложение которое медленно работает: подолгу (открываются окна и закрываются окна). При этом в...

29
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,397
05.09.2017, 12:33
imhoneer, вообще-то, тут нужен ExecuteScalar()

C#
1
 sqlreader = comand.ExecuteReader();
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
05.09.2017, 14:51  [ТС]
По этому запросу, где есть единственное значение он подойдет. Но ведь мне понадобиться потом и считывать уже нормальные данные из базы.

Поэтому и вопрос, может я подключения не совсем верные сделал, перепутал порядок или что-то не закрыл. Данная программа в Microsoft Visual Studio средствами диагностики показывает память процесса около 15 Мб.

Я просто не подключал раньше базы данных и может такое торможение при срабатывании ReadKey() нормальное.

Добавлено через 10 минут
Также хотелось бы понять, сам код весь работает полностью в синхронном режиме, может такой эффект быть из за него, хотя с другой стороны, ведь вроде всё закрыл где надо.
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
05.09.2017, 16:13
1. Советую присмотреться к адаптерам вместо ридеров. Смысл почти один и тот же, но адаптер умеет заполнять датасет, а с ридером придется обработать NextResult. Это не критично, но как для новичка - будет проще код писать и смотреться будет немного приятней для глаз.
2. Асинхронный режим абсолютно не придаст скорости. Почему-то многие новички неправильно интерпретируют асинхронность и зачем она нужна. Даже больше скажу - в некоторых случаях асинхронный код может увеличить время выполнения - потому что нужно создавать Таску, а это довольно сложная операция для ОС. Асинхронность более критична в UI, так как дает возможность освободить поток обработки событий, и соответственно UI не "замораживается" во время выполнения сложного и/или долгого кода.
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
05.09.2017, 16:56  [ТС]
Просмотрел сейчас диспетчером задач по ресурсам. Сравнил с другой программой, где вычисления есть. По потребляемым ресурсам особо разницы нет. Там тоже используется ReadKey(), только там закрытие происходит мгновенно даже символ не успеваешь увидеть, а здесь пауза 3 секунды идет и потом закрытие приложения.

Как-то база данных все таки влияет, т.к. пробовал и на скомпилированных приложениях.

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

Спасибо за ответы!
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
05.09.2017, 17:18
Цитата Сообщение от imhoneer Посмотреть сообщение
Раз никто на ошибки в коде не указал, то буду это считать странным глюком подключения базы данных.
На практике такие глюки встречаются очень редко. Тем более в .NET. Попробуй вызвать этот метод дважды. И замерь время выполнения 1го и 2го
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            Console.WriteLine("Активный клиент запущен!");           
            
           Stopwatch stopWatch = new Stopwatch();
           stopWatch.Start();
 
            NachProv();
            
            long l = stopWatch.ElapsedMilliseconds;
            Console.WriteLine(l);
 
            NachProv();
 
            stopWatch.Stop();
            Console.WriteLine(stopWatch.ElapsedMilliseconds - l);
 
            Console.ReadKey();
Возможно, 1й вызов тормозит джит-компиляция. И 2й будет намного быстрее.

А вообще согласен с hoolygan, по поводу адаптеров. Сравнивал, адаптер намного быстрее ридера работал
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,397
05.09.2017, 17:38
imhoneer, ну, в представленном коде ничего такого в глаза не бросается. Единственное, что на ум приходит - долгая финализация. Хотя откуда её тут взяться такой долгой, данных-то вы минимум запросили. Попробуйте обращаться с SqlConnection и SqlDataReader как положено - заворачивая в блок using.
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
05.09.2017, 18:37  [ТС]
Цитата Сообщение от netBool Посмотреть сообщение
На практике такие глюки встречаются очень редко. Тем более в .NET. Попробуй вызвать этот метод дважды. И замерь время выполнения 1го и 2го

Возможно, 1й вызов тормозит джит-компиляция. И 2й будет намного быстрее.
А вообще согласен с hoolygan, по поводу адаптеров. Сравнивал, адаптер намного быстрее ридера работал
Вот что получилось по цифрам

1-й 1612

2-й 2

ReadKey() по прежнему тормозит. Если так подумать, то тормоза именно идут в ReadKey() так как сама программа я смотрю достаточно быстро отрабатывает.

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

Добавлено через 11 минут
Только что постепенно убирал операторы попарно. Вначале убрал все sqlreader и остались только sqlcon.Open() и sqlcon.Close(), ReadKey() по-прежнему тормозил. Как только их убрал, ReadKey() сразу мгновенно заработал. Попробую вариант с using, может там что будет нормальным.

Добавлено через 10 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 public static int NachProv() // Начальная проверка на присутствие списка нод 
        {
            int a;            
            a = 0;
 
            using (SqlConnection sqlcon = new SqlConnection())
            {
                sqlcon.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename='C:\Users\Dim\documents\visual studio 2017\Projects\ActionClient\ActionClient\DataChain.mdf';Integrated Security=True";
 
                sqlcon.Open();
                // Работа с базой данных
                sqlcon.Close();
            }
 
            return a;
        }
Только что попробовал вариант с using, только открытие и закрытие, никакого чтения нет вообще. ReadKey() тормозит. В общем тут считаю, что это скорее всего именно баг такой.
0
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,397
05.09.2017, 18:57
imhoneer, при использовании using вызывать метод Close() не нужно.

Я бы не сказал, что это баг. Сбоев-то нет, просто лаг. Возможно связанно именно с LocalDB: СУБД выгружает файл базы данных по окончанию работы (предположение). Немного непонятно почему это сказывается на клиентском приложении, и уже после диспоза.
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
05.09.2017, 20:49  [ТС]
В общем я примерно понял суть. У меня на компьютере Windows 7, в ней были установлены SQL server 2012 nativ client и SQL server 2014 express. Сама же visual studio 2017 года, это студия как правило уже заточена под более новые версии SQL server 2016 года, эту версию я уже установить себе не могу, т.к. установка возможна с Windows 8.1 и больше, таким образом у меня и проявляется данный глюк из за не совсем совместимости.
0
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,397
06.09.2017, 03:17
Цитата Сообщение от imhoneer Посмотреть сообщение
Сама же visual studio 2017 года, это студия как правило уже заточена под более новые версии SQL server 2016 года,
Visual Studio 2017 заточена под C#\VB.NET. Ей плевать с какой СУБД вы будете работать, ибо это происходит через часть .NET Framework - ADO.NET, которая для Visual Studio - просто набор библиотек, как и всё остальное.
1
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
06.09.2017, 09:32
Я вот сейчас скажу глупость, но обязан сказать.
Заверните вызов метода в отдельный Thread, поставьте его потоком заднего плана, тогда при завершении основного потока (клавиши в консольке) - завершится и второй поток - должно будет отработать быстро.
Только это не то, что быстро отработает соединение, а просто быстро завершится (прям даже закрашится) вторичный поток. Костыль ужасный - но в вашем случае должно будет отработать мгновенно.
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
06.09.2017, 11:10  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Visual Studio 2017 заточена под C#\VB.NET. Ей плевать с какой СУБД вы будете работать, ибо это происходит через часть .NET Framework - ADO.NET, которая для Visual Studio - просто набор библиотек, как и всё остальное.
Спорить не буду это так, но проблема именно в LocalDB. Попробую себе установить сервер MySQL, посмотрю как там отрабатывает.

Добавлено через 14 секунд
Цитата Сообщение от Usaga Посмотреть сообщение
Visual Studio 2017 заточена под C#\VB.NET. Ей плевать с какой СУБД вы будете работать, ибо это происходит через часть .NET Framework - ADO.NET, которая для Visual Studio - просто набор библиотек, как и всё остальное.
Спорить не буду это так, но проблема именно в LocalDB. Попробую себе установить сервер MySQL, посмотрю как там отрабатывает.

Добавлено через 2 минуты
Цитата Сообщение от hoolygan Посмотреть сообщение
Я вот сейчас скажу глупость, но обязан сказать.
Заверните вызов метода в отдельный Thread, поставьте его потоком заднего плана, тогда при завершении основного потока (клавиши в консольке) - завершится и второй поток - должно будет отработать быстро.
Только это не то, что быстро отработает соединение, а просто быстро завершится (прям даже закрашится) вторичный поток. Костыль ужасный - но в вашем случае должно будет отработать мгновенно.
Мне нет смысла это делать, так как это для моей общей программы и есть как бы отдельный поток, но который я вообще вынес в отдельное приложение. И раз оно не корректно работает, то надо искать решение.
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
06.09.2017, 11:12
Цитата Сообщение от imhoneer Посмотреть сообщение
Вот что получилось по цифрам
1-й 1612
2-й 2
Ну вот и ответ. Это джит-компиляция, т.е. компиляция в натив забирает время. Это не глюк. У меня например вызов Entity Framework на разовую операцию занимает почти секунду зато 2й раз - 20мс. При чем при эти цифры почти не меняются при чтении одной записи и тысячи записей. В этом случае скорее всего тоже так будет. Первый раз задержка на 1-2 сек - это не критично, как правило. А если критично, то на клиентских компах можно заложить создание нативных образов ngen. И будет все летать даже с первого раза (за исключением развертывания приложения, ну там пару сек подождать можно))))
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,397
06.09.2017, 11:19
Цитата Сообщение от netBool Посмотреть сообщение
Ну вот и ответ. Это джит-компиляция
JIT-компиляция приложения, которое уже завершилось? Я так не думаю.

Добавлено через 1 минуту
Цитата Сообщение от netBool Посмотреть сообщение
У меня например вызов Entity Framework на разовую операцию занимает почти секунду зато 2й раз - 20мс.
А это уже EF модель строит при первом обращении. Ну и JIT.
1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
06.09.2017, 11:53  [ТС]
Цитата Сообщение от netBool Посмотреть сообщение
Ну вот и ответ. Это джит-компиляция, т.е. компиляция в натив забирает время. Это не глюк. У меня например вызов Entity Framework на разовую операцию занимает почти секунду зато 2й раз - 20мс. При чем при эти цифры почти не меняются при чтении одной записи и тысячи записей. В этом случае скорее всего тоже так будет. Первый раз задержка на 1-2 сек - это не критично, как правило. А если критично, то на клиентских компах можно заложить создание нативных образов ngen. И будет все летать даже с первого раза (за исключением развертывания приложения, ну там пару сек подождать можно))))
Нет, это не так. Вот смотрите, они оба уже отработали и закрылись, остался только ReadKey(), который создает паузу чтобы приложение не закрылось после отработки. Вот именно этот ReadKey() так и подтармаживает.

В посте выше я уже написал, что я сделал вообще конструкцию с

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static int NachProv() // Начальная проверка на присутствие списка нод 
        {
            int a;            
            a = 0;
 
            using (SqlConnection sqlcon = new SqlConnection())
            {
                sqlcon.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename='C:\Users\Dim\documents\visual studio 2017\Projects\ActionClient\ActionClient\DataChain.mdf';Integrated Security=True";
 
                sqlcon.Open();
                // Работа с базой данных                
            }
 
            return a;
        }
в которой только есть открытие и закрытие, ни одного запроса нет. Поэтому здесь проблема именно в LocalDB. К сожалению я пока не разобрался как себе грамотно установить MySQL сервер и подключить его к Visual Studio. Поищу примеры в интернете и youtube. Как сделаю, то постараюсь отписаться здесь.
0
06.09.2017, 12:44

Не по теме:

Интересно, работаете с ms sql, а там немного другой код всё-таки для работы.
Почему тогда не поставить express версию оного, а искать проблемы с mysql?

1
0 / 0 / 0
Регистрация: 23.07.2017
Сообщений: 14
06.09.2017, 15:07  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
Интересно, работаете с ms sql, а там немного другой код всё-таки для работы.
Почему тогда не поставить express версию оного, а искать проблемы с mysql?
Мне не принципиально на чем делать базу данных SQL или MySQL, я и ту и другую понимаю. Я именно новичек в c# и если я вижу что у меня не работает нормально база SQL, так как текущая версия Windows7 мне не позволяет обновиться до SQL Server 2016, поэтому я попробую именно сервер MySQL.
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
06.09.2017, 15:36
Цитата Сообщение от imhoneer Посмотреть сообщение
не позволяет обновиться до SQL Server 2016
Это на столько принципиально? Вы будете пользоваться всеми новыми фичами, что появились в 2016 по сравнению с 2014? Ну... может быть. Мне, например, для комфортной работы вполне достаточно и 2008 сервера (правда не експресс редакции, и на работе а не дома - но суть не меняется).
Как уже сказали выше - студии глубоко фиолетово какая версия сиквела у Вас стоит. Она работает посредством типа API, которое ей предоставляет набор библиотек (в Вашем случае это ADO.Net), и код шарпа в моменте подключения и легких селектов не поменяется, будь у вас сиквел 2005 или 2016, думаю что и для будущих версий типа 2018 и 2030 - тоже не поменяется, потому что нехорошо для бизнеса переделывать тучу своего кода от версии к версии. Но, "из-за бугра виднее".
1
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
06.09.2017, 15:48
Цитата Сообщение от Usaga Посмотреть сообщение
JIT-компиляция приложения, которое уже завершилось? Я так не думаю.
Почему завершилось?

Цитата Сообщение от imhoneer Посмотреть сообщение
Нет, это не так. Вот смотрите, они оба уже отработали и закрылись, остался только ReadKey(), который создает паузу чтобы приложение не закрылось после отработки. Вот именно этот ReadKey() так и подтармаживает.
Куда посмотреть? Не представляю, как ReadKey() может подтормаживать. Можно полный листинг кода с замерами?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2017, 15:48
Помогаю со студенческими работами здесь

SPA приложение работает медленно при нескольких вкладках
Всем привет. Разрабатываю SPA приложение на ASP.NET Core Vue.js. Linux (Ubuntu), Ngnix. Использую Webpack. На данный момент...

Создание динамической галереи: при большом количестве картинок приложение работает медленно
Необходимо динамически выводить таблицу из картинок. Картинок может быть более 100 штук, соответственно появляется скролинг. Сейчас...

Медленно работает компьютер, медленно открываются страницы в интернете, тормозит Юутуб
Всем привет! Нужна ваша помощь... Когда производится первый запуск компьютера и я захожу через Mozilly Firefox в интернет, то браузер и...

Медленно прорисовывается приложение
При запуске приложения сначала появляется пустая форма а потом через секунду компоненты на ней как решить подскажите? Qt 5.12.2 +...

Граф. приложение+библиотеки+консольное приложение! Не работает программа без использования консоли. Если использую, то всё прекрасно работает.
Ребята нужна помощь,все вроде сделал, но приложение начинает зависать при запуске без использования консоли, если использую ее то все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru