powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Excel or XML
25 сообщений из 28, страница 1 из 2
Excel or XML
    #38770006
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

В общем есть код такого вида.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            Array values = server.GetAllValues();
            myExcelWorksheet.Cells[row, 1] = DateTime.Now.ToLongTimeString();
            for (int i = 2; i <= values.Length+1; i++)
            {
                myExcelWorksheet.Cells[row, i] = values.GetValue(i - 1).ToString();
            }

            row++;

            timer1.Start();
        }



Выводит в эксель первый фрагмент прикрепленного изображения.

Если фрагмент изменить на:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            //timer1.Stop();
            Array values = server.GetAllValues();
            myExcelWorksheet.Cells[row, 1] = DateTime.Now.ToLongTimeString();
            for (int i = 2; i <= values.Length+1; i++)
            {
                myExcelWorksheet.Cells[row, i] = values.GetValue(i - 1).ToString();
            }

            row++;

            //timer1.Start();



То выводит второй фрагмент, как видно время правильное.

Интервал таймера одна секунда.

Так вот вопрос имеет ли практическое значение добавления Stop и Start?

Если добавлять их в XML файл, а не напрямую в Excel, насколько увеличится скорость?
...
Рейтинг: 0 / 0
Excel or XML
    #38770013
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить.

Язык - C#,

using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

Для работы с excel.
...
Рейтинг: 0 / 0
Excel or XML
    #38770107
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnektoТак вот вопрос имеет ли практическое значение добавления Stop и Start?Не имеет, таймер и цикл работают в одном потоке и DoEvents в цикле нет. Пока цикл не закончится, таймер снова не тикнет.

AnektoЕсли добавлять их в XML файл, а не напрямую в Excel, насколько увеличится скорость?В разы. Но если и в текущем виде это происходит быстрее, чем тикает таймер, то смысла переделывать нет.
...
Рейтинг: 0 / 0
Excel or XML
    #38770116
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, одна секунда же, и кое-где на первом скриншоте период в две.
Тогда конечно смысл имеет.
...
Рейтинг: 0 / 0
Excel or XML
    #38770119
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyсмысл имеетизбавиться от экселя.
...
Рейтинг: 0 / 0
Excel or XML
    #38770124
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anekto, значительно увеличить скорость, можно переписав следующий код на одно обращение к Excel:
Код: c#
1.
2.
3.
4.
5.
6.
myExcelWorksheet.Cells[row, 1] = DateTime.Now.ToLongTimeString();

for (int i = 2; i <= values.Length+1; i++)
{
     myExcelWorksheet.Cells[row, i] = values.GetValue(i - 1).ToString();
}

Есть возможность за один раз задать Range и ей надо пользоваться.
Потому как чем больше обращений к объектам Excel (с данном случае к Cell), то тем ощутимее тормоза.
Проверено не одним разработчиком :)
...
Рейтинг: 0 / 0
Excel or XML
    #38770183
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Спасибо, переписал код на такой.

Код: c#
1.
2.
3.
4.
5.
6.
            timer1.Stop();
            Array values = server.GetAllValues();
            myExcelWorksheet.Cells[row, 1] = DateTime.Now.ToLongTimeString();
            myExcelWorksheet.Range[myExcelWorksheet.Cells[row,2], myExcelWorksheet.Cells[row, values.Length+1]] = values;
            row++;
            timer1.Start();



Так же пропускает, видимо придется на XML, потом конвертировать в excel.
...
Рейтинг: 0 / 0
Excel or XML
    #38770192
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnektoТак же пропускает...Может я чего упустил, но раньше слова "пропускает" не было в топике.

О чём речь? Быстрее-то стало?
...
Рейтинг: 0 / 0
Excel or XML
    #38770243
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

На приложенном изображении вместе с Start() Stop(). Секунды пишутся иногда с прерыванием на одну секунду, пропускает. Без этого все пишется нормально. То есть без старт и стоп идет 1 2 3 4 5 6, со старт и стоп идет 1 2 4 5 6 7 9. Я сделал вывод, что код заполнения в Excel выполняется больше секунды, раз иногда идет такое различие. После изменения кода с использованием Range вместо цикла по ячейкам, ситуация повторилась, но в меньшей степени.
...
Рейтинг: 0 / 0
Excel or XML
    #38770249
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выкинуть excel на помойку, сливать данные в xml / json.
...
Рейтинг: 0 / 0
Excel or XML
    #38770255
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, хорошо бы замерять время выполнения server.GetAllValues(), прежде чем выкидывать excel на помойку полностью переписывать код.
...
Рейтинг: 0 / 0
Excel or XML
    #38770258
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anekto, замерьте время выполнения различных кусков кода при помощи Stopwatch.
...
Рейтинг: 0 / 0
Excel or XML
    #38770264
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
codearticles.ru,

Да, уже понял, что придется в XML писать, просто в конечном итоге должна получиться понятная для юзера таблица в excel. Ну придется дописать конвертатор xml to xlsx, просто не думал, что все настолько тормознуто записывается.
...
Рейтинг: 0 / 0
Excel or XML
    #38770283
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anektocodearticles.ru,

Да, уже понял, что придется в XML писать, просто в конечном итоге должна получиться понятная для юзера таблица в excel. Ну придется дописать конвертатор xml to xlsx, просто не думал, что все настолько тормознуто записывается.Хм, я в своё время туеву хучу прайсов вывел в Excel средствами Microsoft.Office.Interop.Excel, не припомню, чтобы кто-то жаловался на тормоза.

Простое правило: как можно меньше обращений к объектам Excel.
...
Рейтинг: 0 / 0
Excel or XML
    #38770317
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь у меня интересная ситуация. Судя по стопвач, код внутри Stop() Start() выполняется в худшем случае четверть секунды. Но все равно интервал иногда составляет 2 секунды.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
            timer1.Stop();
            var stopWatch = Stopwatch.StartNew();
            myExcelWorksheet.Cells[row, 1] = DateTime.Now.ToLongTimeString();
            myExcelWorksheet.Range[myExcelWorksheet.Cells[row, 2], myExcelWorksheet.Cells[row, server.browser.Count+1]] = server.GetAllValues();
            stopWatch.Stop();
            row++;
            stopWatch.Stop();
            Debug.WriteLine(stopWatch.ElapsedMilliseconds.ToString());
            timer1.Start();
...
Рейтинг: 0 / 0
Excel or XML
    #38770323
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anekto,

Второй Stop() нечаянно прилепился, в коде его нету, не обращайте внимания.
...
Рейтинг: 0 / 0
Excel or XML
    #38770335
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anektoпридется дописать конвертатор xml to xlsxНе нужно этого делать. У экселя есть свой собственный чисто xml-формат.
...
Рейтинг: 0 / 0
Excel or XML
    #38770632
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAХм, хорошо бы замерять время выполнения server.GetAllValues(), прежде чем выкидывать excel на помойку полностью переписывать код.
Хорошо бы прикинуть, накой ляд тут вообще приплели excel.

Anektocodearticles.ru, Да, уже понял, что придется в XML писать, просто в конечном итоге должна получиться понятная для юзера таблица в excel. Ну придется дописать конвертатор xml to xlsx, просто не думал, что все настолько тормознуто записывается.
Твоя ошибка в том, что ты путаешь хранение данных и их отображение. Хранением данных занимают базы данных (в частности XML может быть по сути базой данных в первом приближении). Отображением данных занимаются такие клиентские системы, как excel.
...
Рейтинг: 0 / 0
Excel or XML
    #38770672
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
codearticles.ru,

Но ведь мне нужно именно корректное ОТОБРАЖЕНИЕ данных для пользователя в результате, поэтому и решил сразу писать в эксель, минуя XML.
...
Рейтинг: 0 / 0
Excel or XML
    #38770709
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anektocodearticles.ru, Но ведь мне нужно именно корректное ОТОБРАЖЕНИЕ данных для пользователя в результате, поэтому и решил сразу писать в эксель, минуя XML.
Я еще раз повторяю, хранение и отображение - это перпендикулярные вещи. Зачем нужны СУБД, если есть Excel для хранения и отображения, такова твоя логика? Как сделать отображение в Excel из XML - есть много способов, в том числе и средствами самого же Excel.
...
Рейтинг: 0 / 0
Excel or XML
    #38770762
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
codearticles.ruХорошо бы прикинуть, накой ляд тут вообще приплели excel.
И XML тоже
...
Рейтинг: 0 / 0
Excel or XML
    #38770884
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,

Ладно, в любом случае, меня больше не интересует тема, если только кто-то не ответит на пост о том, почему код выполняется 170 миллисекунд, а на деле записывается с разницей больше секунды.

Насчет зачем нужен Excel или XML, это условия обговоренные заказчиком с предыдущим исполнителем, я придерживаюсь их.
...
Рейтинг: 0 / 0
Excel or XML
    #38770956
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnektoЛадно, в любом случае, меня больше не интересует тема, если только кто-то не ответит на пост о том, почему код выполняется 170 миллисекунд, а на деле записывается с разницей больше секунды.Запусти stopwatch вне цикла. И показывай ElapsedMilliseconds в цикле. Возможно, это даст объяснение.
...
Рейтинг: 0 / 0
Excel or XML
    #38770970
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AnektoНасчет зачем нужен Excel или XML, это условия обговоренные заказчиком с предыдущим исполнителем, я придерживаюсь их.
Я сомневаюсь, что заказчик требовал XML. Вот выгрузку в Excel он вполне мог потребовать, но это не повод писать в эксель напрямую. Например, можно взять бесплатные ReportBuildr и ReportViewer который может и в эксель, и в ворд, и в пдф экспортировать.
...
Рейтинг: 0 / 0
Excel or XML
    #38770973
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anekto,

если интервал времени задан 1 секунда, то таймер будет тикать ровно через одну секунду (без Start/Stop). Если использовать Start/Stop, то таймер будет тикать через интервал 1 секунда + время выполнения метода. Естественно, периодически будет выпадать одна секунда.

PS: пиши в формат CSV - дёшево и сердито. Excel откроет его и покажет в виде таблицы.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Excel or XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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