powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Работа с памятью и Store
23 сообщений из 23, страница 1 из 1
Работа с памятью и Store
    #39443130
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, товарищи!

Делаю вэб приложение на ASP.NET+ EXT.NET.

В приложении много такого вида кода, где привязываю данные из БД к гридам

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 protected void getExpInfo(object sender, StoreReadDataEventArgs e)
    {

        int? sotrud = JSON.Deserialize<int?>(e.Parameters["sotrud"]);
        DateTime dt1 = Convert.ToDateTime(e.Parameters["dt1"]);
        DateTime dt2 = Convert.ToDateTime(e.Parameters["dt2"]);
        string analitik = e.Parameters["analitik"];         

        Store store = sender as Store;
        DataTable dt = DatabaseAdapterUser.getExpInfo(analitik, sotrud, dt1, dt2);

        store.DataSource = dt;
        store.DataBind();

    }



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

Посоветуйте, пожалуйста, как в таких случаях нужно освобождать память.

Пожалуйста, сильно не пинайте, если это просто и не достойно быть отдельной темой. Я реально ни разу не работал с памятью в ASP.NET и прибывал в наивной уверенности, что система сама все сделает.
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443150
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему ты думаешь, что проблема именно тут?
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443164
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin,

профайлером его, профайлером, фас!
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443248
german23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гарбаджколлектор.коллект()

GC.Collect();
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443418
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
german23,

Сделал вот так, но проблема не решилась. Верно ли использовал GC.Collect();?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 
 protected void getExpInfo(object sender, StoreReadDataEventArgs e)
    {

        int? sotrud = JSON.Deserialize<int?>(e.Parameters["sotrud"]);
        DateTime dt1 = Convert.ToDateTime(e.Parameters["dt1"]);
        DateTime dt2 = Convert.ToDateTime(e.Parameters["dt2"]);
        string analitik = e.Parameters["analitik"];         

        Store store = sender as Store;
        DataTable dt = DatabaseAdapterUser.getExpInfo(analitik, sotrud, dt1, dt2);

        store.DataSource = dt;
        store.DataBind();

        GC.Collect();

    }
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443422
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
подскажи, пожалуйста, более точнее. Каким именно профайлером?
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443426
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRu,
Выяснил опытным путем.
Открыл Диспетчер задач, там процесс w3wp.exe
Начал делать разные действия в приложении.

В итоге при обновлении любых сторов у которых код как в примере или даже проще без параметров, у процесса w3wp.exe
увеличивается память от +1 мб до +20 мб.

Так за несколько щелчков память достигает предела
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443507
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай код DatabaseAdapterUser.getExpInfo().
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443544
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучДавай код DatabaseAdapterUser.getExpInfo().
Вот код
Код: 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.
 
 public static DataTable getExpInfo(string analitik, int? sotrud, DateTime dt1, DateTime dt2)
        {
            SqlConnection sqlConnection = DatabaseAdapterUser.GetSqlConnection();
            SqlCommand cmd = new SqlCommand();

            cmd.CommandText = "getExpInfo";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@analitik", analitik);
            cmd.Parameters.AddWithValue("@sotrud", sotrud);
            cmd.Parameters.AddWithValue("@dt1", dt1);
            cmd.Parameters.AddWithValue("@dt2", dt2);          

            cmd.Connection = sqlConnection;

            sqlConnection.Open();
            DataTable dataTable = new DataTable();

            dataTable.Load(cmd.ExecuteReader());

            sqlConnection.Close();

            return dataTable;
        }
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443551
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решето же. Для начала попробуйте так:

Код: 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.
public static DataTable getExpInfo(string analitik, int? sotrud, DateTime dt1, DateTime dt2)
{
    var dataTable = new DataTable();

    using(var sqlConnection = DatabaseAdapterUser.GetSqlConnection())
    using(var cmd = new SqlCommand())
    {
        sqlConnection.Open();

        cmd.Connection = sqlConnection;

        cmd.CommandText = "getExpInfo";
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@analitik", analitik);
        cmd.Parameters.AddWithValue("@sotrud", sotrud);
        cmd.Parameters.AddWithValue("@dt1", dt1);
        cmd.Parameters.AddWithValue("@dt2", dt2);

        using(var dataReader = cmd.ExecuteReader())
            dataTable.Load(dataReader);
    }

    return dataTable;
}
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443559
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобуч, мил-человек
по твоей наводке попробовал сделать так
Код: 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.
 public static DataTable getExpInfo(string analitik, int? sotrud, DateTime dt1, DateTime dt2)
        {
            SqlConnection sqlConnection = DatabaseAdapterUser.GetSqlConnection();
            SqlCommand cmd = new SqlCommand();

            cmd.CommandText = "getExpInfo";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@analitik", analitik);
            cmd.Parameters.AddWithValue("@sotrud", sotrud);
            cmd.Parameters.AddWithValue("@dt1", dt1);
            cmd.Parameters.AddWithValue("@dt2", dt2);

            cmd.Connection = sqlConnection;

            sqlConnection.Open();
            DataTable dataTable = new DataTable();

            dataTable.Load(cmd.ExecuteReader());

            sqlConnection.Close();

            try
            {
                return dataTable;
            }
            finally
            {
                cmd = null;
                dataTable = null;
                GC.Collect();
            } 
             
        }



Потестил уже вроде как лучше стало. Сейчас до дома доеду и попробую твой код. Отпишусь
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443581
german23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диспозить надо конечно, ай ай ай
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443582
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkinНахлобуч, мил-человек
по твоей наводке попробовал сделать так
Почему не сделать ровно так, как я предложил?
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443590
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобуч, сделаю как предложили, просто уже на радостях домой поехал с работы. Отпишусь по итогу
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443700
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нахлобуч
Почему не сделать ровно так, как я предложил?
Эх, что то я рано порадовался. Сделал как вы написали, но так же использование памяти безконтрольно растет. Мой код так же. Просто выдал желаемое за действительное.

Может еще есть идеи как разобраться с этим?
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443713
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin Верно ли использовал GC.Collect();?
нет, конечно.

используй к примеру http://jetbrains.ru/products/dotmemory/

п.с. ты прям четко определил место в своем проекте что именно тут течет память - меня удивило, учитывая что ты не понимаешь как работает сборщик мусора.

п.с. то что тебе посоветовал Нахлобуч 100% работает, что у тебя внутри DatabaseAdapterUser.GetSqlConnection() ? при условии конечно что именно этот твой метод течет что я сомневаюсь
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443716
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkinhandmadeFromRu,
Выяснил опытным путем.
Открыл Диспетчер задач, там процесс w3wp.exe
Начал делать разные действия в приложении.

В итоге при обновлении любых сторов у которых код как в примере или даже проще без параметров, у процесса w3wp.exe
увеличивается память от +1 мб до +20 мб.

Так за несколько щелчков память достигает предела
дык код который нахлобуч тебе написал надо везде использовать где соединения с бд
если у тебя не закрывались соединения то у тебя ошибка кол-ва доступных соединений вылетела бы раньше чем память кончилась имхо, ну если у тебя там не впритык оперативки.
п.с. сборщик мусора не сразу очищает за собой ресурсы..то что прирост идет эт нормально, вопрос только насколько прирост
п.с. п.с. диспетчер винды ваще крайне плохой показатель ...даж встроенный в вижлу профилировщик и то информативнее
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443717
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRu что у тебя внутри DatabaseAdapterUser.GetSqlConnection() ? при условии конечно что именно этот твой метод течет что я сомневаюсь
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static SqlConnection GetSqlConnection()
        {
            return new SqlConnection(DatabaseAdapterUser.ConnectionString);
        }

public static string ConnectionString
        {
            get
            {
                object value = HttpContext.Current.Session["ConnectionStrings"];

                if (value != null)
                {
                    return Convert.ToString(value);
                }
                return null;
            }
        }


Вот что внутри DatabaseAdapterUser.GetSqlConnection()
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443721
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRu
используй к примеру http://jetbrains.ru/products/dotmemory/

Да, установил dotmemory, сел разбираться.
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443835
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin,

ну вот прокачаетесь когда найдете учетку памяти, заодно передавайте привет разработчикам кода и их полной не компетенции

п.с. улыбнуло хранение строки соединения в сессии
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39443989
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо вам добрые люди! Нашел главную дыру куда память уходила. Им оказался FastReport - генератор отчетов.

Нашел с помощью dotMemory - отличная программа.

handmadeFromRu, передать привет некому, сам и певец и жнец и на дуде игрец.
Подскажи, пожалуйста, чем плохо хранение строки соединения в сессии и как лучше делать?
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39444005
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkinПодскажи, пожалуйста, чем плохо хранение строки соединения в сессии и как лучше делать?
ну а смысл какой? у тебя что для каждой сессии свой конекшен ?
обычно из конфиг файла, он в памяти всегда висит пока сайт работает.
Код: c#
1.
ConfigurationManager.ConnectionStrings["somename"].ConnectionString



рекомендую еще посмотреть в сторону dapper.net, если у тебя голый sql, упростит маппинг на объекты.
...
Рейтинг: 0 / 0
Работа с памятью и Store
    #39444018
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRuilshatkinПодскажи, пожалуйста, чем плохо хранение строки соединения в сессии и как лучше делать?
ну а смысл какой? у тебя что для каждой сессии свой конекшен ?
обычно из конфиг файла, он в памяти всегда висит пока сайт работает.
Код: c#
1.
ConfigurationManager.ConnectionStrings["somename"].ConnectionString



рекомендую еще посмотреть в сторону dapper.net, если у тебя голый sql, упростит маппинг на объекты.

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

dapper.net погляжу, спасибо
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Работа с памятью и Store
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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