この投稿には、共通のリソースをクリーンアップしている2つの相互関連の質問が含まれています。私はSO postと、管理対象リソースとアンマネージドリソースを判別しようとしているMicrosoftのサイトの他のいくつかと一緒に読んでいます。私が読んだことに基づいて、以下のコードブロックは.Net管理リソースを使用します。これはDLL以外のF#ライブラリからのものです。[<AutoOpen>]の逆数はありますか?
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>]
にそこは逆であり、1があるように必要なのですか?これは、図書館が[<AutoOpen>]
で作成されたすべてのリソースを解放することを許可する指令です。
csvFileH
の前後にこのコードをusing
に再構成することができます。このハンドルは、.csvファイルの読み取りにのみ必要であるためです。しかし、List<string[]> csvData
型が返された場合、それはアプリケーションがシャットダウンしたときにガベージ処理される管理対象リソースと見なされます。
あなたは明確にどのような '[]'手段を誤解。 –