Стек:
"куча":
delete
, delete[]
, или free
. new
или malloc
соответственно. Пример:
int foo()
{
char *pBuffer; //<--nothing allocated yet (excluding the pointer itself, which is allocated here on the stack).
bool b = true; // Allocated on the stack.
if(b)
{
//Create 500 bytes on the stack
char buffer[500];
//Create 500 bytes on the heap
pBuffer = new char[500];
}//<-- buffer is deallocated here, pBuffer is not
}//<--- oops there's a memory leak, I should have called delete[] pBuffer;
Поскольку другие пользователи перечислили преимущества, я просто перечислю недостатки
Недостатки
Преимущества :
Недостатки :
(см., Например, тесты производительности и LINQ на ormbattle.net )
Преимущества:
Недостатки:
Приложениях, в которых вы должны его использовать:
Еще несколько конкретных причин, по которым нравится NHibernate
Недостатки: NHibernate не является продуктом Microsoft и поэтому столкнется с некоторым сопротивлением со стороны коллег, которые о нем не слышали. Особенно фанатики СОПО. Настройка файлов сопоставления и отложенной / нетерпеливой загрузки может занять много времени. Если ваша база данных имеет странное соглашение об именах, нетипичный дизайн или очень строгие требования к производительности, может потребоваться больше работы, чем ожидалось.
Я много говорю об этом, но ActiveRecord - отличный слой по сравнению с NHibernate. Он использует атрибуты для сопоставления точек данных с членами класса прямо в самих классах. Люди недостаточно используют эту штуку.
Ответ высокого уровня состоит в том, что NHibernate находится в отдельном классе и почти не имеет конкуренции.
Если вам нужен CRUD для базы данных из приложения .NET, вы должны использовать NHibernate, по крайней мере, по двум причинам:
1) Вы получаете поддержку Linq (что требует чего-то вроде ORM)
2) NHibernate очень зрелый
Существенных недостатков нет. Есть и другие варианты, но у этих вариантов есть существенные недостатки.
Я писал об этом некоторое время назад:
Несколько причин: Если у вас сложные объединения, иногда лучше иметь представление, чтобы при любом доступе соединения всегда были правильными, а разработчикам не приходилось запоминать все таблицы, которые им могут понадобиться. Обычно это может быть для финансового приложения, где чрезвычайно важно, чтобы все финансовые отчеты основывались на одном и том же наборе данных.
Если у вас есть пользователи, которым вы хотите ограничить записи, которые они могут когда-либо видеть, вы можете использовать представление , предоставьте им доступ только к представлению, а не к базовым таблицам, а затем запросите представление
Похоже, что отчеты Crystal предпочитают использовать представления для сохраненных процессов, поэтому люди, которые много пишут отчеты, как правило, используют много представлений
] Представления также очень полезны при рефакторинге баз данных. Часто вы можете скрыть изменение, чтобы старый код не увидел его, создав представление.
Недостатки:
Уже упоминалась кривая обучения. Вы можете начать использовать NHibernate очень быстро, но вам потребуются месяцы, чтобы освоить его. Я очень рекомендую прочитать книгу Manning NHibernate.
Написание отображения XML может быть очень утомительным, особенно для больших баз данных с сотнями и тысячами таблиц, представлений и хранимых процедур. Да, есть инструменты, которые помогут вам сгенерировать эти сопоставления, но вам все равно придется проделать довольно много ручной работы. Fluent NHibernate , похоже, упрощает этот процесс, избавляясь от сопоставлений XML, как и Castle ActiveRecord (AR, хотя его нельзя использовать для анемичной области, поскольку вы определяете сопоставления в атрибутах в классах модели ).
В некоторых сценариях производительность может быть низкой. Например, крупные оптовые операции. Для тех, кому, возможно, придется использовать IStatelessSession, но это неудобно, по крайней мере, чтобы сказать ...