:: Visual Foxpro, Foxpro for DOS
Re: Добавление записи из grid в текстовое поле
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
И почему же? Шутка.
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Чет вы меня совсем запутали.
При первом цикле m.sec не инициализирована. Ошибка должна вываливать.
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Local x,sec,i,s,ii
CREATE CURSOR c1 (f1 i)
CREATE CURSOR c2 (c c)
Select c2
x = 'c1'
ii = 10^7
m.sec = SECONDS()
FOR m.i=1 TO ii
= &x..f1
ENDFOR
? SECONDS() - m.sec
m.sec = SECONDS()
FOR m.i=1 TO ii
= EVALUATE(x+'.f1')
ENDFOR
? SECONDS() - m.sec
m.sec = SECONDS()
FOR m.i=1 TO ii
s = Select()
Select (m.x)
= f1
Select (m.s)
ENDFOR
? SECONDS() - m.sec
m.sec = SECONDS()
s = Select()
Select (m.x)
FOR m.i=1 TO ii
= f1
ENDFOR
Select (m.s)
? SECONDS() - m.sec

Абсолютные результаты. Проценты выкинул.
26.9
16.9
13.5
2.5
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Код в фоксе - это просто машина, термодинамическая машина, в условиях выделения ей тиков ОС, в условиях интерпретации строк команд, и наличия уже интерпретированных, и все такое (там разрабы "ускоряли"). Вобще удивительно, как вы доверяете экспериментам над фоксом, НАД ЕДИНСТВЕННЫМ экспериметном
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
akvvohinc

Сообщений: 4215
Откуда: Москва
Дата регистрации: 11.11.2008
Уменьшить долю команд оформления цикла в общем времени можно путем увеличения количества строк внутри него - например, вместо одной строки с макро и EVAL() вставить 1000 таких строк.
Результирующий процент должен подрасти.

Добавляя еще, в пределе мы, видимо, и получим процент, близкий к реальному для данной ситуации.



Исправлено 4 раз(а). Последнее : akvvohinc, 22.12.17 01:09
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
akvvohinc

Сообщений: 4215
Откуда: Москва
Дата регистрации: 11.11.2008
of63
Вобще удивительно, как вы доверяете экспериментам над фоксом, НАД ЕДИНСТВЕННЫМ экспериментом

Здесь он выглядит, может, и единственным, но в целом - многолетняя практика и многочисленные эксперименты, в том числе - на реальных данных. И в целом результаты не выглядят противоречивыми.
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
akvvohinc

Сообщений: 4215
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
s = Select()
Select (m.x)
= f1
Select (m.s)

Такие конструкции, хоть и имеют право на жизнь, но "покрывают" слишком незначительное количество возможных случаев применения макро и EVAL().

Например, если в выражении понадобится по одному полю из нескольких таблиц, так просто уже не получится.
А даже простое сохранение промежуточных результатов в переменные съест всё добытое преимущество во времени.

В моей практике гораздо чаще в конструкции макро/EVAL() переменной частью являлось имя поля, а не таблицы. А поэтому избавиться и от макро, и от EVAL() подобным образом было нельзя.



Исправлено 2 раз(а). Последнее : akvvohinc, 22.12.17 01:35
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
Такие конструкции, хоть и имеют право на жизнь, но "покрывают" слишком незначительное количество возможных случаев применения макро и EVAL().

Например, если в выражении понадобится по одному полю из нескольких таблиц, так просто уже не получится.
А даже простое сохранение промежуточных результатов в переменные съест всё добытое преимущество во времени.

В моей практике гораздо чаще в конструкции макро/EVAL() переменной частью являлось имя поля, а не таблицы. А поэтому избавиться и от макро, и от EVAL() подобным образом было нельзя.

Ну это понятно, что каждый волен сам.
Я просто никогда не работаю напрямую с таблицами.
Исключительно через курсоры. Соответственно ничто не мешает из нескольких таблиц получить данные в один курсор. Вероятно и имена полей привести к некоторому упорядоченному набору. Ежели они по той или иной причине не в порядке и могут быть "переменной частью".
Ежели светит шестикратное увеличение производительности, то есть смысл поиграться с вариантами.
Мне так кажется. ;)
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
akvvohinc

Сообщений: 4215
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
Соответственно ничто не мешает из нескольких таблиц получить данные в один курсор.
Может быть.

Но я пока не научился из нескольких несвязанных таблиц получать один курсор.

Taran
Вероятно и имена полей привести к некоторому упорядоченному набору. Ежели они по той или иной причине не в порядке и могут быть "переменной частью".
Не будем выдумывать что-то новое.
Предположим, что имя поля так же, как в нашем примере имя таблицы, уже известно к началу цикла и находится в той же переменной X.
Задача та же - избавиться от макро и EVAL() внутри цикла, полагая, что именованным выражением обойтись нельзя. Например, надо добавить к значению этого поля 1, если оно больше 10.
Что будем делать с именам полей этой таблицы, к какому упорядоченному набору приводить?

Taran
Ежели светит шестикратное увеличение производительности, то есть смысл поиграться с вариантами.
Нет, шестикратное может светить только в таком искусственном примере.
А на деле даже вариант №3 вряд ли найдет применение.



Исправлено 1 раз(а). Последнее : akvvohinc, 22.12.17 04:41
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
Нет, шестикратное может светить только в таком искусственном примере.
А на деле даже вариант №3 вряд ли найдет применение.

Ежели внутренности цикла более одного раза используют макро, то и выигрыш будет больше.
У нас в целом видимо чуток разный подход.
Накидай пример (ежели есть интерес) с похожими данными и с макро или eval().
А там уж можно и поиграться.
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Мерить скорость в винде, где постоянно крутятся 100500 случайных процессов, к тому же периодически и тоже случайно сует во все свой нос антивирус, да и еще туча всякой кучи...
Такое еще имело какой-то смысл в досе. Тем более само выполнение фоксовской команды SECONDS() даже на голом месте может давать разные результаты при всего лишь повторном запуске одного и того же. Помнится с Пивой еще когда-то обсуждали уже этот вопрос в какой-то теме.
К тому же на фоне нынешнего монстро-программирования все эти миллисекунды вообще уже попросту смешны.
Сегодня бедное железо не успевает выйти с завода, как на него тут же понаписывают гигатонны такого страшного софта, который крутится на нем с не меньшим скрипом, чем старый на предыдущем компе.
Оптимизацией кода по-моему никто, кроме фокс-программистов уже и не занимается. Да и они не всегда. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Стабильность в фоксе все-таки есть. Например, вот статистика некая, ежемесячная,на нашем количестве выполнялась за 5 часов (+-0.5 часа). Народ привык: утром заказывают - вечером результат, или вечером заказываю - утром результат (как стулья вобщем). И вот что-то надо было доработать в статистике, доработал, попутно пришлось в фреймерке что-то усложнить, также по другим причинам фреймверк поменялся, и вдруг оказалось, что эта же статистика стала выполняться за 1 сутки (+- 1 час). Народ спрашивает "че поменялось-то", отвечаю "все поменялось". "Верни обратно в 5 часов" говорят, но фарш (фреймверк) невозможно провернуть назад... Иногда при помощи Coverage (и потом свертке ее результатов по строкам программы) можно было узнать, какая строка (подпрограмма) тратит основное время, и это оказывается обычная строка (самый внутренний FOR какой-нибудь, или подпрограмма безобидная), никак не связанная с макросом, просто строка бизнес-процесса, необходимая в таком количестве вызовов... Чтобы что-то "ускорить", то надо переписать этот кусок кода на машинном языке (на сях например), но че-то... проще сказать что "ну, 1 сутки, привыкайте к новым реалиям", точнее пока 1 сутки - допустимое время ожидания, то какой смысл переписывать прогу на другом языке (что малореально, даже на си там не перепишешь, все взаимозавязано в проекте, это не FOR суммирования числового ряда, а вызовы всякой бизнес-лабудени...)
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
of63
Ядро достигло физического максимума скорости - 2 ГГц...
Около 4-х на гражданских интеловских процах. С оверклокингом - 7.
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
of63
Это я понял! Приведи пример, когда макрос (&) выполняется на ПОРЯДОК дольше чем EVAL, тогда поверю, что EVAL - это что-то принципиально другое в фоксе, чем & (в рантайме в т.ч.)

Специально для of63. Пример, где замена макро на EVALUATE увеличивает скорость кода примерно в 30 раз. На самом деле разница в скорости может быть практически любой, причем как в одну сторону, так и в другую.

SET DECIMALS TO 10
x = '0'
m.sec = SECONDS()
FOR i = 1 TO 10^5
= &x + ((((((((((((((((((((((((((((((((((((((((((((((((((0))))))))))))))))))))))))))))))))))))))))))))))))))
NEXT
m.s1 = SECONDS() - m.sec
m.sec = SECONDS()
FOR i = 1 TO 10^5
= EVALUATE(x) + ((((((((((((((((((((((((((((((((((((((((((((((((((0))))))))))))))))))))))))))))))))))))))))))))))))))
NEXT
m.s2 = SECONDS() - m.sec
?m.s1
?m.s2
?m.s1/m.s2



Исправлено 1 раз(а). Последнее : leonid, 22.12.17 11:08
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
мда, действительно... странно...
А вот такой "нормальный" пример показывает разницу всего в 2 раза... причем тут скобки...:
* SET DECIMALS TO 10
x = '0'
m.sec = SECONDS()
FOR i = 1 TO 10^6
* v = &x + (((((((((((((((((((((((((((((((((((0)))))))))))))))))))))))))))))))))))
v = &x + 0
NEXT
m.s1 = SECONDS() - m.sec
m.sec = SECONDS()
FOR i = 1 TO 10^6
* v = EVALUATE(x) + (((((((((((((((((((((((((((((((((((0)))))))))))))))))))))))))))))))))))
v = EVALUATE(x) + 0
NEXT
m.s2 = SECONDS() - m.sec
?m.s1
?m.s2
?m.s1/m.s2
Доб. наверное, если фокс в строке видит & то компилирует всю командную строку (и чем она сложнее, тем будет дольше компиляться), а если в строке нет & то эта строка уже компиленая (не надо запускать компилятор). А EVALUATE компиляет только X. Да?



Исправлено 2 раз(а). Последнее : of63, 22.12.17 11:50
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
обращении к полю курсора в текущей строке, что макрос и что EVAL дадут разницу времени выполнения в проценты, а не в разы
И чего вы конкретно то в скорость упёрлись? Проблема макро далеко не только в "скорости работы". Это априори НЕЧИТАЕМЫЙ код.
Да, EVAL иногда тоже бывает плохо читаемым, но не настолько насколько макро.
Что делает тривиальная строка
f = &some
Уж не говоря про "хиты" типа
&p1&p2&p3&p4
Да, есть ситуации когда макро это единственная возможность более-менее приемлемо написать код. Но таких случаев не очень много, и уж 100% на то что если макро МОЖНО заменить на что угодно (конечно же без катастрофических побочных эффектов) - EVAL, выражение имени, да даже CASE на 5-7 "веток" то так и НУЖНО сделать.
of63
Важно получить адекватный результат, и чтобы при переделке програмер быстро починил, изменил, поэтому краткость текста проги (и хороший коммент, зачем именно так сделано) важнее кошерности текса.
В том то и дело что код с макро УЖАСЕН в плане сопровождения. И "краткость" тут совершенно мнимая. Если для понимания смысла одной единственной строки кода нужно "отмотать" 20-30 других строк, и держать в памяти пяток переменных с "командами", то это катастрофа.
Crispy
Мерить скорость в винде, где постоянно крутятся 100500 случайных процессов, к тому же периодически и тоже случайно сует во все свой нос антивирус, да и еще туча всякой кучи
Можно безо всяких проблем. Наука статистика подсказывает как именно.
Многократное повторение измерений, отбрасывание заведомо "выбивающихся из ряда", усреднение результатов и всё будет просчитано более чем надёжно.
Тем более что помимо "просто скорости" в винде вполне можно снимать показания счётчиков производительности - сколько CPU скушал процесс, сколько памяти, сколько операций IO сделал... В досе ничего и близко подобного нет.
Crispy
миллисекунды вообще уже попросту смешны
Пока они остаются миллисекундами - да. Но когда они начинают выливаться в часы... Да даже банально в секунды, но в UI - когда пользователь "не понимает" пошёл процесс или нет, приняты его данные (пусть просто "в обработку", без ожидания конечного результата) или нет...
of63
наверное, если фокс в строке видит & то компилирует всю командную строку (и чем она сложнее, тем будет дольше компиляться)
Да, и это видно в объектом коде - посмотри на получаемые fxp.
of63
а если в строке нет & то эта строка уже компиленая (не надо запускать компилятор)
Да.
of63
А EVALUATE компиляет только X
Нет, он вообще ничего не "компилирует" - "вычисление выражений" совсем другой процесс, нежели компиляция или интерпретация кода. Потому то возможности EVAL гораздо "скромнее" нежели у макро. Зато они и гораздо более "специализированные", и потому быстрые и легче осознаваемые программистом при чтении кода.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
В досе ничего и близко подобного нет.

Уверен, что тов.Симпле с легкостью докажет, что
1. Это и не нужно
2. Это можно реализовать и в досе.





Исправлено 1 раз(а). Последнее : spinz, 22.12.17 14:22
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Т.е. ты его хочешь назвать знатоком механизмов работы различных ОС
А иначе чего стоят такого рода заявления?
P.S. Вообще-то про это начал писать Криспа - но он тоже, вероятно, не очень в курсе. Скажем про аппаратные прерывания в том же DOS-е он, видимо, совсем позабыл... И наивно полагает что как команды написаны, так они и исполняются - последовательно, без остановок, не прерываемые ничем и никогда


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 22.12.17 20:12
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Не, я считаю его фанатом доса))
Ratings: 0 negative/0 positive
Re: Добавление записи из grid в текстовое поле
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
spinz
Не, я считаю его фанатом доса))
Не самое страшное извращение в нашем неспокойном мире, надо признать...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 akvvohinc  (Гостей: 26)

© 2000-2024 Fox Club 
Яндекс.Метрика