리소스 관리: use 키워드
이 항목에서는 리소스의 초기화 및 릴리스를 using
제어할 수 있는 키워드(keyword) use
및 함수에 대해 설명합니다.
리소스
용어 리소스 는 둘 이상의 방법으로 사용됩니다. 예, 리소스는 문자열, 그래픽 등과 같이 애플리케이션에서 사용하는 데이터일 수 있지만, 이 컨텍스트에서 리소스는 그래픽 디바이스 컨텍스트, 파일 핸들, 네트워크 및 데이터베이스 연결, 대기 핸들 등의 동시성 개체와 같은 소프트웨어 또는 운영 체제 리소스를 참조합니다. 애플리케이션에서 이러한 리소스를 사용하려면 운영 체제 또는 다른 리소스 공급자로부터 리소스를 취득한 다음 나중에 풀에 리소스를 릴리스하여 다른 애플리케이션에 제공할 수 있습니다. 애플리케이션이 리소스를 다시 공용 풀로 릴리스하지 않을 때 문제가 발생합니다.
리소스 관리
애플리케이션에서 리소스를 효율적이고 책임감 있게 관리하려면 리소스를 예측 가능한 방식으로 신속하게 해제해야 합니다. .NET Framework는 인터페이스를 제공하여 이 작업을 수행하는 데 System.IDisposable
도움이 됩니다. 구현하는 형식에는 리소스를 System.IDisposable
System.IDisposable.Dispose
올바르게 해제하는 메서드가 있습니다. 잘 작성된 애플리케이션은 제한된 리소스를 보유하는 System.IDisposable.Dispose
개체가 더 이상 필요하지 않을 때 즉시 호출되도록 보장합니다. 다행히 대부분의 .NET 언어는 이 작업을 더 쉽게 수행할 수 있도록 지원하며 F#에서도 예외는 아닙니다. 삭제 패턴을 use
지원하는 두 가지 유용한 언어 구문인 바인딩과 함수가 using
있습니다.
바인딩 사용
use
키워드(keyword) 바인딩과 유사한 폼이 let
있습니다.
값 = 식 사용
바인딩과 동일한 기능을 let
제공하지만 값이 범위를 벗어날 때 값에 대한 호출 Dispose
을 추가합니다. 컴파일러는 값에 null 검사 삽입하므로 값이 null
있으면 호출 Dispose
이 시도되지 않습니다.
다음 예제에서는 키워드(keyword) 사용하여 파일을 자동으로 닫는 use
방법을 보여줍니다.
open System.IO
let writetofile filename obj =
use file1 = File.CreateText(filename)
file1.WriteLine("{0}", obj.ToString() )
// file1.Dispose() is called implicitly here.
writetofile "abc.txt" "Humpty Dumpty sat on a wall."
여러 인스턴스는 use
선언된 역순으로 삭제됩니다. 즉, 첫 번째 use
릴리스는 마지막 릴리스가 됩니다.
참고 항목
계산 식에서 사용할 use
수 있습니다. 이 경우 사용자 지정된 버전의 use
식이 사용됩니다. 자세한 내용은 시퀀스, 비동기 식, 작업 식 및 계산 식을 참조하세요.
using 함수
함수의 using
형식은 다음과 같습니다.
using
(expression1) 함수 또는 람다
식에서 using
expression1은 삭제해야 하는 개체를 만듭니다. expression1(삭제해야 하는 개체)의 결과는 함수 또는 람다에 대한 인수, 값이 됩니다. 이 인수는 expression1에서 생성된 값과 일치하는 형식의 단일 재기본ing 인수를 예상하는 함수이거나 해당 형식의 인수를 예상하는 람다 식입니다. 함수 실행이 끝날 때 런타임은 리소스를 호출 Dispose
하고 해제합니다(값이 null
아닌 경우 Dispose 호출이 시도되지 않는 경우).
다음 예제에서는 람다 식이 using
있는 식을 보여 줍니다.
open System.IO
let writetofile2 filename obj =
using (System.IO.File.CreateText(filename)) ( fun file1 ->
file1.WriteLine("{0}", obj.ToString() )
)
writetofile2 "abc2.txt" "The quick sly fox jumps over the lazy brown dog."
다음 예제에서는 함수가 있는 using
식을 보여 있습니다.
let printToFile (file1 : System.IO.StreamWriter) =
file1.WriteLine("Test output");
using (System.IO.File.CreateText("test.txt")) printToFile
함수는 일부 인수가 이미 적용된 함수일 수 있습니다. 다음 코드 예제에서는 이 작업을 보여줍니다. 문자열 XYZ
이 포함된 파일을 만듭니다.
let printToFile2 obj (file1 : System.IO.StreamWriter) =
file1.WriteLine(obj.ToString())
using (System.IO.File.CreateText("test.txt")) (printToFile2 "XYZ")
using
함수와 use
바인딩은 동일한 작업을 수행하는 거의 동일한 방법입니다. using
키워드(keyword) 호출되는 시기를 보다 세세하게 제어할 수 Dispose
있습니다. 사용하는 using
Dispose
경우 함수 또는 람다 식의 끝에서 호출됩니다. 키워드(keyword) Dispose
사용하는 use
경우 포함하는 코드 블록의 끝에서 호출됩니다. 일반적으로 함수 대신 using
사용하는 use
것이 좋습니다.
참고 항목
.NET