

現在、C＃で作成されたアプリケーションでSQL文を実行した後、画面表示をおこなう連続試験を行っています。  
上記の連続試験を約3〜4時間ほど行うと画面の表示に約5秒かかります。（連続試験前は1秒未満）  
また、連続試験の試験時間を長くするとそれに比例して画面の表示時間も長くなっています。

画面の表示はWindowsFormの「Form.ShowDialog」メソッドにて行っており、左記の処理を追っていくと.NetFrameworkの提供する「FocusActiveControllInternal」メソッドで遅延が発生するところまでは確認が出来ました。  
ただ、「FocusActiveControllInternal」メソッドからはソースコードから追うことができず原因究明ができない状況です。

恐れ入りますが、上記の内容から考えられる原因や調査方法などをご教授いただけますと幸いです。


CC BY-SA 4.0
2020-11-12T11:08:22.780
71893
2020-11-13T02:15:50.373
42704
question
c#
「Form.ShowDialog」メソッドにて画面の表示が遅くなる


話を聞く限り典型的リソースリーク（によってハードフォールトが増えている）症状に思えます。 SQL
文ってことはデータベースへの接続がある＝アンマネージリソースがあるってことで、その辺のアンマネージリソースの `Dispose()`
が漏れているのではないかと疑います。 `Dispose()` 漏れは適切に `using` することで防げますので

  0. 実行時間とともにリソース量が増えているか否かをチェック（増えていたらリーク）

リークしていることが確認できたならソースチェック

  1. `using` を必要とするところで正しく使っているか
  2. `using` だと機能が不足するところでは `try` / `catch` / `finally` が適切に使われているか
  3. 適切＝握り潰しちゃうのは論外

あたりから調査を始めるでしょうね、オイラなら。

* * *

Microsoft .NET Framework のソースが見たいのなら <https://referencesource.microsoft.com/>
にて公開されていますので site 指定でググれば簡単にヒットします。

`FocusActiveControllInternal()` は  
<https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/ContainerControl.cs>


CC BY-SA 4.0
2020-11-13T02:15:50.373
71910
2020-11-13T02:15:50.373
8589
71893
answer