Re[6]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 16.06.18 10:55
Оценка: +1 :))
Здравствуйте, Ikemefula, Вы писали:

I>По уму, надо бы положить BinaryFormatter в неймспейс Debug и назвать ObjectGraphDump. Тогда многие вопросы снялись бы сами собой.


Он и так назван Formatter, а не Serializer. Но, как видишь, не останавливает.
Re[8]: а всё-таки весело
От: CoderMonkey  
Дата: 16.06.18 15:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Два раза обходить граф рефлекшеном?


Зачем два раза обходить? Раз обойти, второй — по сохраненному списку.
А по хорошему, надо было просто генерить код для обхода. Но ручки то не дотягиваются, видимо.
Отредактировано 16.06.2018 15:38 CodeMonkey . Предыдущая версия .
Re[10]: а всё-таки весело
От: CoderMonkey  
Дата: 16.06.18 15:32
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>На объект может быть ссылка? может, соотв. чтобы кто-то на кого-то мог ссылаться, этот "кого-то" должен иметь идентификатор, а тот кто ссылается должен хранить ссылку на этого "кого-то".


На самом деле, конечно, не должен. Адрес объекта — это и есть его идентификатор. Да и для списка хранить ссылку на каждый элемент — странно как-то.
Re[7]: а всё-таки весело
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.06.18 15:44
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Ikemefula, Вы писали:


I>>По уму, надо бы положить BinaryFormatter в неймспейс Debug и назвать ObjectGraphDump. Тогда многие вопросы снялись бы сами собой.


НС>Он и так назван Formatter, а не Serializer. Но, как видишь, не останавливает.



formatter это слишком общее слово.
Re[8]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 16.06.18 16:38
Оценка: +2 :)
Здравствуйте, Ikemefula, Вы писали:

НС>>Он и так назван Formatter, а не Serializer. Но, как видишь, не останавливает.

I>
I>formatter это слишком общее слово.

О да, главная проблема в том что слово не такое, а не в том что некоторые документацию не читают.
Re[9]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 16.06.18 16:38
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

НС>>Два раза обходить граф рефлекшеном?

CM>Зачем два раза обходить? Раз обойти, второй — по сохраненному списку.

Это всер равно замедлит и сильно.

CM>А по хорошему, надо было просто генерить код для обхода.


JIT не даст работать коду, который обращается к приватным полям извне. Это во-первых. А во-вторых в случае BinaryFormatter заранее неизвестен список типов, в отличие от того же XmlSerializer.

CM> Но ручки то не дотягиваются, видимо.


BinaryFormatter это легаси, его никто существенно переделывать не будет. Ты какую задачу вообще решаешь? Зачем тебе BF понадобился?
Re[11]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 16.06.18 16:39
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

CM>Адрес объекта — это и есть его идентификатор.


Что такое "адрес объекта" в контексте CLR?
Re[9]: а всё-таки весело
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.06.18 19:46
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Он и так назван Formatter, а не Serializer. Но, как видишь, не останавливает.

I>>
I>>formatter это слишком общее слово.

НС>О да, главная проблема в том что слово не такое, а не в том что некоторые документацию не читают.


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

"Он и так назван Formatter..." гы гы.
Re[10]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 16.06.18 19:55
Оценка: :)
Здравствуйте, Ikemefula, Вы писали:

НС>>О да, главная проблема в том что слово не такое, а не в том что некоторые документацию не читают.

I>Именно потому, что документацию не читают и надо подбирать правильные имена и неймспеймы, открывать или закрывать доступ.

Увы, мир не идеален. Правильными названиями вообще мало кто заморачивается, за редким исключением типа такого.
Re[11]: а всё-таки весело
От: pilgrim_ Россия  
Дата: 16.06.18 21:20
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, pilgrim_, Вы писали:


_>>На объект может быть ссылка? может, соотв. чтобы кто-то на кого-то мог ссылаться, этот "кого-то" должен иметь идентификатор, а тот кто ссылается должен хранить ссылку на этого "кого-то".


CM>На самом деле, конечно, не должен. Адрес объекта — это и есть его идентификатор.


Сюр какой-то, какой адрес объекта в сериализованном представлении, в файле например?

CM>Да и для списка хранить ссылку на каждый элемент — странно как-то.


А что он должен хранить? Как ссылаться на произвольный сериализуемый объект (в файле напр.)?
Re[10]: а всё-таки весело
От: CoderMonkey  
Дата: 18.06.18 16:29
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Это всер равно замедлит и сильно.


С фига ли, позвольте узнать? И наколько сильно?

НС>JIT не даст работать коду, который обращается к приватным полям извне. Это во-первых. А во-вторых в случае BinaryFormatter заранее неизвестен список типов, в отличие от того же XmlSerializer.


1. Есть unsafe, или его уже отменили?
2. Это нисколько не мешает сгенерить код для известных типов

НС>BinaryFormatter это легаси, его никто существенно переделывать не будет. Ты какую задачу вообще решаешь? Зачем тебе BF понадобился?


Какую решаю — уже решил. Просто решил поиграться и удивился, насколько он феноменально крив.
А ты, кстати, какую задачу здесь решаешь?
Re[12]: а всё-таки весело
От: CoderMonkey  
Дата: 18.06.18 16:30
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Что такое "адрес объекта" в контексте CLR?


Смещение от начала результата, например.
Re[12]: а всё-таки весело
От: CoderMonkey  
Дата: 18.06.18 16:32
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>Сюр какой-то, какой адрес объекта в сериализованном представлении, в файле например?


И в чем заключается "сюр"?

_>А что он должен хранить? Как ссылаться на произвольный сериализуемый объект (в файле напр.)?


Достаточно хранить просто тела объектов. А нафига тебе понадобилось ссылаться на произвольный сериализуемый объект?
Re[13]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 18.06.18 19:57
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

НС>>Что такое "адрес объекта" в контексте CLR?

CM>Смещение от начала результата, например.

А если в графе циклы? Как смещение предвычислить?
Re[11]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 18.06.18 19:57
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

НС>>JIT не даст работать коду, который обращается к приватным полям извне. Это во-первых. А во-вторых в случае BinaryFormatter заранее неизвестен список типов, в отличие от того же XmlSerializer.


CM>1. Есть unsafe, или его уже отменили?


Работает только для full trust

CM>2. Это нисколько не мешает сгенерить код для известных типов


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

НС>>BinaryFormatter это легаси, его никто существенно переделывать не будет. Ты какую задачу вообще решаешь? Зачем тебе BF понадобился?

CM>Какую решаю — уже решил. Просто решил поиграться и удивился, насколько он феноменально крив.

Он не крив, просто ты явно применил его не по назначению.

CM>А ты, кстати, какую задачу здесь решаешь?


Я никакой. Я пытаюсь ответить на твои вопросы.
Re[12]: а всё-таки весело
От: CoderMonkey  
Дата: 20.06.18 02:34
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Работает только для full trust


Можно подумать, он и так не требует full trust

НС>И да, для BF никаких известных типов кроме примитивов не существует в принципе.


С чего бы?

НС>Я никакой. Я пытаюсь ответить на твои вопросы.


Не похоже.
Re[14]: а всё-таки весело
От: CoderMonkey  
Дата: 20.06.18 02:37
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>А если в графе циклы? Как смещение предвычислить?


1. Делаем обход графа возможных типов, генерим код для обхода объектов. Если какие типы заранее неизвестны — там уж придется использовать рефлекшен.
2. Обходим граф объектов, складываем объекты в список в порядке обнаружения
3. Идем по списку, пишем объекты

В чем проблема то?
Ну, кроме рук, естественно.
Re[13]: а всё-таки весело
От: Ночной Смотрящий Россия  
Дата: 20.06.18 03:35
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

CM>Можно подумать, он и так не требует full trust


Не требует. Иначе бы междоменное взаимодействие без full trust не работало.

НС>>И да, для BF никаких известных типов кроме примитивов не существует в принципе.

CM>С чего бы?

Так он устроен.
Re[14]: а всё-таки весело
От: CoderMonkey  
Дата: 20.06.18 19:36
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Не требует. Иначе бы междоменное взаимодействие без full trust не работало.


Хз, не проверял. Но в давние времена, когда я щупал BF в первый раз, без full trust оно ни хрена не работало.

НС>Так он устроен.


Прекрасное объяснение, годится на все случаи жизни.
Re[13]: а всё-таки весело
От: pilgrim_ Россия  
Дата: 21.06.18 23:26
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, pilgrim_, Вы писали:


_>>Сюр какой-то, какой адрес объекта в сериализованном представлении, в файле например?


CM>И в чем заключается "сюр"?


Так не делают
— адреса объектов (в памяти), их размер, зависят от архитектуры проца (x86/x64)
— в случае CLR, в процессе сериализации адрес объекта может быть изменен (при дефрагментации кучи, в которой на данный момент "живет" объект)

_>>А что он должен хранить? Как ссылаться на произвольный сериализуемый объект (в файле напр.)?


CM>Достаточно хранить просто тела объектов.


— BinaryFormatter спецом сделан, и тебе уже сказали об этом, для возможности передать полный граф объектов по ремотингу, AppDomain/сеть, с возможностью полностью воссоздать (десериализовать) оригинальный граф
— в общем случае это дороже в плане объема, чем хранить ссылку (конечно возможны и оптимизации — если объем хранения id+ссылки > тела объекта, тело сохранять выгоднее, т.е. можно хранение сделать вариативным), но это не про BinaryFormatter, см. п.1
-при циклических ссылках (напр. parent/child+parent) сохранение "сырого" тела невозможно, попробуй это сделать с пом. XmlSerializer

CM>А нафига тебе понадобилось ссылаться на произвольный сериализуемый объект?


произвольный здесь в смысле любой (в товем примере List ссылается на объекты TestClass)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.