Ruby: условная матрица? случай с несколькими условиями?

Если у Вас есть серьезное основание полагать, что значительный набор объектов - особенно те, которых Вы подозреваете, чтобы быть в поколениях 1 и 2 - теперь имеют право на сборку "мусора", и это теперь было бы подходящим временем для сбора с точки зрения маленького хита производительности.

А хороший пример этого - то, если Вы только что закрыли большую форму. Вы знаете, что все средства управления UI могут теперь быть собраны "мусор", и очень короткая пауза, поскольку форма закрывается, вероятно, не будет примечательно пользователю.

ОБНОВЛЕНИЕ 07.02.2018

С.NET 4.5 - существует GCLatencyMode.LowLatency и GCLatencyMode.SustainedLowLatency. При вводе и отъезде любого из этих режимов, рекомендуется вызвать полный GC с GC.Collect(2, GCCollectionMode.Forced).

С.NET 4.6 - существует GC.TryStartNoGCRegion метод (раньше устанавливал значение только для чтения GCLatencyMode.NoGCRegion). Это может самостоятельно, выполнять полную сборку "мусора" блокирования в попытке освободить достаточно памяти, но, учитывая мы запрещаем GC в течение периода, я утверждал бы, что это - также хорошая идея выполнить полный GC прежде и после.

Источник: инженер Microsoft Ben Watson: Пишущий Высокоэффективный Код.NET , 2-й Ed. 2018.

См.:

23
задан Andrew Grimm 10 January 2013 в 22:29
поделиться

2 ответа

Логический случай (без выражения в case, он возвращает первую ветвь с истинным when_expr):

result = case
when A && B then ...
when A && !B then ...
when !A && B then ...
when !A && !B then ...
end

Соответствующий случай (с выражением в case возвращает первую ветвь, которая удовлетворяет предикату when_expr === case_expr):

result = case [A, B]
when [true, true] then ...
when [true, false] then ...
when [false, true] then ...
when [false, false] then ...
end
53
ответ дан 29 November 2019 в 00:44
поделиться

Если вы ищете случай с одним условием, но с несколькими сопоставителями.

case @condition
  when "a" or "b"
    # do something
  when "c"
    # do something
end

.. тогда вам действительно нужно это :

case @condition
  when "a", "b"
    # do something
  when "c"
    # do something
end

Это можно переписать как

case @condition
  when ("a" and "b")
    # do something
  when "c"
    # do something
end

Но это несколько нелогично , поскольку это эквивалентно

if @condition == "a" or @condition == "b"
23
ответ дан 29 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

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