Kaynak Yönetimi: Kullanım anahtar sözcüğü (F#)
Bu konu, anahtar sözcük açıklar use ve using işlevini başlatma ve yayın kaynaklarını denetleyebilirsiniz.
Kaynaklar
Bu terim kaynak birden fazla şekilde kullanılır. Evet, dizeler, grafik ve benzeri gibi ancak bu bağlamda bir uygulamanın kullandığı veri kaynakları olabilir kaynakları eşzamanlılık nesneleri bekleme tutamaçları vb. gibi yazılım veya grafik aygıtı içerikleri, dosya tanıtıcısı, ağ ve veritabanı bağlantıları gibi işletim sistemi kaynakları gösterir. İşletim sistemi veya başka bir uygulamaya sağlanabilir böylece kaynak sonraki sürümde havuzuna ve ardından diğer kaynak sağlayıcı, kaynak alımını uygulamalar tarafından bu kaynakların kullanımını içerir. Uygulama kaynaklarını ortak havuzuna bırakmaz sorunları oluşur.
Kaynakları yönetme
Etkili ve sorumlu bir uygulamada kaynaklarını yönetmek için ödediğiniz ve öngörülebilir bir şekilde kaynakları bırakmalıdır. .net Framework sağlayarak bunu yapmanıza yardımcı olur IDisposable arabirimi. Uygulayan bir tür IDisposable olan Dispose yöntemi, doğru kaynakları serbest bırakır. Parçacıklarıyla uygulamaları garanti Dispose sınırlı bir kaynağa tutan nesne artık gerekli olmadığında hemen denir. Neyse ki, çoğu. F# istisna değildir ve net dilleri kolaylaştırmak için destek sağlar. Dispose desen destekleyen iki yararlı dil yapıları vardır: use bağlama ve using işlevi.
Bağlama kullanın
use Anahtar sözcük vardır, benzer bir form let bağlama:
use value =expression
Aynı işlevi sağlayan bir let bağlama ancak bir çağrı ekler Dispose değeri kapsam dışına çıktığında değeri. Not değeri olan böylece derleyici değeri null bir denetim ekler null, çağrı Dispose değil çalıştı.
Aşağıdaki örnek kullanarak bir dosya otomatik olarak kapatılması gösterilmiştir use anahtar sözcüğü.
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."
Not
Kullanabileceğiniz use hesaplaması ifadelerde, özelleştirilmiş bir sürümünü durumda bulunan use deyimi kullanılır.Daha fazla bilgi için, bkz. Sıraları (F#), Zaman uyumsuz iş akışları (F#) ve Hesaplama ifadeleri (F#)
İşlevini kullanma
using İşlevi, aşağıdaki biçime sahiptir:
using (expression1) function-or-lambda
İçinde bir using ifadesi, expression1 elden gerekir nesnesi oluşturur. Sonucu expression1 (elden gerekir nesne) bir bağımsız değişken olur value, çok function-or-lambda, hangi tek beklediği ya da bir işlev kalan tarafından üretilen değerle eşleşen bir tür bağımsız değişkeni expression1, veya bu tür bir bağımsız değişkenin beklediği bir lambda ifadesi. Çalışma Zamanı Yürütme fonksiyonunun sonunda çağıran Dispose ve kaynakları serbest bırakır (değer olmadığı sürece null, Dispose çağrısı değil çalıştı, bu durumda).
Aşağıdaki örnekte gösterilmiştir using lambda ifade ifadesiyle.
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 jumped over the lazy brown dog."
Sonraki örnekte gösterildiği using bir işlev ifadesiyle.
let printToFile (file1 : System.IO.StreamWriter) =
file1.WriteLine("Test output");
using (System.IO.File.CreateText("test.txt")) printToFile
Not işlevi uygulanmış bazı bağımsız değişkenleri olan bir işlev olabilir. Aşağıdaki kod örneği, bu gösterir. Dize içeren bir dosyayı oluşturur XYZ.
let printToFile2 obj (file1 : System.IO.StreamWriter) =
file1.WriteLine(obj.ToString())
using (System.IO.File.CreateText("test.txt")) (printToFile2 "XYZ")
using İşlevi ve use bağlama aynı şeyi yapmanın neredeyse eşdeğer yolları şunlardır. using Anahtar ne zaman üzerinde daha fazla denetim sağlar Dispose olarak adlandırılır. Kullandığınızda using, Dispose işlevi veya lambda ifadesi; sonunda verilir kullandığınızda use anahtar sözcüğü, Dispose içeren kod bloğunun sonuna denir. Genel olarak, kullanmayı tercih ettiğiniz use yerine using işlevi.