2009-04-19 21 views
0

私はSerialPortクラスで非常に大きな問題を抱えており、これを解決するにはいくつかの助けが必要です。.NET 2.0/3.5のSerialPortメモリリーク

複数のデバイスに接続する必要があるため、複数のシリアルポートを汎用リストに使用しています。

これは、デバイス(私たちの場合は、携帯電話)のいずれかがオフになっている場合は、そのケーブルがある場合は、ボタンがクリックされた後、私たちの基本的なコードは、

List<SerialPort> ports = new List<SerialPort>(); 
private void button1_Click(object sender, EventArgs e) 
{ 
    ports.Add(new SerialPort("COM6")); 
    ports.Add(new SerialPort("COM7")); 
    ports.Add(new SerialPort("COM8")); 
    foreach (SerialPort port in ports) 
    { 
     port.Open(); 
    } 
} 

...のように見えるものですUSBポートから切り離された場合、すぐに大量のメモリリークが発生します。

ご協力ください。

私は同じようなスレッドhereと、Microsoft Connectのいくつかのバグレポートに気付きました。 しかし、今は即時緊急の解決策が必要です...誰かが助けてくれたら本当に感謝します。 ありがとうございます。

+0

btw、そのリンクはexpert-exchange(Microsoft Connectではなく)にあり、動作しないようです。面白いことに、言葉の間にダッシュがなければ、それは "専門家の交換"とは異なる方法であるが完全に有効なサイトである "専門的な性転換"と読むことができる。面白すぎる。 –

+0

すぐに緊急のソリューションが必要な場合は、StackOverflowと同様に、Microsoftサポートに電話してチケットを開く必要があります。 –

答えて

2

問題がSerialPortで、USBシリアルデバイス用のドライバではないことを確認してください。問題のデバイス

  • チェック、メモリ使用量
  • C#で問題になるのと同じ方法で切断し
  • チェックメモリにhyperterm
  • 接続まで

    1. スタート:私はこの問題を検証するために、別のテストをしようとするだろう使用法と比較

    もし起こらなければ、特にSerialPortにバグがあります。もう一度やり直したら、少なくともSerialPortの実装とは関係ないことを知っているでしょう。問題は、ウィンドウのCOMポートコードまたは使用しているドライバのいずれかにある可能性があります。個人的には、ドライバに問題がある可能性がありますが、私はWindowのシリアルポートに関するいくつかの未知の問題があるかどうかを知りたいです。

    私はこのような問題を起こさずにポートを接続/切断する際に、以前にSerialPortを使用しました。

    CLRのコードをデバッグすることもできます。このtopicには他にもたくさんの質問がありますので、その方法を見つけるのは簡単です。これは少し遅れてデバッグして、Open()のどの時点でメモリリークが発生しているかを正確に確認できるはずです。しかし、それはシステムのシリアルポートへの「シンプルな」ラッパーなので、P/Invokeの世界に行き、おそらくそれほど多く見ることはできません。

  • +0

    ああ、デザインにコメントするには、on_clickはコードを実行すべきではありません。オープニングを行うメソッドを呼び出す必要があります(UIコードに属さないようにその機能を除外します)。 –

    1

    この問題はわかりませんが、SerialPortオブジェクトを正しく処分していますか?各インスタンスの処理が終了するとすぐにDisposeメソッドに呼び出す必要があります。

    +0

    'Dispose()'はリソースの*明示的即時*解放を可能にするだけです。アンマネージリソースを使用するすべてのクラスは、オブジェクトが明示的に処理されずに範囲外になる場合にファイナライザも実装します。あなたが望むならセーフティネット。 –

    +0

    はい、GCはもちろん、クラスによって使用される管理されていないリソースを処分することになりますが、特にオブジェクトがグローバルスコープにある場合は、しばらくの間は発生しない可能性があります。これは簡単にメモリリークを引き起こす可能性があります。 – Noldorin

    関連する問題