Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Оптимальное отображение картинок из БД.

422
18 октября 2006 года
Dimarik
181 / / 12.02.2005
Имеется некоторая таблица в БД. В ней поле типа image, в нём хранятся картинки, их необходимо вывести на aspx-страницу. Делаю я при помощи HttpHandler'a. Возможно два варианта.

1. При каждом вызове HttpHandler'a открывать соединение с БД.

Код:
string ConString = WebConfigurationManager.ConnectionStrings["test"].ConnectionString;
        string id = context.Request.QueryString["id"];
        SqlConnection conn = new SqlConnection(ConString);
        SqlCommand cmd = new SqlCommand("Select img from id where id=@id", conn);
        cmd.Parameters.Add("@id", id);
        try
        {
            conn.Open();
            SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
            if (rd.Read())
            {
                int bufferSize = 100;
                byte[] bytes = new byte[bufferSize];
                long bytesRead;
                long readFrom = 0;
                do
                {
                    bytesRead = rd.GetBytes(0, readFrom, bytes, 0, bufferSize);
                    context.Response.BinaryWrite(bytes);
                    readFrom += bufferSize;
                } while (bytesRead == bufferSize);
                rd.Close();
                conn.Close();


2. При запросе страницы картинки записываются в Cache (30 секунд). И в HttpHandler'e постоянно проверяется на наличие данных в Cache, если их нет, то они заново запрашиваются из БД.

Всё было бы отлично с этим Cache, но таких картинок имеется очень много, ну порядка 200 мБ. Но для пула данного приложения есть ограничение по памяти на 100 Мб. Т.е. при привышении данного
лимита некоторые данные Cache вытеснятся принудительно.

Отсюда вопрос: какой вариант предпочтительнее в отношении производительности? Что будет дороже удержание данных в Cache и вытеснение их в случае нехватки памяти. Или производить на каждой странице 10 подключений к Бд.
Данная страница планируестя на 10 одновременных пользователей.

Заранее спасибо за советы.
422
19 октября 2006 года
Dimarik
181 / / 12.02.2005
Разве ни у кого нету предположений?
713
19 октября 2006 года
Ap0k
360 / / 13.03.2006
На мой взгляд стоило бы подумать об умной реализации кеша, в любом случае какие-то картинки запрашиваются чаще какие-то реже, т.е. надо сделать что-то вроде стека с определенным временем жизни каждого элемента, и коэффициэнетом, определяющим целесообразность содержания каждого элемента в кеше (что-то вроде промежуток времени/кол-во запросов). Таким образом можно получить оптимальное решение которое будет представлять нечто среднее между предложенными вариантами.
273
19 октября 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=Ap0k]На мой взгляд стоило бы подумать об умной реализации кеша, в любом случае какие-то картинки запрашиваются чаще какие-то реже, т.е. надо сделать что-то вроде стека с определенным временем жизни каждого элемента, и коэффициэнетом, определяющим целесообразность содержания каждого элемента в кеше (что-то вроде промежуток времени/кол-во запросов). Таким образом можно получить оптимальное решение которое будет представлять нечто среднее между предложенными вариантами.[/quote]
Можно использовать кэш для хранения изображений не в пределах сессии одного пользователя, а общий кэш для всех пользователей. Если ни один пользователь не использует картинку из кэша тут же её удалять. Если хотя бы один пользователь использует картинку, грузить в кэш значит. Хотя осбой проблемы здесь нет, т.к. быстродействие твоей программы несопоставимо с пингом, и даже если не будет кэша пользователь разницы в быстродействии не увидит.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог