Я предполагаю, что он смотрит на вашу модель и как-то готовит вещи, так что ваши первые несколько сериализации не замедляются. Что делать, если моя модель обмена сообщениями имеет класс сообщений с дочерними классами? Помещает ли мой родительский класс в аргумент типа также подготовить всех детей?Что делает подготовительный аппарат от protobuf-net?
ответ
(этот ответ предполагает Protobuf-сеть v2)
Если вы имеете в виду Serializer.PrepareSerializer<T>()
, то это, безусловно, инспектировать все дочерние типы-, поэтому тип-модель будет готова для них (то есть: он будет выяснить, какие поля/свойства и т. д. требуется для сериализации). Он предварительно скомпилирует (то есть IL-emit) код для родительского класса, но (смотря на код), а не только на производные типы. При отсутствии ответов производные типы будут скомпилированы, когда это будет необходимо. Я думаю! Я могу сделать тщательную проверку, если вы действительно этого хотите.
Однако, если вы используете RuntimeTypeModel.Default.CompileInPlace()
, он строит всю модель - все готово. Разумеется, после этого возникает вопрос о необходимости сначала рассказать модели о них; p
Я дважды проверю, чтобы увидеть, в какой момент подготовлены сериализаторы подтипов, чтобы быть уверенными. Возможно, имеет смысл каскадировать их.
Update:
это выглядит, как он делает действительно каскадом производным типов, но не к типу родитель (если таковые имеются):
[Test]
public void CheckTypeSpecificCompileInPlaceCascadesToBaseAndChildTypes()
{
var model = TypeModel.Create();
model[typeof(B)].CompileInPlace();
Assert.IsTrue(model.IsPrepared(typeof(D)), "D"); // sub-sub-type
Assert.IsTrue(model.IsPrepared(typeof(C)), "C"); // sub-type
Assert.IsTrue(model.IsPrepared(typeof(B)), "B"); // self
Assert.IsTrue(model.IsPrepared(typeof(A)), "A"); // base-type
}
[Test]
public void CheckGlobalCompileInPlaceCascadesToBaseAndChildTypes()
{
var model = TypeModel.Create();
model.Add(typeof (B), true); // give the model a clue!
model.CompileInPlace();
Assert.IsTrue(model.IsPrepared(typeof(D)), "D"); // sub-sub-type
Assert.IsTrue(model.IsPrepared(typeof(C)), "C"); // sub-type
Assert.IsTrue(model.IsPrepared(typeof(B)), "B"); // self
Assert.IsTrue(model.IsPrepared(typeof(A)), "A"); // base-type
}
Здесь, второй пробные проходы; в первом тесте не указано «A», поэтому подтипы («C» и «D») были полностью скомпилированы. Так как базовый тип по-прежнему будет скомпилирован по требованию, это возможно штраф как есть, но я мог бы, вероятно, сделать его трактом для типов предков, если это было бы полезно.
(метод IsPrepared
существует только в моей локальной копии)
Мне было просто интересно, что он сделал. Моя программа не чувствительна к времени разворота. Спасибо, что вернулись ко мне так скоро. – Carlos
@ Карлос это просто все возможное мышление, которое, возможно, потребуется сделать загодя; в противном случае он делает это как нужно (только в первый раз). –
- 1. Решение задачи программирования: Аппарат от Kattis
- 2. Почему этот подготовительный отчет уязвим?
- 3. Что делает ping() в redis?
- 4. Java: Кассовый аппарат
- 5. Direct3D9 game: Космический аппарат
- 6. Весенний эквивалент MVC для Struts 2 Подготовительный
- 7. Подготовительный агент jacoco, не генерирующий файл jacoco.exec
- 8. что делает logging.basicConfig делает?
- 9. Что именно делает «Запуск от имени администратора»?
- 10. Что делает функция VirtualProtect от Kernel32?
- 11. Что делает stub.callsArg (index) от Sinon.JS?
- 12. Что делает дилиб отличным от другого?
- 13. Наследуя от класса, что это делает?
- 14. Что делает autoRegenerate от cakephp 2
- 15. Магистральный слуховой аппарат Не стрелять
- 16. Подготовительный файл следует за объектом игрока?
- 17. Настраиваемый рабочий процесс/государственный аппарат
- 18. Что делает «&&»?
- 19. Что делает?
- 20. Что делает `? .`?
- 21. Что делает $()?
- 22. Что делает RxJS.Observable debounce?
- 23. Что делает api.imply?
- 24. Что делает EventEmitter.call()?
- 25. Что именно делает .selectAll()?
- 26. Что действительно делает getEvdoDbm()?
- 27. Что это делает?
- 28. Что делает fixScale (document)?
- 29. Что делает метод tf.nn.lrn()?
- 30. Что делает клон супер?
О, я хотел бы также отметить: если вы хотите абсолютный минимальный спин-вверх, вы можете предварительно собрать сериализаторы в сборку (DLL), и ссылка, что в вашем основном проекте ... –