ASP.NET MVC: UpdateModel - «дорогая» операция (из-за отражения)? - PullRequest
6 голосов
/ 30 июля 2009

Мне было интересно, считается ли UpdateModel «дорогой» операцией (из-за поиска свойств модели в Reflection), особенно если рассматривать ее в контексте более крупного веб-приложения (например, StackOverflow)?

Я не хочу заниматься преждевременной оптимизацией, но считаю правильным выбрать вариант использования UpdateModel, поэтому мне хотелось бы заранее знать, целесообразно это или нет. Другой (утомительный) выбор - написание собственного метода UpdateModel для различных доменных объектов с фиксированными свойствами.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 30 июля 2009

Вы умны, чтобы не участвовать в преждевременной оптимизации. Тем более, что эта «оптимизация» предпочтет процессорное время вашему, а это намного дороже.

Основное правило оптимизации - сначала оптимизировать медленный материал. Так что подумайте, как часто вы на самом деле обновляете модель, а не выбираете ее из своей базы данных. Я предполагаю, что это 1/10 как часто или меньше. Теперь рассмотрим стоимость выбора из базы данных и стоимость отражения. Стоимость отражения измеряется в миллисекундах. Стоимость выбора из базы данных может быть измерена в считанные секунды в худшем случае. Мой опыт показывает, что POST редко бывают очень медленными, и когда это происходит, то это, скорее, ошибка в базе данных, а не в отражении. Я думаю, что вы, скорее всего, потратите большую часть времени на оптимизацию на GET.

2 голосов
/ 30 июля 2009

По сравнению с задержкой в ​​сети, вызовами базы данных и общим вводом-выводом, вызов UpdateModel () тривиален, и я бы не стал его беспокоить.

0 голосов
/ 30 июля 2009

Я думаю, что UpdateModel - это своего рода ярлык, который вызывает огромное количество связей между представлением и моделью.

Я предпочитаю не использовать «встроенные» модели (например, возможность передавать созданные объекты LINQ в представление непосредственно из базы данных), потому что я хочу иметь возможность заменить мою модель чем-то более сложным - или даже просто другой базой данных поставщик. Однако очень заманчиво использовать LINQtoSQL (или ADO.NET Entities) для быстрого прототипирования.

Что я обычно делаю, так это создаю свое MVC-приложение, а затем выставляю слой «сервис», который затем подключается к «модели» (которая представляет собой OO-представление моего домена). Таким образом, я могу без проблем создавать слой веб-службы, менять базы данных, писать новые рабочие процессы и т. Д.

(и убедитесь, что вы пишете свои тесты и используете DI - это экономит много хлопот!)

Rob

...