Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Cache - снижает производительность / 8 сообщений из 8, страница 1 из 1
08.09.2013, 11:46
    #38390248
ZardoZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
Странная такая ситуация - как только использую Cache для сохранения списков объектов, то производительность снижается почти в 2 раза по сравнению с тем, что я строю эти списки без кеша (а там и запрос к базе есть). Никто не сталкивался?
...
Рейтинг: 0 / 0
08.09.2013, 12:03
    #38390252
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
забавно, не видел такого, покажите код или тестовый проект сюда, чтоб посмотреть и чем мерили
...
Рейтинг: 0 / 0
08.09.2013, 12:18
    #38390261
ZardoZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
handmadeFromRu,
Код генерирует части, которые необходимо собственно кешировать, т.к. у меня контролы создаются динамически и этот код по 10 раз вызывается при нажатии на любую клавишу.
Код: 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.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
       
private List<GridViewColumn> GetCrossTabColumns(out string ColumnsSQL, out List<ASPxSummaryItem> SummaryFooter) 
        {
            //пытаемся взять значения из кеша
            List<GridViewColumn> Cols = (List<GridViewColumn>)Grid.Page.Cache["ColumnsList_id" + idObject.ToString()];
            ColumnsSQL = (string)Grid.Page.Cache["SQLList_id" + idObject.ToString()];
            SummaryFooter = (List<ASPxSummaryItem>)Grid.Page.Cache["SummaryFooter_id" + idObject.ToString()];

             //для теста
            //SummaryFooter = null;
            //List<GridViewColumn> Cols = null;
            //ColumnsSQL = "";

            //если получилось, то передаем их на выход
            if (Cols != null)
                return Cols;

            SummaryFooter = new List<ASPxSummaryItem>();

            var CaptionQueryStr = @"
                SELECT prpc.""ParamRes_id"", prpc.""NameGroup"", param_res.""Name"", rc.""Name"", rc.res_id FROM ""Tepl"".""PointRead"" pr
	            LEFT JOIN ""Tepl"".""ParamResPlc_cnt"" prpc USING (prp_id)
	            LEFT JOIN ""Tepl"".""ParametrResourse"" param_res ON param_res.""ParamRes_id"" = prpc.""ParamRes_id""
	            LEFT JOIN ""Tepl"".""Resourse_cnt"" rc ON rc.res_id = param_res.res_id
	            WHERE plc_id = ";
            CaptionQueryStr += idObject.ToString();
            CaptionQueryStr += @" ORDER BY rc.""Name"", param_res.""Name""";  //сортировки должны совпадать здесь и в crosstab

            var Reader = GetSelectSQLData(CaptionQueryStr);

            if (Reader.HasRows)
            {
                Cols = new List<GridViewColumn>();

                //первая клонка уже создана в дизайнере. Чтобы не геморроится с динамической загрузкой шаблонов из-за 4-х строчек текста 
                Cols.Add(new GridViewDataDateColumn());
                Cols[0].Assign(Grid.AllColumns[0]);
                Cols[0].FooterTemplate = Grid.AllColumns[0].FooterTemplate;

                var i = 0;
                var curGroup = "";
                List<GridViewBandColumn> BandList = new List<GridViewBandColumn>();

                while (Reader.Read())
                {
                    if (curGroup != Reader.GetString(3))
                    {
                        curGroup = Reader.GetString(3);
                        BandList.Add(new GridViewBandColumn());
                        BandList[Cols.Count - 1].Caption = curGroup;
                        Cols.Add(BandList[BandList.Count - 1]);
                    }

                    var CurrentFieldName = "field_" + i.ToString();
                    ColumnsSQL += String.Format("sum(CASE WHEN prp.\"ParamRes_id\" = {0} THEN ar.\"DataValue\" else NULL END) {1},",
                        Convert.ToString(Reader.GetInt32(0)), CurrentFieldName);

                    GridViewDataTextColumn ValueColumn = new GridViewDataTextColumn();
                    ValueColumn.Caption = Reader.GetString(2).Trim();
                    ValueColumn.FieldName = CurrentFieldName;
                    ValueColumn.PropertiesEdit.DisplayFormatString = "{0:F2}";
                    ValueColumn.VisibleIndex = Cols.Count;
                    BandList[BandList.Count - 1].Columns.Add(ValueColumn);

                    ASPxSummaryItem ColumnSummary1 = new ASPxSummaryItem(); //среднее
                    ColumnSummary1.DisplayFormat = "{0:F2}";
                    ColumnSummary1.ValueDisplayFormat = "{0:F2}";
                    ColumnSummary1.FieldName = CurrentFieldName;
                    ColumnSummary1.ShowInColumn = CurrentFieldName;
                    ColumnSummary1.SummaryType = SummaryItemType.Average;
                    SummaryFooter.Add(ColumnSummary1);

                    ASPxSummaryItem ColumnSummary2 = new ASPxSummaryItem(); //минимум
                    ColumnSummary2.DisplayFormat = "{0:F2}";
                    ColumnSummary2.FieldName = CurrentFieldName;
                    ColumnSummary2.ShowInColumn = CurrentFieldName;
                    ColumnSummary2.SummaryType = SummaryItemType.Min;
                    SummaryFooter.Add(ColumnSummary2);

                    ASPxSummaryItem ColumnSummary3 = new ASPxSummaryItem(); //максимум
                    ColumnSummary3.DisplayFormat = "{0:F2}";
                    ColumnSummary3.FieldName = CurrentFieldName;
                    ColumnSummary3.ShowInColumn = CurrentFieldName;
                    ColumnSummary3.SummaryType = SummaryItemType.Max;
                    SummaryFooter.Add(ColumnSummary3);

                    ASPxSummaryItem ColumnSummary4 = new ASPxSummaryItem(); //лимит
                    ColumnSummary4.DisplayFormat = "{0:F2}";
                    ColumnSummary4.ValueDisplayFormat = "{0:F2}";
                    ColumnSummary4.FieldName = CurrentFieldName;
                    ColumnSummary4.ShowInColumn = CurrentFieldName;
                    ColumnSummary4.SummaryType = SummaryItemType.Custom;
                    SummaryFooter.Add(ColumnSummary4);

                    i++;
                }

                Reader.Close();
                //удаляем последнюю ","
                ColumnsSQL = ColumnsSQL.Remove(ColumnsSQL.Length - 1);
            }

            //кешируем результаты 
            Grid.Page.Cache.Insert("ColumnsList_id" + idObject.ToString(), Cols, null, DateTime.Now.AddMinutes(CacheTime),
                System.Web.Caching.Cache.NoSlidingExpiration);
            Grid.Page.Cache.Insert("SQLList_id" + idObject.ToString(), ColumnsSQL, null, DateTime.Now.AddMinutes(CacheTime),
                System.Web.Caching.Cache.NoSlidingExpiration);
            Grid.Page.Cache.Insert("SummaryFooter_id" + idObject.ToString(), SummaryFooter, null, DateTime.Now.AddMinutes(CacheTime),
                System.Web.Caching.Cache.NoSlidingExpiration);

            return Cols;
        }
...
Рейтинг: 0 / 0
09.09.2013, 09:19
    #38390659
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
ZardoZ,

ну а чем меряли и как?
п.с. код конечно "бородатый"
...
Рейтинг: 0 / 0
09.09.2013, 09:47
    #38390678
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
Код просто жуть... Было хотел спросил про алгоритм измерений кеша, но после прочтения кода решил оставить это дело
...
Рейтинг: 0 / 0
09.10.2013, 19:49
    #38422050
konstsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
размер кэша вообще какой?
например на доступных хостингах он ооочень маленький и смысла в нем нет
...
Рейтинг: 0 / 0
10.10.2013, 10:00
    #38422422
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
ZardoZ,

посмотрел код - даже разбираться нет желания. может быть кешировать только данные, а грид по ним строить при каждом постбеке? с точки зрения производительности ничего страшного
...
Рейтинг: 0 / 0
12.10.2013, 12:58
    #38425158
ZardoZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cache - снижает производительность
Да же не знаю в чем была проблема, мерил используя Stopwatch().
Я всё переделал с подгрузкой шаблона и половина кода отпала за ненадобностью. И кеш заработал нормально. Настройки кеша по умолчанию при установке Win2008R2, какие не знаю, т.к. доступа не имею.

Поставил ReSharper, код стал поэстетичней выглядеть :) Ну да главное работает как надо. Первый проект на C# вот и учусь, написали бы лучше, что не нравится в коде, я бы хоть принял к сведению и не делал так больше.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Cache - снижает производительность / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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