|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
Подскажите, как реализовать метод сервиса, который будет отдавать большой объем данных? Порядка 100МБ. Только через Stream? Сам метод возвращает простой IEnumerable<Object>, просто очень много строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2015, 14:55 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
>Pavluha, сегодня, 14:55 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1182356&msg=18343956][18343956] >Только через Stream? Можно попытаться сериализовать объект данных в бинарный файл и упаковать его. Пользователю вернуть имя файла. Затем в цикле порциями перенести на комп и сделать обратные операции. С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2015, 18:39 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
PavluhaПодскажите, как реализовать метод сервиса, который будет отдавать большой объем данных? Порядка 100МБ. Только через Stream? Сам метод возвращает простой IEnumerable<Object>, просто очень много строк. передавать частями и принимать частями, например, сделать два разных метода для нормальных данных и больших и т.д.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2015, 12:33 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
Pavluha, А что именно беспокоит? Что разовый объем слишком большой (проблемы с буфером, с трансляцией в сети) или что в принципе много объектов? В целом, если это позволяет задача, я бы пошел по пути пейджинга (т.е. постраничной передачи данных). Вариантов реализации много, зависят от задачи и того, как данные формируюутся внутри. Навскидку: - при запросе вы передаете параметры фильтрации и параметры пейджинга (сколько объектов на странице и её номер). Для получения каждой последующей порции просто увеличиваете номер страницы (остальные данные не меняются!). Основная сложность метода - нужно соблюдать параметры выборки и фильтрации объектов (иначе один и тот же объект можно получить дважды). Вторая беда - что делать, если за время пока вы получаете выборку, в неё добавились новые элементы (если задача просто показать на UI, это не так страшно, но если вы обрабатываете данные, то надо вручную удалять дубликаты). - выборка получается 2-я методами. Первый получает параметры запроса и возвращает id результата. Второй - передает id и последовательно вытягивает всю выборку (при каждом обращении получает следуюущую порцию). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2015, 15:50 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
МихаилРВторая беда - что делать, если за время пока вы получаете выборку, в неё добавились новые элементы (если задача просто показать на UI, это не так страшно, но если вы обрабатываете данные, то надо вручную удалять дубликаты). Ну, можно отслеживать, что версия файла не изменилась в процессе передачи. В СУБД на этом построены транзакции (см "XSN. Transaction sequence number") ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 11:13 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
Постранично не получится, отдавать надо все. Почитал тут про сжатие. Есть какой-нибудь способ ужать ответ например так, чтобы он стал не 200, а намного меньше? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 15:35 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
PavluhaПочитал тут про сжатие. Есть какой-нибудь способ ужать ответ например так, чтобы он стал не 200, а намного меньше? Вы хотите уменьшить именно объем пересылаемого сообщения? Да, можно попробовать поиграться со сжатием и методом кодирования. Правда нюансов довольно много (а я не эксперт - в проектах нам никогда не требовалось такое поведение, поэтому я вопрос пристально не изучал). А нюансы проистекают из того: - какой у вас хостинг. В случае IIS, можно использовать его модуль сжатия (вот, например, вопрос на SO о настройке сжатия средствами IIS - какая версия WCF (.Net). В частности в 4.5 была добавлена возможность использовать сжатие потока и Binary сериализация опять же, сошлюсь на Stack Overflow . - для ранних версий WCF и варианта self-hosting есть довольно много расширений транспортного уровня с поддержкой GZip, например, можно посмотреть пример самого MS Custom Message Encoder: Compression Encoder ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 16:40 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
Pavluha, Попробуйте еще вот это Кодирование MTOM "Кодировщик MTOM может оптимизировать массивы байтов и потоки.В данном образце операция использует параметр Stream и, следовательно, может быть оптимизирована." И вы сказали что передаете строки ? Может их конвертнуть в массив байтов - а потом через MTOM передавать ? Вполне можно получить выгоду этак раз в 5-10 (по сравнению с оригинальными строками). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 17:14 |
|
Большой объем данных в ответе
|
|||
---|---|---|---|
#18+
Convert.FromBase64String Convert.ToBase64String ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 17:17 |
|
|
start [/forum/topic.php?fid=19&msg=39102109&tid=1396830]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 475ms |
0 / 0 |