powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Топик ненависти к Open XML SDK
25 сообщений из 112, страница 3 из 5
Топик ненависти к Open XML SDK
    #38922257
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КБольшие объёмы вроде не планируются
Что мешает сразу написать по-человечески? )

Капитан очевидность шепчет: лееень
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922262
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУhVosttДа я в курсе, но если документы не большие, то можна и byte[]
Можно, я не против. Но если много клиентов и все они в небольшой промежуток времени начнут подсирать память апп сервера, тоже ничего хорошего. В общем, по ситуации.

Я всегда с потоками при генерации/обработке файлов работаю через временные файлы. Память слишком ценный ресурс, чтобы его разбазаривать на хранение потоков.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922266
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЭто что ж получается, если надо отдать клиенту HD фильм, то нужно готовить временный файл в пяток гигабайт? :)
http://codearticles.ru/articles/2445

Ты утрируешь. Если требуется конвертация, или, допустим, к видео надо налепить водяной знак качества, то без временного файла не обойтись. А просто отдать конечно надо напрямую потоком.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922309
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ всегда с потоками при генерации/обработке файлов работаю через временные файлы.
Научи этому теперь Алексея :)
hVosttПамять слишком ценный ресурс, чтобы его разбазаривать на хранение потоков.
Так потоки бывают не только MemoryStream. Хвост, учи матчасть уже, елки-палки

hVosttТы утрируешь. Если требуется конвертация, или, допустим, к видео надо налепить водяной знак качества, то без временного файла не обойтись.
С ходу так сказать не могу, но в целом да.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922329
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНаучи этому теперь Алексея :)

Да он всё умеет, только ленится и нос воротит

МСУТак потоки бывают не только MemoryStream. Хвост, учи матчасть уже, елки-палки

Да не, ты всё врёшь. Потоки бывают только MemoryStream
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922335
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, Алексею советовал бы почитать про великолепный класс PushStreamContent. Вот тут про асинхронный стримминг. То есть в идеале можно сделать вообще без файлов. На лету из потока в поток стриммимся. К примеру, есть у нас файл в БД (блоб, файл тейбл). Читаем его в Stream и сразу же стриммим клиенту. Ни память, ни левые темповые файлы не насилуют систему. Вот это высший пилотаж, братцы.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922370
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУпропущено...

Что мешает сразу написать по-человечески? )

Капитан очевидность шепчет: лееень Потому что нельзя делать сразу всё. :-)

Наверное переделаю потом на временный файл.

Так пойдёт для Asp.Net?
Код: c#
1.
Path.GetTempFileName + FileOptions.DeleteOnClose
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922375
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУКстати, Алексею советовал бы почитать про великолепный класс PushStreamContent. Вот тут про асинхронный стримминг.Непонятно зачем это мне, но всё равно спасибо! :-)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922389
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТак пойдёт для Asp.Net?
Код: c#
1.
Path.GetTempFileName + FileOptions.DeleteOnClose


Подойдёт, конечно. Но всё-равно уныленько. Городить файлы там, где можно обойтись тупо потоком... ну я не знаю.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922391
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУГородить файлы там, где можно обойтись тупо потоком... ну я не знаю.Я не пойму как тут обойтись без файла, если задача избавиться от MemoryStream.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922401
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТак пойдёт для Asp.Net?
Код: c#
1.
Path.GetTempFileName + FileOptions.DeleteOnClose



Да. Но лучше сделать менеджер временных файлов, на подобии кеша. Файлы выдаются под unisg (с удалением после использования) или под запрос, или на время с обязательной чисткой.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922406
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУГородить файлы там, где можно обойтись тупо потоком... ну я не знаю.

Так это правильно. Файлы тоже работают быстро, особенно если потоки буфферизованные, так и гибче гораздо.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922418
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КТак пойдёт для Asp.Net?
Код: c#
1.
Path.GetTempFileName + FileOptions.DeleteOnClose



Да. Но лучше сделать менеджер временных файлов, на подобии кеша. Файлы выдаются под unisg (с удалением после использования) или под запрос, или на время с обязательной чисткой.Согласен, выдачу временных файлов лучше обернуть в отдельный сервис, отдавать сразу открытый FileStream c включенным DeleteOnClose.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922421
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУПроси прощения у опен иксэмэля, холоп! :)Как тебе хеловорд?
Код: 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.
    public class OpenXmlExcelTableExporter : IExcelTableExporter
    {
        public byte[] Execute(ExcelTableExporterModel model, IEnumerable data)
        {
            using (var result = new MemoryStream())
            {
                result.Write(Resources.EmptyTemplate, 0, Resources.EmptyTemplate.Length);
                result.Seek(0, SeekOrigin.Begin);

                using (var document = SpreadsheetDocument.Open(result, true))
                {
                    var sheet = document.WorkbookPart.WorksheetParts.First().Worksheet;
                    var sheetData = sheet.GetFirstChild<SheetData>();

                    var row = new Row();
                    sheetData.Append(row);

                    var cell = new Cell();
                    row.Append(cell);
                    cell.CellValue = new CellValue("Hello world!");
                    cell.DataType = CellValues.String;
                }

                return result.ToArray();
            }
        }
    }

А в интерфейсе это как выглядит? Ссылка на скачивание?
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922425
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если скачивается какой-нибудь месячный отчёт, то при первом запросе сформировать и положить на диск.
Остальные будут получать уже готовый файл.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922430
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУГородить файлы там, где можно обойтись тупо потоком... ну я не знаю.Я не пойму как тут обойтись без файла, если задача избавиться от MemoryStream.
Объясни, зачем тебе файл? Чтобы клиент получил файл, вовсе не обязательно на сервере создавать файл. Прикинь :)

hVosttМСУГородить файлы там, где можно обойтись тупо потоком... ну я не знаю.
Так это правильно. Файлы тоже работают быстро, особенно если потоки буфферизованные, так и гибче гораздо.
Так-то. Просто есть у тебя есть Stream, глупо создавать файл и отдавать его клиенту. Не проще ли сразу отдать Stream? :)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922433
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Котдавать сразу открытый FileStream c включенным DeleteOnClose.
Эпический гавнокод
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922438
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТак-то оно так. Просто если у тебя есть Stream, глупо создавать файл и отдавать его клиенту. Не проще ли сразу отдать Stream? :)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922441
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА в интерфейсе это как выглядит? Ссылка на скачивание?Да, ссылка на скачивание файла.
skyANAЕсли скачивается какой-нибудь месячный отчёт, то при первом запросе сформировать и положить на диск.
Остальные будут получать уже готовый файл.Пока файлы планируем генерировать на момент запроса.

Тяжёлые месячные отчёты мы обычно формируем джобом и храним в "виде данных" в БД. Хранить отчёты в excel-виде пока не было необходимости.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922453
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТяжёлые месячные отчёты мы обычно формируем джобом и храним в "виде данных" в БД. Хранить отчёты в excel-виде пока не было необходимости.
Хоспади, когда же вы в свой ларёк наймете биайщика, который запилит вам честный куб, процессинг и ETL :)
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922454
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Я не пойму как тут обойтись без файла, если задача избавиться от MemoryStream.
Объясни, зачем тебе файл? Чтобы клиент получил файл, вовсе не обязательно на сервере создавать файл. Прикинь :)

hVosttпропущено...

Так это правильно. Файлы тоже работают быстро, особенно если потоки буфферизованные, так и гибче гораздо.
Так-то. Просто есть у тебя есть Stream, глупо создавать файл и отдавать его клиенту. Не проще ли сразу отдать Stream? :)Ну ты же сам сказал "чтобы не засирать память веб-сервера" (ц), с чем я согласен.

Иначе какой смысл отказываться от byte[]?

зы: Код базового контроллера пока такой:
Код: 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 abstract class ExcelTableApiController<TData, TFilter> : ApiController
        where TData : IEnumerable
    {
        public IExcelTableRepository<TData, TFilter> Repository { get; set; }

        public IExcelTableExporter Exporter { get; set; }

        public virtual IHttpActionResult GetExcelIndexByFilter(string filter)
        {
            var parsedFilter = JsonConvert.DeserializeObject<TFilter>(filter);
            var data = Repository.GetExcelTableByFilter(parsedFilter);
            var model = GetModel();
            var content = Exporter.Execute(model, data);
            var fileName = Path.ChangeExtension(model.Name, ".xlsx");

            return new DownloadActionResult
            {
                Content = new MemoryStream(content),
                FileName = fileName
            };
        }

        protected abstract ExcelTableExporterModel GetModel();
    }
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922455
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAА в интерфейсе это как выглядит? Ссылка на скачивание?Да, ссылка на скачивание файла.
skyANAЕсли скачивается какой-нибудь месячный отчёт, то при первом запросе сформировать и положить на диск.
Остальные будут получать уже готовый файл.Пока файлы планируем генерировать на момент запроса. Тогда достаточно в Response передать поток, временный файл не обязательно создавать.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922458
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Да, ссылка на скачивание файла.
пропущено...
Пока файлы планируем генерировать на момент запроса. Тогда достаточно в Response передать поток, временный файл не обязательно создавать.Да я знаю, просто речь зашла о больших документах, не влезающих в память сервера.
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922459
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу ты же сам сказал "чтобы не засирать память веб-сервера" (ц), с чем я согласен.
Ну так всё правильно. Теперь ты память не засираешь, уже хорошо. Но файл тут зачем?
...
Рейтинг: 0 / 0
Топик ненависти к Open XML SDK
    #38922461
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Тогда достаточно в Response передать поток, временный файл не обязательно создавать.Да я знаю, просто речь зашла о больших документах, не влезающих в память сервера.
Причем тут память сервера? Память мы уже проехали, ты вкурил, что в память какать не хорошо. Теперь идет спич о файл vs поток
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 3 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Топик ненависти к Open XML SDK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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