Safehandle в C#

Мы могли бы пройтись по столбцам и выполнить частичное совпадение с grepl, Reduce, list из vector с одним логическим vector и привести значения к двоичному

df$flag_var <- +(Reduce(`|`, lapply(df[-1], grepl, pattern = '^231')))
.

данные

df <- structure(list(ID = c("1", "2", "3", "4"), cd1 = c("231", "222", 
"123", "145"), cd2 = c("219", "", "142", "521"), cd3 = c("1321", 
 "", "", "2313"), cd4 = c("2314", "", "", "122")), row.names = c(NA, 
 -4L), class = "data.frame")
9
задан Vivek 1 October 2008 в 01:08
поделиться

2 ответа

Я думаю, что MSDN является довольно четким в определении:

Класс SafeHandle обеспечивает критическое завершение ресурсов дескриптора, препятствуя тому, чтобы дескрипторы были исправлены преждевременно сборкой "мусора" и от того, чтобы быть переработанным Windows для ссылки на непреднамеренные неуправляемые объекты. Перед версией 2.0 Платформы.NET все дескрипторы операционной системы могли только инкапсулироваться в объекте управляемой оболочки IntPtr.

Класс SafeHandle содержит финализатор, который гарантирует, что дескриптор закрывается и, как гарантируют, будет работать, даже во время неожиданного AppDomain разгружается, когда хост не может доверять непротиворечивости состояния AppDomain.

Для получения дополнительной информации о преимуществах использования SafeHandle, посмотрите Безопасные Дескрипторы и Критическое Завершение.

Этот класс абстрактен, потому что Вы не можете создать универсальный дескриптор. Для реализации SafeHandle необходимо создать производный класс. Для создания производных классов SafeHandle необходимо знать, как создать и освободить дескриптор операционной системы. Этот процесс отличается для различных типов дескриптора, потому что некоторое использование CloseHandle, в то время как другие используют более определенные методы, такие как UnmapViewOfFile или FindClose. Поэтому необходимо создать производный класс SafeHandle для каждого типа дескриптора операционной системы; такой как MySafeRegistryHandle, MySafeFileHandle и MySpecialSafeFileHandle. Некоторые из этих производных классов предварительно записаны и предусмотрены Вы в Microsoft. Win32. Пространство имен SafeHandles.

8
ответ дан 4 December 2019 в 08:35
поделиться

Другой способ посмотреть на него: с SafeHandle Вы почти никогда не должны должны быть писать другой финализатор.

11
ответ дан 4 December 2019 в 08:35
поделиться