Kaynak Yönetimi: use Anahtar Sözcüğü

Bu konuda anahtar sözcüğü ve use kaynakların using başlatı ve yayınını kontrol altına alan işlevi açıklanmıştır.

Kaynaklar

Kaynak terimi birden fazla şekilde kullanılır. Evet, kaynaklar dizeler, grafikler ve benzerleri gibi bir uygulamanın kullandığı veriler olabilir, ancak bu bağlamda kaynaklar grafik cihazı bağlamları, dosya tanıtıcıları, ağ ve veritabanı bağlantıları, bekleme tanıtıcıları gibi eşzamanlılık nesneleri gibi yazılım veya işletim sistemi kaynaklarına başvurur. Bu kaynakların uygulamalar tarafından kullanımı, kaynağın işletim sisteminden veya başka bir kaynak sağlayıcısından alınmasından ve ardından kaynağın başka bir uygulamaya sağlanmalıdır. Uygulamalar kaynakları ortak havuza geri serbest bırakmazsa sorunlar oluşur.

Kaynakları Yönetme

Bir uygulamanın kaynaklarını verimli ve sorumlu bir şekilde yönetmek için kaynakları hemen ve öngörülebilir bir şekilde serbest bırakmanız gerekir. Bu .NET Framework arabirimini sağlayarak bu işlem size yardımcı System.IDisposable olur. Uygulayan bir System.IDisposable tür, kaynakları System.IDisposable.Dispose doğru bir şekilde serbest bırakan yöntemine sahip olur. İyi yazılmış uygulamalar, sınırlı System.IDisposable.Dispose bir kaynağı tutan herhangi bir nesne artık gerekli olmadığı zaman hemen çağrılma garantisi sunar. Neyse ki çoğu .NET dili bunu kolaylaştırmak için destek sağlar ve F# özel durum değildir. dispose desenini destekleyen iki yararlı dil yapısı vardır: use bağlama ve using işlev.

Bağlama kullanma

anahtar use sözcüğü, bağlamaya benzer bir let biçime sahip:

değer ifadesi = kullanma

Bağlamayla aynı işlevselliği sağlar, ancak değer kapsam dışında olduğunda let Dispose değerine bir çağrısı ekler. Derleyicinin değerine null denetimi ekleylediğine dikkat edin; böylece değeri ise çağrısı null Dispose denenir.

Aşağıdaki örnek anahtar sözcüğünü kullanarak bir dosyanın otomatik olarak nasıl kapatılır? 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."

Not

Hesaplama use ifadelerinde kullanabilirsiniz; bu durumda ifadenin özelleştirilmiş use bir sürümü kullanılır. Daha fazla bilgi için bkz. Diziler, Zaman uyumsuz ifadeler, Görev ifadelerive Hesaplama İfadeleri.

using İşlevi

İşlev using aşağıdaki biçime sahiptir:

using (ifade1) function-or-lambda

İfadede using expression1, atılması gereken nesneyi oluşturur. ifadesi1'in sonucu (atılması gereken nesne) bağımsız değişken, değer , işlev veya lambda olur. Bu işlev, ifade1 tarafından üretilen değerle eşleşen bir türün tek bir kalan bağımsız değişkeni ya da bu türün bağımsız değişken bekler bir lambda ifadesi bekler. İşlevin yürütülmesinin sonunda, çalışma zamanı kaynakları arar ve serbest bıraktır (değer değilse, bu durumda Dispose çağrısı Dispose null denenir).

Aşağıdaki örnek, using lambda ifadesi ile ifadeyi gösteriyor.

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."

Sonraki örnekte, bir using işleve sahip ifadeyi gösterir.

let printToFile (file1 : System.IO.StreamWriter) =
    file1.WriteLine("Test output");

using (System.IO.File.CreateText("test.txt")) printToFile

İşlevin, bazı bağımsız değişkenlerin zaten uygulanmış olduğu bir işlev olduğunu unutmayın. Aşağıdaki kod örneği bunu gösteriyor. dizesini içeren bir dosya XYZ oluşturur.

let printToFile2 obj (file1 : System.IO.StreamWriter) =
    file1.WriteLine(obj.ToString())

using (System.IO.File.CreateText("test.txt")) (printToFile2 "XYZ")

İşlev using ve use bağlama, aynı şeyi gerçekleştirmenin neredeyse eşdeğer yollarıdır. anahtar using sözcüğü, çağrılma zamanları üzerinde daha Dispose fazla denetim sağlar. işlevini kullanırken, işlevin veya lambda ifadesinin sonunda çağrılır; anahtar sözcüğünü kullanırken, içeren kod bloğunun using Dispose sonunda use Dispose çağrılır. Genel olarak işlevi yerine kullanmayı use tercih using edersiniz.

Ayrıca bkz.