Если у Вас есть серьезное основание полагать, что значительный набор объектов - особенно те, которых Вы подозреваете, чтобы быть в поколениях 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.
См.:
Логический случай (без выражения в 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
Если вы ищете случай с одним условием, но с несколькими сопоставителями.
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"