none
ウィンドウの切り替えで応答なしになる RRS feed

  • 質問

  • Visual Studio 2010 Express C#でアプリを作成し、実行しています。

    PCをWindows 7 32bit環境からWindows 7 64bit環境にリプレースしたときにプロジェクト一式を復元(単にコピー)し、再度ビルドを行ってアプリを動作させると、事ある毎に「応答なし」になります。

    特に重い処理を回しているわけでもない状態でアクティブウィンドウを自分のアプリに切り替えるだけでも「応答なし」になり、何が悪いのか見当がつきません。

    32bit環境では特に問題なく動作していました。

    解決するためのヒントをいただけないでしょうか。

    よろしくお願い致します。

    2015年9月18日 1:17

回答

  • こんにちは。

    Windows7 32bitから64bitにコピーしたプロジェクトは簡単なテストプロジェクトでも、上記の現象になりますか?
    また、そのプロジェクトは質問者さん以外の端末へコピーしてビルドさせても同じ現象になりますか?

    プロジェクトに問題があるのか、質問者さんの環境に問題があるのか、まずはそこの切り分けからではないでしょうか。

    • 回答としてマーク 星 睦美 2015年9月29日 1:14
    2015年9月18日 1:23
    モデレータ
  • 最初の質問にあった、

    > PCをWindows 7 32bit環境からWindows 7 64bit環境にリプレースしたときにプロジェクト一式
    > を復元(単にコピー)し、再度ビルドを行ってアプリを動作させると、事ある毎に「応答なし」
    > になります。

    と、質問者さんの直近のレスにあった、

    > 32bitマシン時に作成してそのままだった簡単なプロジェクトがあったので、それを64bitマシ
    > ンでビルドしてみました。結果、「応答なし」にはなりませんでした。

    はプロジェクトが違うだけでやっていることは同じなのですよね。ということは、最初の質問にあった「プロジェクト一式」と直近のレスにあった「簡単なプロジェクト」の差分に問題の原因があるということに間違いないのでは?

    とするとその差分が分かるのは質問者さんだけですが・・・心当たりはないですか?

    VS2010 というと、たぶんデフォルトでプラットフォームターゲットは x86 になっていると思います。単なる思い付きですが、使っている .dll が x64 でビルドされてるとか言うことはないですか?

    32-bit / 64-bit の話は以下の記事が参考になると思います。一度目を通してから原因を考えてみると解決の道が見つかるかもしれません。

    Part 1. 64 ビット Windows OS の基本知識
    http://blogs.msdn.com/b/nakama/archive/2008/10/30/part-1-64-windows-os.aspx

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspx

    そんなことは承知していると言うことでしたら失礼しました。


    • 編集済み SurferOnWww 2015年9月18日 3:25 脱字訂正
    • 回答としてマーク 星 睦美 2015年9月29日 1:14
    2015年9月18日 3:22
  • そもそもウィンドウをアクティブにしただけで応答なしになる理由が皆目見当がつかないので、何かヒントのようなものがもらえればと思い投稿しました。

    よくある事例として唯一と言える解があるとは限らないのが、開発の世界です。
    症状だけで原因を特定できないことの方が多いです。

    ウィンドウが応答なしになる理由の大半は、メッセージループが回らないことです。
    「ウィンドウをアクティブにしただけで、なぜメッセージループが回らないか?」は、一般解と言えるものがありません。
    一般のプログラマーの思いもよらないいびつな実装になっていたり、常駐ソフトが悪さしていたり、ドライバーが悪かったりといろいろと予想の幅が広がり、下手に助言してしまうと時間を無駄にさせたり、スレッドが発散したりするという状況なのです…。ご理解ください。


    一番良いのは、応答なしになっている、まさにその瞬間のダンプをとる、あるいはデバッグで止めて実行しているコードが何か知ることです。
    ただし、前者のダンプ解析はそこそこテクニックがいるので、説明は難しいです。後者を考えてもらった方が良いと思い、先の助言に至りました。
    2015年9月19日 10:37
    モデレータ

すべての返信

  • こんにちは。

    Windows7 32bitから64bitにコピーしたプロジェクトは簡単なテストプロジェクトでも、上記の現象になりますか?
    また、そのプロジェクトは質問者さん以外の端末へコピーしてビルドさせても同じ現象になりますか?

    プロジェクトに問題があるのか、質問者さんの環境に問題があるのか、まずはそこの切り分けからではないでしょうか。

    • 回答としてマーク 星 睦美 2015年9月29日 1:14
    2015年9月18日 1:23
    モデレータ
  • ご返信ありがとうございます。

    32bitマシンはリプレース後に廃棄してしまいましたので、今すぐ簡単なプロジェクトを一から作れないのですが、32bitマシン時に作成してそのままだった簡単なプロジェクトがあったので、それを64bitマシンでビルドしてみました。

    結果、「応答なし」にはなりませんでした。

    別の端末でのビルドですが、使用中のもの以外に端末がないのですぐには確認できそうにありません。

    取り急ぎ、御礼とご回答まで。

    よろしくお願い致します。

    2015年9月18日 2:51
  • 最初の質問にあった、

    > PCをWindows 7 32bit環境からWindows 7 64bit環境にリプレースしたときにプロジェクト一式
    > を復元(単にコピー)し、再度ビルドを行ってアプリを動作させると、事ある毎に「応答なし」
    > になります。

    と、質問者さんの直近のレスにあった、

    > 32bitマシン時に作成してそのままだった簡単なプロジェクトがあったので、それを64bitマシ
    > ンでビルドしてみました。結果、「応答なし」にはなりませんでした。

    はプロジェクトが違うだけでやっていることは同じなのですよね。ということは、最初の質問にあった「プロジェクト一式」と直近のレスにあった「簡単なプロジェクト」の差分に問題の原因があるということに間違いないのでは?

    とするとその差分が分かるのは質問者さんだけですが・・・心当たりはないですか?

    VS2010 というと、たぶんデフォルトでプラットフォームターゲットは x86 になっていると思います。単なる思い付きですが、使っている .dll が x64 でビルドされてるとか言うことはないですか?

    32-bit / 64-bit の話は以下の記事が参考になると思います。一度目を通してから原因を考えてみると解決の道が見つかるかもしれません。

    Part 1. 64 ビット Windows OS の基本知識
    http://blogs.msdn.com/b/nakama/archive/2008/10/30/part-1-64-windows-os.aspx

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspx

    そんなことは承知していると言うことでしたら失礼しました。


    • 編集済み SurferOnWww 2015年9月18日 3:25 脱字訂正
    • 回答としてマーク 星 睦美 2015年9月29日 1:14
    2015年9月18日 3:22
  • SurferOnWwwさんが仰っているとおり、まずターゲットプロットフォームについて確認されるのが良いと思います。

    他に思いつくところだと同一クライアント内にインストールする必要がある、外部システムやライブラリと連携を行っていませんか。
    その辺りのリプレイスにおける環境面の差も疑って見てください。

    2015年9月18日 6:17
    モデレータ
  • SurferOnWwwさん、Tak1waさんご返信ありがとうございます。

    まず症状を正確に伝えていないような気がしましたので、そこから修正させて下さい。

    自作アプリをアクティブウィンドウにするためにクリックすると、「応答なし」になり、しばらくするとそれが解除されて動き出します。(完全な応答なしではなく、一時的な応答なしです)

    ライブラリは「参照設定」のところのものを見れば良いのでしょうか。最初から組み込まれている基本的なものの他に、Office 2013のdllを参照しています。

    ただ、最初から組み込まれている参照のパスが「\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll」となっていて、これはx86版を参照してしまっている状態なのでしょうか。。。?(.NETのdllはきっとx86,x64のどちらにも対応してくれていると思っているのですが)

    ターゲットプラットフォームについては紹介いただいたURLほど理解はしていませんでしたが、ビルドはAny CPUで行っていました。ので、適切なコードが選択されているのでは、と思っています。

    まずは環境について調べてみたいと思います。
    2015年9月18日 9:40
  • 先の私のレスに書いた、

    > 最初の質問にあった「プロジェクト一式」と直近のレスにあった「簡単なプロジェクト」の
    > 差分に問題の原因があるということに間違いないのでは?

    というところはどうなんでしょう?

    そこがまず第一に明らかにすべきところで、それができるのは質問者さんしかいないと思うのですが・・・

    2015年9月18日 9:48
  • > 最初の質問にあった「プロジェクト一式」と直近のレスにあった「簡単なプロジェクト」の
    > 差分に問題の原因があるということに間違いないのでは?

    これに関しては、プログラムの規模が全く異なり、差分があり過ぎる状態なのです。

    「簡単なプロジェクト」は本当にウィンドウを1枚表示してリストビューにファイルの中身を表示するだけのテスト的なもので、いま解決したい自作アプリのプロジェクトはその数十倍のコード量になります。

    環境の他にもコードの内容も含めて調べてみたいと思います。

    2015年9月18日 12:12
  • どんなアプリなのかまったくわからないのでコメントしづらいですね。
    基本的ところで言えば、すでに挙がっている x64, x86, Any CPU のどれになるのかとか、Windows Forms なのか WPF なのかとか。
    (質問が抽象的なので、切り分けポイントも出しづらく、かといって質問側からして特定のための情報を出しづらく…なので、現物を詳しい人に見てもらうのが一番近道ではあります)

    起きる環境に Visual Studio が入っているのであれば、デバッグ実行しても再現するかどうか、デバッグ実行で再現するのなら、応答がないときにデバッグ - すべて中断と選んだときにどこを実行しているかというところから見ていく感じですかね。

    2015年9月18日 14:18
    モデレータ
  • > これに関しては、プログラムの規模が全く異なり、差分があり過ぎる状態なのです。

    どんなに差があろうと、その差分の中にあるであろう問題を探せるのは質問者さんだけですよ。

    回答者・閲覧者は掲示板に書いてあること以外は何も知り得ません。当然その差分は何だか全く分かりませんし、その中にあるであろう原因を見つけることは不可能です。

    もう少し質問者さんのほうで切り分けしていただけませんか。そうしていただかないことには、少なくとも自分はお役にたてないと思います。

    2015年9月18日 14:52
  • そうですね、どういうアプリなのかを説明するのも難しいものがあります。特定の部分であれば切り出してもいいのですが、そもそもウィンドウをアクティブにしただけで応答なしになる理由が皆目見当がつかないので、何かヒントのようなものがもらえればと思い投稿しました。デバッグ環境でも発生するかは試してみたいと思います。
    2015年9月19日 10:23
  • ご助言ありがとうございます。差分を調べる必要性は理解しています。まずは現象に対して、過去事例があれば、そういうところから差分を追っていければと思いました。環境を変えたり、コードを削ったりして、影響がありそうなところを探してみます。
    2015年9月19日 10:32
  • そもそもウィンドウをアクティブにしただけで応答なしになる理由が皆目見当がつかないので、何かヒントのようなものがもらえればと思い投稿しました。

    よくある事例として唯一と言える解があるとは限らないのが、開発の世界です。
    症状だけで原因を特定できないことの方が多いです。

    ウィンドウが応答なしになる理由の大半は、メッセージループが回らないことです。
    「ウィンドウをアクティブにしただけで、なぜメッセージループが回らないか?」は、一般解と言えるものがありません。
    一般のプログラマーの思いもよらないいびつな実装になっていたり、常駐ソフトが悪さしていたり、ドライバーが悪かったりといろいろと予想の幅が広がり、下手に助言してしまうと時間を無駄にさせたり、スレッドが発散したりするという状況なのです…。ご理解ください。


    一番良いのは、応答なしになっている、まさにその瞬間のダンプをとる、あるいはデバッグで止めて実行しているコードが何か知ることです。
    ただし、前者のダンプ解析はそこそこテクニックがいるので、説明は難しいです。後者を考えてもらった方が良いと思い、先の助言に至りました。
    2015年9月19日 10:37
    モデレータ
  • > まずは現象に対して、過去事例があれば、

    そういうことですと自分には分からないです。

    お役に立てずすみませんが、他の方の回答をお待ちください。

    2015年9月21日 1:03
  • みなさま、貴重なお時間をいただきありがとうございます。地道に調べてみることにします。
    2015年9月21日 13:15