この投稿には、リソースのクリーンアップに共通する相互に関連する 2 つの質問が含まれています。私はこの SO の投稿を読み、Microsoft のサイトで管理されているリソースと管理されていないリソースを判断しようとしている他のいくつかの投稿と一緒に読みました。私が読んだことに基づいて、次のコード ブロックは .Net マネージ リソースを使用します。これは非 DLL F# ライブラリからのものです。
namespace Toa.csv_lib
open System
open System.Threading
open System.Collections.Generic
open System.Linq
open System.Text
open System.Threading.Tasks
open System.IO
open Microsoft.VisualBasic.FileIO
[<AutoOpen>]
module csv_lib =
let initCsvLib fn delim =
let csvFileH = new TextFieldParser(fn:string)
csvFileH.TextFieldType = FieldType.Delimited |> ignore
csvFileH.SetDelimiters(delim) |> ignore
csvFileH
let readCsvLibLine csvFileH =
(csvFileH:TextFieldParser).ReadFields()
let retCsvData csvFileH =
let csvData = new List<string[]>()
if not (csvFileH:TextFieldParser).EndOfData then
let column_headings = readCsvLibLine csvFileH
csvData.Add(column_headings) |> ignore
let read_rest_of_csv() =
csvData.Add(readCsvLibLine csvFileH) |> ignore
not (csvFileH:TextFieldParser).EndOfData
while read_rest_of_csv() do ignore None
csvData // Last expression is returned.
csvFileH
私は管理されたリソースであると信じていcsvData
ますが、その逆があるのでは[<AutoOpen>]
ないかと考えていました。これは、ライブラリが で作成されたすべてのリソースを解放できるようにするディレクティブです[<AutoOpen>]
。
.csv ファイルを読み取るためだけに必要なハンドルであるため、このコードを.csvusing
の周りに再構築することができます。csvFileH
ただし、List<string[]> csvData
返された型は、アプリケーションのシャットダウン時にガベージ処理される管理対象リソースと見なされます。