1

using次のコードでキーワードまたはdisposeメソッドを使用する必要があります(ストリームを開いているため)。

 class Program
    {
        static void Main(string[] args)
        {
            var x = Deserialize<Dog>(new FileStream(@"C:\Documents and Settings\name\Desktop\demo.xml", FileMode.Open));
         }

        static T Deserialize<T>(Stream s)
        {
            XmlSerializer ser = new XmlSerializer(typeof(T));
            return (T)ser.Deserialize(s);
        }
    }

そうでない場合は、その理由を説明してください(新しいFileStreamはストリームを自動的に破棄/閉じますか)。

4

5 に答える 5

8

使用する必要がありますusing

using(var stream = new FileStream(@"C:\path\demo.xml", FileMode.Open))
{
    var x = Deserialize<Dog>(stream);
    // more code ...
}
于 2012-10-12T08:39:26.587 に答える
3

はい、ストリームを破棄する必要があります。たとえば、 File.ReadAllText()を使用する場合、この静的メソッドはストリームを開いて破棄します。を使用することをお勧めします。これは、例外も処理するためです。たとえば、このうなずく例では:

このバージョンは、FileStreamを正しく破棄します。

using(FileStream fs = FileStream(path, FileMode.Open))
{
   throw new Exception();
}

この例では、FileStreamによって使用されるリソースがリークされます。try/ catchブロックを追加できますが、読みにくくなります。

FileStream fs = new FileStream(path, FileMode.Open);
throw new Exception();
fs.Dispose();
于 2012-10-12T08:38:52.510 に答える
2

あなたが使用する場合using block、彼は治療の終わりに実行しDispose methodます。

を使用して使用します。なぜならFileStream is non managed objectGarbage collector don't have informatiosn abouts this objectをクリーンアップするために、開発者はGCを支援するためにリソースをクリーンアップする必要があるからです。

リンク: http: //msdn.microsoft.com/fr-fr/library/yh598w02 (v = vs.80).aspx

于 2012-10-12T08:39:08.220 に答える
2

IDisposableを実装するすべてのものでUseingを使用する必要があります:)

于 2012-10-12T08:41:27.010 に答える
1

すでに述べたように、を使用する必要があります。しかし、なぜ?さて、すでに述べたように、IDisposableを実装するすべてのオブジェクトにusingを使用する必要があります。

あなたの場合、FileStreamはIDisposableを実装しているStreamオブジェクトから継承します。FileStreamの詳細については、msdnを参照してください。

于 2012-10-12T08:59:25.947 に答える