Как справиться, сессии NHibernate в долговечном Windows формирует приложение?

Замечание о MUX

Напомним, что ? описывает мультиплексор (MUX), поэтому утверждение:

out = sel ? x : y

эквивалентен в реализации уровня шлюза:

out = (sel & x) | (~sel & y)

(когда sel=1, out <= x, когда sel=0, out <= y)

Если y=0, то MUX сводится к И между x и sel: out = (sel & x) | (~sel & 0) = sel & x

Получение w_r

Предполагая BW=2 и [1112 ] w_r - это 4-битный сигнал. Давайте разберемся с этим:

w_r = w_rL ^ x_rR

w_rL = { ((i_a[1])?i_b:{(BW){1'b0}}), 1'b0 }

w_rR = { 1'b0, ((i_a[0])?i_b:{(BW){1'b0}}) }

Обратите внимание, что оба значения «else» MUX равны нулю ', то MUX упрощены до AND, как в примечании выше:

w_rL = { BW{i_a[1]} & i_b, 1'b0 } = { A1 & B1, A1 & B0, 0 }

w_rR = { 1'b0, BW{i_a[0]} & i_b } = { 0, A0 & B1, A0 & B0}

[1168]

Я заменил i_a = {A1, A0} и i_b = {B1, B0} упростить представление. В конце концов, путем их XORing по битам:

  • w_r[0] = 0 ^ (A0 & B0) = A0 & B0

  • w_r[1] = (A1 & B0) ^ (A0 & B1) [1122]

    [1171]
  • 1123]

  • w_r[3] = 0 (устанавливается неявно)

Получение c

Аналогично для 1-битный сигнал c:

c = cL & cR

cL = i_a[1] ? i_b[(BW-2):0]:{(BW-1){1'b0}} = {A1 & B0}

cR = i_a[0] ? i_b[(BW-1):1]:{(BW-1){1'b0}} = {A0 & B1) [1128]

В конце концов:

  • c = {A1 & B0 & A0 & B1}

Получение o_r

Если разбить o_r битов:

  • o_r[0] = 0 + w_r[0] = A0 & B0

  • o_r[1] = 0 + w_r[1] = (A1 & B0) ^ (A0 & B1)

  • o_r[2] = c + w_r[2] = (A1 & B0 & A0 & B1) + (A1 & B1) - если мы добавим их, то сумма будет их XOR, и перенос это их И, то есть: o_r[2] = (A1 & B0 & A0 & B1) ^ (A1 & B1)

  • o_r[3] = <carry from o_r[2] addition> = A1 & B0 & A0 & B1 & A1 & B1 = A1 & B0 & A0 & B1 (помните, ANDing с собой равняется самому себе, то есть x & x = x)

Вывод диаграммы уровня шлюза

Ваша диаграмма уровня шлюза отображает следующие уравнения:

C0 = A0 & B0 (=o_r[0])

C1 = (A0 & B1) ^ (A1 & B0) (=o_r[1])

C2 = (A0 & B1 & A1 & B0) ^ (A1 & B1) (=o_r[2] сумма)

C3 = (A0 & B1 & A1 & B0) & (A1 & B1) = A0 & B1 & A1 & B0 (=o_r[3] переносить)

Почему реализация такая странная?!

Комментарии к коду указывают, что ячейка умножителя построена для конкретной архитектуры FPGA, и похоже, что намерение исходного кодера было чтобы соответствовать каждой ячейке множителя в одной LUT для этой архитектуры. Поэтому я держу пари, что оригинальный кодер пытался «направить» старый, тупой инструмент на построение множителя эффективным с точки зрения ПЛИС способом, который обычно не эффективен на уровне затвора. Я думаю, что такие «ручные» оптимизации уровня RTL бесполезны с сегодняшними инструментами EDA (надеюсь!).

10
задан Ewan Makepeace 5 December 2008 в 21:14
поделиться

4 ответа

Ayende и компания обычно рекомендуют использовать сессию на "разговор". Это обычно делает время жизни сессии в последний раз для очень коротких операций, таким образом, оно ведет себя больше как веб-приложение.

Для Вашего древовидного случая можно использовать решение № 2 Bruno очень хорошо. Объекты могут быть лениво отображены. Затем каждый раз, когда необходимо получить доступ к дочернему набору, Вы запускаете разговор и повторно подключаете родителя через ISession. Блокировка. Затем, когда привязка данных сделана, закройте тот сеанс. Не слишком много служебное для поддержания, всего несколько строк кода в любой форме, которая должна нести разговор; можно расширить Форму и средства управления, которые Вы используете, чтобы сделать это автоматически, если Вы чувствуете себя нахальными.

Хитрая часть, затем, является параллельными редактированиями от различных сессий. Давайте не идти туда!

4
ответ дан 4 December 2019 в 01:58
поделиться

Я открываю сессию, когда мне будет нужно один, и я закрою ее, когда я знаю, что мне больше не будет нужна она.

Строго говоря, например, если у меня будет форма, которая позволяет мне отредактировать информацию о Клиенте, например, то я открою сессию, когда форма инстанцируют, и я закрою Сеанс, когда форма закрывается. Когда у меня есть 2 экземпляра той открытой формы, у меня также есть 2 открытые сессии.

3
ответ дан 4 December 2019 в 01:58
поделиться

Я вижу несколько альтернатив:

  1. Нетерпеливая загрузка дерево объектов (который, от то, что я могу собрать из документации, является значением по умолчанию),
  2. Отсоедините объекты, прервите событие "щелчка" и загрузите данные из базы данных затем с новой сессией. Эти силы Вы для заботы о наборах собой, вместо того, чтобы полагаться на nhibernate, который может упасть за пределами объема вопроса (который просит преимущества NHibernate, один из которых является управлением набором),
1
ответ дан 4 December 2019 в 01:58
поделиться

Можно смотреть к моим сообщениям о том, как использовать uNHAddins для работы с сессией на разговор в приложении Windows Forms (uNHAddins, проект с некоторым additionsns к NHibernate во главе с Fabio Maulo, текущим Выводом NH),

Первое сообщение - это

http://gustavoringel.blogspot.com/2009/02/unhaddins-persistence-conversation-part.html

Оттуда у Вас есть ссылки на соединительную линию uNHAddins.

1
ответ дан 4 December 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: