🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

1回答

5634閲覧

TextBoxでAppendTextを行うとフリーズする

testset

総合スコア223

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2020/01/02 15:40

編集2020/01/02 15:44

TextBoxに対してAppendTextをコールすると不特定のタイミングでフリーズが発生しますが、原因がわかりません。

環境

  • Windows 10 pro 1903
  • Windows Forms
  • .NET Framework 4.6.1
  • C#

現象の詳細

シリアル通信(baud115200,8bit,2stop-bits,no-parity)で受信した文字列(ASCII,CRLF)をそのままTextBoxへ出力している。
受信処理(Serial)はUIとは別スレッドで行っている。

発生時は受信文字列が多いときに発生する。
プロファイラを用いて確認したところ、
発生時はAppendTextでメモリーリークが発生しており、1.8G程度消費してフリーズ状態となった。

備考

com0com等の仮想シリアルポートでは発生を確認できない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

質問を書いているときに同様の現象を見つけました。

原因と考えられる現象

Windows 10 1809以降の不具合で、CR(\r)で終わる文字列を出力したときにメモリリークが発生する。

Windows 10.0.17763 (1809) TextBox.Text set Memory Leak (英語)

Refactoring the code to not split the \r\n pair up immediately fixed the issue.

解決策1

受信文字列を改行コードで受信待機させる(ReadLineメソッド等)

解決策2

受信文字列をTextBoxへ出力する際、確実にCRLF(\r\n)となるようにする

投稿2020/01/02 15:53

testset

総合スコア223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/01/02 23:25

メモリリークでフリーズしますか? 理屈だけでなく本当に解決したことを確認しましたか?
testset

2020/01/23 17:06

(UIスレッド上で動作させなくてはならない)AppendTextが戻ってこないので、フリーズします。(1G~1.6GのメモリをAppendTextメソッド呼び出し中に消費し、メソッドを抜けても解放されません) 要件として、一定時間以内に処理を終わらせないといけないため、1分程度フリーズするのは困ります。 CRで終端するとき、CRを排除するという処理(`str.TrimEnd('\r')`)をの追加後で、不具合が解消することを確認できました。 この現象は大量のログが出力される状態で、RS232C通信をしている状態で頻発します。 なお、コード等を開示はできないので上記報告のみとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問