Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! В общем столкнулся с небольшой незадачей : необходимо на клиенте отображать неопределенное количество изображений( потенциально может быть больше 1000 ) формата JPEG( и ему подобных ). Как выясняется на этапе программинга, файлы картинок весят от одного мега на брата и вот изначально я решил делать несвязный доступ к базе данных, т е используя DataAdapter и DataSet, но позже понял, что если будет выбрано огромное количество картинок, то просто физически может не хватить места в оперативке компа, т е , как я понимаю, датасет размещается именно в кэше. Поэтому щас думаю, может отказаться( пока не поздно:) ) от несвязного уровня и перейти на связный, т е используя в конечном счете DataReader. Но, как я понимаю, датареадер только для однонаправленного чтения( причем быстрого чтения, т к будет считывать в запросе по одной записи ), а возможно, что в будущем потребуется расширение функционала, связанного с модификацией изображений, как тогда из положения выходить. Может есть какая нить возможность оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер. Подскажите как быть то?
15 июл 07, 12:59    [4390258]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
Расскажите для начала, на кой клиенту понадобится сразу 1000 изображений? Не проще ли отдавать ему Thumbnail'ы в пару десятков килобайт каждый, а там уже решать, какие изображения и когда грузить целиком?

И что вы вообще подразумеваете под "связным" и "несвязным"?
15 июл 07, 23:00    [4390632]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

Нахлобуч
И что вы вообще подразумеваете под "связным" и "несвязным"?


это не я, это Эндрю Троелсен:). Связный -> sqlDataReader, несвязный -> DataSet( DataAdapter ). Что касается изображений, то их может быть гораздо более 1000 : 24 * 1 * 3600 * 24 * 365( максимальное количество картинок( кадров за год )( также возможно в будущем будем прокручивать и ролики ), который возможно понадобится отображать пользователю ). Хотим сделать отображение видеоряда в виде обыкновенных иконок( в базе данных сейчас сами тяжеловесные отображения( более мега на брата ) ), т е как то необходимо преобразовать данные в более легкие по памяти, как этого достичь неизвестно мне, пока:). Вы мне лучше растолкуйте, что значит Thumbnail'ы, буду признателен.
16 июл 07, 10:41    [4391392]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
FasterHarder
это не я, это Эндрю Троелсен:). Связный -> sqlDataReader, несвязный -> DataSet( DataAdapter ).

У меня в книге это читается как Disconnected, что не есть "несвязный", а скорее "рассоединенный".
FasterHarder

Что касается изображений, то их может быть гораздо более 1000 : 24 * 1 * 3600 * 24 * 365( максимальное количество картинок( кадров за год )( также возможно в будущем будем прокручивать и ролики ), который возможно понадобится отображать пользователю ).

Клиент в каком виде выполняется? WebForms или WinForms?
FasterHarder
необходимо преобразовать данные в более легкие по памяти, как этого достичь неизвестно мне, пока:). Вы мне лучше растолкуйте, что значит Thumbnail'ы, буду признателен.

Thumbnail
16 июл 07, 11:22    [4391675]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

Нахлобуч
Клиент в каком виде выполняется? WebForms или WinForms?


пока на Win, но 100% будет писаться софт и под веббинг.
16 июл 07, 13:27    [4392584]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
FasterHarder
пока на Win, но 100% будет писаться софт и под веббинг.

На ум приходит, например, такой вариант. Миниатюры отдаются веб-сервисом через HTTP и отображаются на клиенте небольшими порциями. Плюсы подхода -- при умелом использовании If-Modified-Since, HTTP Status 304 и клиентского кэша можно добиться очень высокой производительности при минимальных усилиях.
16 июл 07, 14:34    [4393202]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

пока про веб не думаем( разрабатываем только общие библиотеки ). За ссылку спасибо( файл объемом 1.5 мега преобразовал в 40 Кб, используя пиктограмму картинки ), но возник вопрос, связанный с тем, что размер простой иконки примерно около 25 кб, а я программно вытаскиваю данные с sql_2005, затем помещаю в PictureBox и сохраняю в файл с расширением bmp и получаю очень странную картину, все файлы весят около 15 Кб( хотя простая иконка весит больше ). Плюс ко всему делаю еще одну проверку в коде :

sql_dataRdr = oudh_DLL.LoadDay(sql_conn, sql_comm, sql_connectString, sql_select );

            sql_dataRdr.Read();
                        

            byte[] b = sql_dataRdr.GetSqlBinary(0).Value;
            MessageBox.Show(b.Length.ToString());
            System.IO.MemoryStream ms = new System.IO.MemoryStream(b, 0, b.Length);
            Bitmap im = (Bitmap)Bitmap.FromStream(ms);            
            pictureBox1.Image = im;

messagebox выдает типа 15890, т е как я понимаю это действительный размер файла, сохраненного в базе данных( и опять имею около 15 Кб ). Снимки были сделаны с камеры, в формате jpeg. Нестыковочка получается, что реальные кадры весят меньше чем какая то иконка или возможно, я неправильно определяю действительный размер картинки, сохраненной в базе данных( думал, что должны быть около 1 М :) ). Есть ли какая нить возможность, программно определить действительный размер файла, залитого в базу данных в виде изображения. Подскажите как быть то?
16 июл 07, 16:06    [4394038]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
FasterHarder

пока про веб не думаем( разрабатываем только общие библиотеки ).

В таком стиле:
sql_dataRdr = oudh_DLL.LoadDay(sql_conn, sql_comm, sql_connectString, sql_select );

            sql_dataRdr.Read();
                        

            byte[] b = sql_dataRdr.GetSqlBinary(0).Value;
            MessageBox.Show(b.Length.ToString());
            System.IO.MemoryStream ms = new System.IO.MemoryStream(b, 0, b.Length);
            Bitmap im = (Bitmap)Bitmap.FromStream(ms);            
            pictureBox1.Image = im;
будете очень долго и нудно разрабатывать.
FasterHarder

messagebox выдает типа 15890, т е как я понимаю это действительный размер файла, сохраненного в базе данных( и опять имею около 15 Кб ). Снимки были сделаны с камеры, в формате jpeg. Нестыковочка получается, что реальные кадры весят меньше чем какая то иконка или возможно, я неправильно определяю действительный размер картинки, сохраненной в базе данных( думал, что должны быть около 1 М :) ).

Так вы так думали или так и есть? Судя по коду (еще неизвестно, правда, какой там SELECT исполняется) все верно.
FasterHarder

Есть ли какая нить возможность, программно определить действительный размер файла, залитого в базу данных в виде изображения. Подскажите как быть то?

Это самая насущная проблема что ли?

Для SQL Server есть функция DATALENGTH
16 июл 07, 16:49    [4394426]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

сейчас идет этап проектирования системы, так что на детали и реализацию не обращайте внимания( все привожу для абстракции ):).
16 июл 07, 18:08    [4394961]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
FasterHarder
Как выясняется на этапе программинга,

Так какой этап :) ?
16 июл 07, 18:15    [4394998]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

на самом деле очень много подводных камней( практически все будет связано с графикой ), поэтому сейчас я моделирую сложность процессов на простых примерах( программингом ), чтоб затем без проблем инкапсулировать куда надо:), т е в целом сейчас еще не сформировано проектирование, а идет этап выявления узких мест( проектирование + "легкий" код ) :).
16 июл 07, 18:32    [4395094]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареа  [new]
Нахлобуч
Member

Откуда: https://hglabhq.com
Сообщений: 3939
FasterHarder
на самом деле очень много подводных камней

Каких, если не секрет?
16 июл 07, 18:45    [4395138]     Ответить | Цитировать Сообщить модератору
 Re: оставить несвязанный уровень, не погубив систему или однозначно придется юзать датареадер  [new]
FasterHarder
Member

Откуда: Самара
Сообщений: 889
I started in 1983, in 2007 i still on a case!

Нахлобуч
Каких, если не секрет?


все же ведь относительно:), для кого то мои подводные камни покажутся детскими задачками, расщелкивающиеся как орешки( таких как Троелсен :)) ), так что...:)
16 июл 07, 21:00    [4395382]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить