Close unmanaged resources in F#
April 22, 2017 Leave a comment
There are some object types in .NET that represent so-called unmanaged resources. These resources cannot be automatically disposed of by the garbage collector. It is up to the programmer to close them in code otherwise they can remain open unintentionally. Typical examples include streams, such as a file stream, or network connections of some sort such as database or HTTP connections. The programmer should never forget to close these resources after using them.
C# has the using block for resources that implement the IDisposable interface. A using block makes the programmer’s job easier so that they don’t need to call the Close method actively. It will be called automatically at the end of the using block where the unmanaged resource goes out of scope.
F# has a similar construct called “use”. Let’s see an example with the MemoryStream object:
let basicResourceClosingExample () = use memoryStream = new System.IO.MemoryStream() let content = memoryStream.ToArray() content
As soon as the memoryStream variable goes out of scope it will be disposed of.
View all F# related articles here.