|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Алексей КAntonariyпропущено... Откуда этот бред высосан?Объект может оказаться структурой.По волшебству что ли? Это в js сплошь и рядом, а в строго типизированном языке написание процедуры, принимающей что попало (причем по ссылке) и потом это разруливающей, является признаком говнокодинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 14:02 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
AntonariyАлексей Кпропущено... Объект может оказаться структурой.По волшебству что ли?Причём тут "волшебство"? Приведён пример, когда в C# "объект полностью копируется". AntonariyЭто в js сплошь и рядом, а в строго типизированном языке написание процедуры, принимающей что попало (причем по ссылке) и потом это разруливающей, является признаком говнокодинга.Из непонятого... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 14:56 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Алексей КПриведён пример, когда в C# "объект полностью копируется".Где? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 15:55 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
AntonariyАлексей КПриведён пример, когда в C# "объект полностью копируется".Где? Ты чё тупишь, чудило? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 16:04 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
AntonariyАлексей КПриведён пример, когда в C# "объект полностью копируется".Где?Что? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 16:18 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
[quot Antonariy]Алексей Кпропущено... Объект может оказаться структурой.По волшебству что ли? Структура - наследний объекта, поэтому если в функцию, принимающую тип object ты будешь передавать структуру, то будет полное копирование этого "объекта". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 16:29 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Алексей КAntonariyпропущено... Где?Что? Этот товарисч недавно осилил что такое IEnumerable, а ты ему про структуры вещаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 16:47 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Что? Этот товарисч недавно осилил что такое IEnumerable, а ты ему про структуры вещаешь.Ага, видел. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 16:53 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Алексей КСтруктура - наследний объекта, поэтому если в функцию, принимающую тип object ты будешь передавать структуру, то будет полное копирование этого "объекта".Ну так это частный случай для структур. В общем же случае объект не копируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:05 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Алексей К blest ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:06 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
МСУ, Гумно тема Автору читать тынц аки FastCall в низу страницы сам не проверял, но уверен что правда. зы Пил... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:07 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Где-то в степиГумно тема +1 Где-то в степизы Пил... Ну вот... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:20 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Где-то в степиМСУ, Гумно тема Автору читать тынц аки FastCall в низу страницы сам не проверял, но уверен что правда. зы Пил... Кстати классная статья. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:24 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
МСУ, Я вчера пробовал читать, кеш да кеш, какой кеш? и даже согласился с автором. что при передаче по ссылки весь объект из кучи грузим в стек и долго ночью ворочался в досаде - почему они так сделали..., а оно вон видишь как......... )) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:34 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Доброго времени суток. Автор статьи, о которой говорит автор, имеет ввиду следующее. На концептуальном уровне это все выглядеть как IL,GC,stack, но это все концептуально. Под капотом все таки крутится набор команд процессора (IL --JIT---> asm), которые оперируют регистрами, константами, и адрессацией в памяти. И таки эти команды ничего не знают про GC для них это просто ячейки памяти, кеш, регистры. И значение переменной в конкретно взятый момент запросто может сидеть в памяти или регистре или в кеше. Так вот в силу, вероятно известных автору статьи фактов, позволяющих делать ему предположения о том, во что в итоге трансформируется код в той или иной версии фреймворка, автор статьи и говорит - старайтесь держаться в кеше процессора. В инете полно статей про всякий deep inside. Автор вопроса задал правильный вопрос. И он очень интересен. Автор вопроса молодец. Другое дело, что на практике в целях оптимизации выгоднее положиться на более детерменированный сценарий C++ с ассемблерными вставками. А если это нужно использовать из. net, то это может быть обертка на c++/cli или pinvoke. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 02:22 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Судя по тому, что я начитался, обратиться к кешу процессор напрямую (указать адрес в кеше, например) нельзя даже из ассемблера. Это внутренняя вотчина процессора и он сам ей управляет. Тогда единственный плюс ассемблерных вставок по отношению к попыткам "уложиться в кеш" на языке высокого уровня под виртуалной машиной (Дотнет, например), это то, что есть гарантия, что на ассемблере кроме тех данных, что вы используете в данный момент, виртуальная машина не потащит в кеш ещё чего-нибудь. Т. е. для виртуальной машины и разных высокоуровневых библиотек по отношению к объёмам кеша процессора надо вводить понятие "доступно пользователю", как в своё время на коммуникаторах с маленькой памятью было. Скажем, кеш 7 МБ, а при программировании под виртуальной машиной он постоянно на 3 МБ забит всякими служебными данными вертуальной машины. Так что попытки уложиться в 7 МБ могут просто ни к чему не привести. Но при этом непонятно, как отследить, сколько в данный момент отправлено служебных данных. Если вызывать функции, показывающие, сколько в данный момент памяти занимает такой-то объект, то это будет относиться только к ОЗУ, а не к кешу, как я понимаю. Т. е. такие попытки мониторинга для высокоуровневых систем обречены на провал без специальных инструментов (которых, может, и нет). Ну т. е. да, согласен с автором выше, что лучше не заморачиваться "экономией памяти" в Дотнете и использовать более контролируемые в этом смысле ассемблерные вставки. Хотя, опять же, понятие "доступно пользователю" бы не помешало, ибо использование обёрток не загромождает ли кеш так же служебными данными, как и при попытках "экономить" чисто под виртуальной машиной? Ведь вызоввы этих обёрток происходят всё равно из-под виртуальной машины. И ещё вопрос. Как я понимаю, под ассемблером вы понимаете именно процессорный ассемблер, а не какой-нибудь CIL? На CIL распространяется вся эта виртуальщина со сборками мусора и управляемостью, да? Тогда вопрос: какое может быть преимущество в написании каких-нибудь кусков кода непосредственно на CIL? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 08:46 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320 какое может быть преимущество в написании каких-нибудь кусков кода непосредственно на CIL? вы определитесь , што вам треба, какая задача стоит. а уж потом лезте в методы решения. максимальное быстродействие можно достичь целым спектром методов, помимо асма. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 08:52 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
beg-in-eruser7320 какое может быть преимущество в написании каких-нибудь кусков кода непосредственно на CIL? вы определитесь , што вам треба, какая задача стоит. а уж потом лезте в методы решения. максимальное быстродействие можно достичь целым спектром методов, помимо асма. Т. е. при определённых условиях много есть каких преимуществ при написании кода на CIL вместо какого-нибуди СиШарпа, помимо чисто академических целей "а как же это работает там внутри"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 11:05 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Скажем, кеш 7 МБ, а при программировании под виртуальной машиной он постоянно на 3 МБ забит всякими служебными данными вертуальной машины. Так что попытки уложиться в 7 МБ могут просто ни к чему не привести. А тест вообще пробовал какой-нибудь замутить? Ну типа делаем много всякой арифметики над куском в метр, потом следующий, еще один и т.д. Потом по два метра тоже самое. Потом по 4. И проанализировать отличия по времени. Одной и той же длительной работы, но с разной порционностью. Главное, чтобы она действительно была одна и та же (в сумме над всеми данными). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 14:29 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Edd.Dragonuser7320Скажем, кеш 7 МБ, а при программировании под виртуальной машиной он постоянно на 3 МБ забит всякими служебными данными вертуальной машины. виртуальной машины нет, есть нативный исполняемый код как результат JIT компиляции. временные переменные на стеке при нехватке регистров или для обмена с FPU -точно такие же как и при обычной компиляции с языков типа Паскаль и С. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 14:35 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Edd.Dragon, это к user7320, ошибся при цитировании ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2012, 14:36 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Ну ладно, а есть ли разница при передаче очень большого очень составного объекта (десятки мегабайт) по ссылке и маленького (в пределах одного килобайта)? Я к тому, что можно ли ради универсальности передавать всегда один и тот же объект в разные функции и функции уже сами там будут с нужными его полями работать, или лучше выбирать конкретное поле и передавать по ссылке только его? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:04 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320МСУпропущено... Стоп, давай определимся с терминами. Что ты имеешь ввиду по словом "кеш"? Покажи пример кода, как ты кешируешь данные. Кеш - это кеш процессора. Я не знаю, когда я кеширую данные. В том-то и штука. Как я из СиШарпа узнаю, что я данные в данный момент кеширую? Я могу только сказать, что если я в данные момент работаю с какой-то переменной, то её значение и её адрес прошли через кеш. авторЕще раз - давай на пальцах (с примерами кода), откуда, что и как ты получаешь в виде исходных данных. У меня есть класс в отдельной сборке, в котором есть основная функция расчёта. Программа загружает мою сборку и передаёт моей функции один объект, который содержит в своих полях и настройки, и массивы данных. Моя функция расчёта по мере продвижения этого расчёта берёт разные части входящего объекта. Ну вот, например, не придираясь к правильности кода: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Буквари я погуглю про кучи и управление памятью, но попозже. Прежде, чем озадачиваться оптимизацией на уровне регистров, лучше разобраться, что происходит во время такого косяка как list.add. Одно это убьет всю производительность на корню. Первый принцип разработки эффективного кода на net - минимизация выделения памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:00 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
SeVaПрежде, чем озадачиваться оптимизацией на уровне регистров, лучше разобраться, что происходит во время такого косяка как list.add. Одно это убьет всю производительность на корню. Первый принцип разработки эффективного кода на net - минимизация выделения памяти. Эмм... ну а что со списком и конкретно с добавлением в него элементов можно сделать, кроме как во время создания указать фиксированный размер? И меня всё равно интересует вопрос в моём предыдущем посте - есть ли разница при передаче по ссылке объектов разного размера? Если ли разница, передавать в функцию один большой объект по ссылке и считывать нужные свойства, или лучше эти свойства по отдельности в параметры загнать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 10:38 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Если ли разница, передавать в функцию один большой объект по ссылке и считывать нужные свойства, или лучше эти свойства по отдельности в параметры загнать? сферический конь в вакууме. Где лучше, для чего лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 11:08 |
|
|
start [/forum/topic.php?fid=20&msg=38092294&tid=1405345]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 323ms |
total: | 478ms |
0 / 0 |