0

60 KLOC の Windows VB.NET アプリケーションを VS 2012 および Windows 8 にアップグレードしました。昨日 ClickOnce にデプロイしたときを除いて、すべて問題ないように見えました。

フォームがバインドを使用している場合、ClickOnce アプリケーションは、フォームが最初に起動されたときにすべてのフォームを読み込むのが非常に遅くなります。フォームがバインドを使用していない場合 (ただし、DB クエリからデータを選択している場合) は、通常どおりロードされます。

最も面白い部分は、VS2012 でのデバッグ中に 1 秒未満でロードされることです。ClickOnce バージョンから起動すると、読み込みに 60 秒以上かかります。

ClickOnce アプリケーションでこれらのフォームの 1 つを閉じて再度開くと、通常は 1 秒未満で読み込まれます。

VS2012 でのバインドは、フォームが初めて読み込まれたときに非常に悪いようですが、私は何か間違ったことをしていると思います。

この問題についてのアイデアはありますか?

編集 2013/01/18:

不要なコードを 1 日削減した後、低速を再現し、不要なコードがないソリューションにたどり着きました。これにより、適切に機能していないものを見つけやすくなります (希望)。

ClickOnce アプリケーションは次のとおりです。

http://www.octet.it/Reproduce/

ソースファイルは次のとおりです。

http://www.octet.it/Reproduce/Reproduce.zip

遅さは次のものに依存していないと言えます。

  1. SQL Server (SQL サーバー DB にアクセスしていたすべてのコードをカットしました)。
  2. バインディング(現在、バインディングはまったくありません)。
  3. 開発環境: VS2012 からアプリケーションを実行すると、期待どおりに動作します。

遅さを再現するための指示:

  • ClickOnce アプリケーションを Windows 8 マシンにインストールします (私のマシンは x64 で、テストする x86 はありませんでした)。
  • タスクマネージャーを起動します。
  • 「再生」アプリケーションを起動します。
  • MDI フォームが読み込まれたら、[Return] キーを押します (これにより、MDIChild フォームが起動されます)。
  • タスク マネージャーを見て、「再現」アプリがマシンの CPU の 1 つを飽和状態にし、約 650 MB の RAM を占有する様子を確認してください。
  • 約 45 ~ 60 秒後、MDIChild フォームが表示されます。
  • MDIChild フォームを閉じます。
  • [Return] をもう一度押すと、MDIChild がほぼ瞬時に表示され、タスク マネージャーに CPU の飽和や RAM の増加が表示されないことがわかります。

私が言ったように、Win 8 より前の MDIChild (さまざまなテーブルへのバインディングと SQL アクセスを含む) は約 2 ~ 3 秒で表示されました。

ソース ファイルはあまり興味深いものではありません。MDIChild フォームを呼び出す MDIparent フォームが表示されるだけですが、実験を行いたい場合は、それらを .ZIP ファイルに含めました。

お時間をいただきありがとうございます。

この問題を解決するために何ができるか教えてください。どんな提案でも大歓迎です。

4

1 に答える 1

0

どのようにアプリケーションをコンパイルしていますか? 混合プラットフォームをターゲットにしていますか? x86 をターゲットにしてみてください。コンパイル時にx86をターゲットにすることで解決された同様の問題がありました。アプリケーションにクレイジーなx64依存関係がない限り、x64ボックスで正常に動作するはずです。これにより clickonce マニフェストが変更されることに注意してください。これは頭痛の種ですが、これで問題が解決するかどうか知りたいです。

于 2013-06-14T03:39:53.590 に答える