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

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

Код: 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
08.10.2014, 10:34
    #38770013
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
Забыл добавить.

Язык - C#,

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

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

AnektoЕсли добавлять их в XML файл, а не напрямую в Excel, насколько увеличится скорость?В разы. Но если и в текущем виде это происходит быстрее, чем тикает таймер, то смысла переделывать нет.
...
Рейтинг: 0 / 0
08.10.2014, 11:34
    #38770116
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
А, одна секунда же, и кое-где на первом скриншоте период в две.
Тогда конечно смысл имеет.
...
Рейтинг: 0 / 0
08.10.2014, 11:34
    #38770119
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
Antonariyсмысл имеетизбавиться от экселя.
...
Рейтинг: 0 / 0
08.10.2014, 11:36
    #38770124
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
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
08.10.2014, 12:08
    #38770183
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
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
08.10.2014, 12:11
    #38770192
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
AnektoТак же пропускает...Может я чего упустил, но раньше слова "пропускает" не было в топике.

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

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

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

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

Простое правило: как можно меньше обращений к объектам Excel.
...
Рейтинг: 0 / 0
08.10.2014, 13:02
    #38770317
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
Теперь у меня интересная ситуация. Судя по стопвач, код внутри 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
08.10.2014, 13:03
    #38770323
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel or XML
Anekto,

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

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

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

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

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

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

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


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