powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Побайтное сравнение, NHibernate
7 сообщений из 7, страница 1 из 1
Побайтное сравнение, NHibernate
    #36211013
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большая БД. В ней, в том числе, есть поле Data, тип byte[]. Маппинг вида "<property name="Data" type="BinaryBlob" length="2500000" />". Файлы от 100 кб до 10 мб. Программа, которая заносит в БД тестовые файлы (около 300) работает ОЧЕНЬ ДОЛГО. Я полез профайлером. Проседание производительности оказалось в методе Flash у сессии. Внутри оказалось, что почти 80% съедает метод NHibernate.Util.CollectionHelper.CollectionEquals<T>(ICollection<T>, ICollection<T>). Собственно вопрос - ОН ИХ ПОБАЙТНО СРАВНИВАЕТ? Как это отключить?
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36214355
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raziel,

Я, к сожалению уже не помню всех подробностей, а поднимать сейчас нет времени, извините.
По-этому, попробую описать, что помню - остальное поищите сами.

В общем, суть проблемы в том, что для того, чтобы сохранить граф сущностей NHibernate ищет изменившиеся (это вообще его больное место - такое у него отслеживание изменений. Microsoft, кстати, с этим пытается бороться в своей EF вводя специальные механизмы отслеживания изменений) - делать он, понятное дело может только сравнением того что было, с тем что стало. Для простых полей эти накладные - копейки, а вот для больши blob - да, проблема.

Что тут можно сделать... (вот дальше уже наинаются пробелы, сорри):
1. Попробовать изменить режим сохранения. Помнится была возможность заставить сохранять всегда, без сравнения (правда это тоже не фонтан - сохранять всегда и все). Однако, я могу ошибаться и возможно это была возможность только для транзитных сущностей... Впрочем, тоже вариант - достать сущность, отсоединить, поменять, присоединить и сохранить.
2. Для проверки что сущность изменилась используется метод обнаружения Derty. Его можно переопределять. Но в разных версиях это несколько по-разному.
В 1.2 это делалось написанием перехватчика и переопределением у него метода OnFlushDirty (вот только я не уверен, не будет ли NH все равно проверять сам на чистоту, если даже ваш метод вернет, что объект не изменился).
В 2.x введен механизм событий, и есть специальное событие для проверки чистоты. Вот там, на сколько помню, можно вообще переопределить механизм проверки, но это несколько, хм ... нетривиально.

А вообще, общая стратегия, которую мы для себя избрали - не работать с blob через NH - он это делает неоптимально (ну разве что оставить для совсем уж маленьких ~100 кб).
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36215513
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если используется <version> NH тоже производит сравнение ?
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36219700
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Sukhovilin,

Увы, не знаю - с версиями я никогда не работал.
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36237490
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал слегка по-другому. Указал на blob в маппинге mutable=false и он перестал сверять.
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36238157
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не перестал ли он его записывать? :)
...
Рейтинг: 0 / 0
Побайтное сравнение, NHibernate
    #36239273
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записывает. Просто по-идее теперь нельзя изменять поля. Только удалять запись и создавать новую. Но это можно решить переносом файла в другую таблицу.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Побайтное сравнение, NHibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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