Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Снова "оптимизирую" / 18 сообщений из 18, страница 1 из 1
21.01.2013, 11:44
    #38117637
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Есть разница в производительности:

1) int myInt = a.b.c.d.e.f.g.......zzz999.BigIntMassive[99999];

2) int myInt = a.BigIntMassive[99999];

?
...
Рейтинг: 0 / 0
21.01.2013, 11:44
    #38117639
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Да, и эта строка в цикле - считываю с массива данные по одной штучке.
...
Рейтинг: 0 / 0
21.01.2013, 11:45
    #38117641
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Вообще, хотел написать так (тоже в цикле)

1) int myInt = a.b.BigIntMassive[99999];

2) int myInt = a.BigIntMassive[99999];

но потом подумал, что первый вариант будет нагляднее. Ну, а в этом варианте есть разница в производительности?
...
Рейтинг: 0 / 0
21.01.2013, 11:46
    #38117644
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Или компилятор на этапе компиляции эту абракадабру разбирает и сразу берёт значение по адресу, который в массиве указан (с учётом сдвига)?
...
Рейтинг: 0 / 0
21.01.2013, 12:33
    #38117803
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
user73201) int myInt = a.b.BigIntMassive[99999];
2) int myInt = a.BigIntMassive[99999];
первый вариант потенциально будет медленнее работать. Адрес вложенного поля нельзя рассчитать на этапе компиляции. JIT-компилятор может выполнить оптимизацию сохранив a.b.BigIntMassive в отдельную переменную. Такой гарантии никто дать не может, так что лучше дать подсказку самостоятельно.

Не понял почему ты считаешь первый вариант нагляднее.
...
Рейтинг: 0 / 0
21.01.2013, 12:43
    #38117826
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
bazileuser73201) int myInt = a.b.BigIntMassive[99999];
2) int myInt = a.BigIntMassive[99999];
первый вариант потенциально будет медленнее работать. Адрес вложенного поля нельзя рассчитать на этапе компиляции. JIT-компилятор может выполнить оптимизацию сохранив a.b.BigIntMassive в отдельную переменную. Такой гарантии никто дать не может, так что лучше дать подсказку самостоятельно.

Не понял почему ты считаешь первый вариант нагляднее.
Потому что я думал, что компилятор (да хоть JIT), сделать так, чтобы можно было сразу адрес массива получать, а не последовательным "разыменованием указателей".
...
Рейтинг: 0 / 0
21.01.2013, 12:44
    #38117829
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
bazileJIT-компилятор может выполнить оптимизацию сохранив a.b.BigIntMassive в отдельную переменную. Такой гарантии никто дать не может, так что лучше дать подсказку самостоятельно.
А как дать подсказку?
...
Рейтинг: 0 / 0
21.01.2013, 12:53
    #38117849
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
user7320,

запиши ссылку "zzz999" в переменную и к ней обращайся. В VB.NET для этого есть With ... End With оператор, чтобы сократить длину ссылки
...
Рейтинг: 0 / 0
21.01.2013, 12:56
    #38117858
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Вместо
Код: c#
1.
int myInt = a.b.c.d.e.f.g.......zzz999.BigIntMassive[99999];


написать
Код: c#
1.
2.
int[] bigIntMassive = a.b.c.d.e.f.g.......zzz999.BigIntMassive;
int myInt = bigIntMassive99999];
...
Рейтинг: 0 / 0
21.01.2013, 12:56
    #38117859
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
И если конкретно, то не могли бы вы посоветовать, что делать в таком случае:

У меня есть объект "Настройки", у которого поля - кучка этих самых настроек. Все поля имеют тип "Параметр", у которого есть поля: "Имя", "Значение", "Пояснение". Когда я делаю расчёт, я использую только поле "Значение" каждого параметра. И вот, один из параметров - большой (до миллиона элементов) массив данных. В расчёте я по нескольку раз запускаю цикл, который проходит по этому массиву, но при этом обращение к массиву идёт как Настройки.ПараметрМассив.Значение[индекс].

Что лучше сделать: придумать новый тип - например, "НастройкиБезПояснений" - где все параметры будут сразу иметь только значение, или достаточно для одного массива завести отдельную переменную в функции расчёта, ссылающуюся на этот массив?
...
Рейтинг: 0 / 0
21.01.2013, 12:57
    #38117860
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
bazile
Код: c#
1.
int[] bigIntMassive = a.b.c.d.e.f.g.......zzz999.BigIntMassive;


За пределами цикла причем.
...
Рейтинг: 0 / 0
21.01.2013, 12:57
    #38117861
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
А, понятно. То, что выше - это как вы и предложили.
...
Рейтинг: 0 / 0
22.01.2013, 11:40
    #38119273
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Ну ладно, с путями во вложенных объектах понятно. А как быть с путями во вложенных пространствах имён? На их разборку тоже время тратится и лучше не вкладывать пространства имён без особой надобности? Ну, т. е. тот же самый пример, что выше, только вложенность в пространства имён, а не в типы.
...
Рейтинг: 0 / 0
22.01.2013, 11:42
    #38119276
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
Я имею ввиду, что тратится время во время выполнения программы, а не во время компиляции (только не JIT - если JIT, то это то же, что во время выполнения, как я понимаю). Если во время компиляции только (но не JIT), то пусть тратится. Главное, что мне удобно сделать кучу вложений для поддержки и упорядочивания кода.
...
Рейтинг: 0 / 0
22.01.2013, 12:04
    #38119326
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
У меня такое чувство, что вы маетесь дурью.

Во первых, вложенность неймспейсов влияния на скорость работы программ, как и их компиляцию, не оказывает
Во-вторых, даже работа с кучей вложенных друг в друга объектов будет очень быстрой

Если у вас "оптимизаторский" зуд (хотя общеизвестно, что преждевеременная оптимизация редко когда бывает полезна), смотрите и оптимизируйте алгоритмы, параллельте задачи, уменьшайте количество обращений к внешним ресурсам и дискам. Это многократно больше даст выйгрыша во всех аспектах.

Например, задача поиска простых чисел. В лоб решается очень тяжелым алгоритмом. Зато придумали несколько других, гораздо быстрее ( http://ru.wikipedia.org/wiki/%D0%E5%F8%E5%F2%EE_%DD%F0%E0%F2%EE%F1%F4%E5%ED%E0)
...
Рейтинг: 0 / 0
22.01.2013, 12:24
    #38119373
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
авторВо-вторых, даже работа с кучей вложенных друг в друга объектов будет очень быстрой
Я выше написал, что работа будет в цикле. Коллекция находится на третьем-четвёртом уровне вложенности. В цикле миллион итераций, на каждой из которых по нескольку раз может быть обращение к элементу коллекции. Алгоритм работает три секунды на моей машине. Если добавится хотя бы полсекудны времени только из-за вложенностей объектов, это будет, конечно, некритично, но всё равно как-то неприемлемо.

Это пока алгоритм работает с данными, полученными после эксперимента. Далее, планируется перевести алгоритм на работу с данными, получаемыми прямо во время эксперимента. Там надо будет наверняка ещё уменьшить время работы с трёх секунд. И в этом случае увеличение времени работы алгоритма даже на полсекунды уже точно неприемлемо, т. к. можно не успеть до пуступления следующей порции данных. Кеширование тоже не поможет, потому что задача не закешировать данные, а вовремя отобразить результаты расчёта, т. к. по ним будет приниматься решение, продолжать эксперимент или прекратить его.


Спасибо, что сказали, что вложенность пространств имён не влияет на производительность. Я так понимаю, что разобраться с этой вложенностью компилятор может во время компиляции, в отличии от вложенности объектов?
...
Рейтинг: 0 / 0
22.01.2013, 12:32
    #38119392
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
user7320авторВо-вторых, даже работа с кучей вложенных друг в друга объектов будет очень быстрой
Я выше написал, что работа будет в цикле. Коллекция находится на третьем-четвёртом уровне вложенности. В цикле миллион итераций, на каждой из которых по нескольку раз может быть обращение к элементу коллекции. Алгоритм работает три секунды на моей машине. Если добавится хотя бы полсекудны времени только из-за вложенностей объектов, это будет, конечно, некритично, но всё равно как-то неприемлемо.

Это пока алгоритм работает с данными, полученными после эксперимента. Далее, планируется перевести алгоритм на работу с данными, получаемыми прямо во время эксперимента. Там надо будет наверняка ещё уменьшить время работы с трёх секунд. И в этом случае увеличение времени работы алгоритма даже на полсекунды уже точно неприемлемо, т. к. можно не успеть до пуступления следующей порции данных. Кеширование тоже не поможет, потому что задача не закешировать данные, а вовремя отобразить результаты расчёта, т. к. по ним будет приниматься решение, продолжать эксперимент или прекратить его.


Спасибо, что сказали, что вложенность пространств имён не влияет на производительность. Я так понимаю, что разобраться с этой вложенностью компилятор может во время компиляции, в отличии от вложенности объектов?

читать полностью
...
Рейтинг: 0 / 0
22.01.2013, 12:33
    #38119394
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова "оптимизирую"
user7320Алгоритм работает три секунды на моей машине

Что за алгоритм? Каждая итерация цикла использует данные предыдущей?

ЗЫ Когда я говорил, что работа с вложенными объектами будет быстрой, я не имел ввиду, что не нужно её оптимизировать. Правильный совет дали в 13802328
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Снова "оптимизирую" / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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