web-dev-qa-db-ja.com

ブレースマッチングと参照ハイライトが突然機能しなくなる(VS2013)

Visual Studio 2013のブレースマッチング、参照の強調表示、変数の自動検出/、メソッド名の変更(代わりにリファクタリングを使用する必要があります)など...は機能を停止し、VSの再起動後にのみ再び機能します。私はC#でコードを書いています。

この問題で苦しんでいる/影響を受けているのは私だけですか?

非常に厄介なVS2013の問題!!大規模なプロジェクトでのみ発生します。

更新1:VSDesignerでWinFormを開いた直後に発生することに気付きました。コード編集に戻ると、中括弧のマッチングなどがなくなり、VSを再起動する必要があります。

アップデート2:Visual Studio 2013アップデート4それでも...修正なし!!こんにちはマイクロソフト?

更新3:私のソリューションには投票数が少ないため、ここで要約します。私の場合、問題はThread.SleepがVS Designerによって呼び出されたでした。これはコードエラーでしたが、とにかく、DesignerはVS全体をフリーズするThread.Sleepコマンドを実行しないでください。

25
Pedro77

[〜#〜]最終的に[〜#〜]バグを見つけました!!

まあ、それはあなたがVS IDEをハックしてそれをスリープ状態にする(LOL)ことができるという継ぎ目です、副作用は私が経験した問題です、例えばブレースマッチングがもう機能しません。

それを再現する方法:

  1. WinFormプロジェクトを作成する
  2. コントロールを作成する
  3. コントロールに以下のコードを追加します
  4. 再構築
  5. DesignerでForm1を開きます

Thread.Sleepが動作していることに気付くでしょう!さて、コード編集に戻り、ブレースマッチングを行うと、すべてがなくなります。それを修正する唯一の方法は、VSを再起動することです。

バグを再現するコード:

public UserControl1()
{
    InitializeComponent();
    Application.Idle += Application_Idle;
}

void Application_Idle(object sender, EventArgs e)
{
    Thread.Sleep(200); //Yeah VS IDE will sleep for 200 ms ! LOL!
}

VS Designer 無視する必要があります Thread.Sleepコマンドだと思いますね。

ここで、次の呼び出しを行って作業を行う前に、コードがVSDesigner内で実行されているかどうかを確認します。

    // Return if is inside VS Designer !
    if (System.Reflection.Assembly.GetEntryAssembly() == null)
        return;

また、このコードをForm1内に追加しようとしましたが、VSがスリープを無視していることがわかります。

5
Pedro77

修正が到着するまで、コードレンズを無効にするを試してください。
tools->options->text editor -> all languages ->code lens

または、ALM共有リモーティングタスクを強制終了します。 CPUが非常に高い場合。

19
phil soady

これはVisualStudioのバグであり、残念ながらMicrosoftがVisual Studio 2015まで修正しないことを決定したものです Connectのこのチケット

より深い改善を行う計画がありますが、.NETコンパイラプラットフォームの存在を利用するため、VisualStudioの次のメジャーリリースまでは改善されません。この問題をクローズしている間、VisualStudioの次のリリースで修正する作業が計画されていることに注意してください。

それでも、CodeLensを再び使用できるように、この問題を十分に軽減することができました(個人的には、#3および#4を使用します)。

  1. ツール>オプション...>テキストエディタ>すべての言語>CodeLensそして気になる統計のみがチェックされていることを確認してください。チェックするものが少ないほど、CodeLensは高速になります。
  2. ソース管理プラグインをなしに変更します。これで問題は完全に解決しますが、CodeLensが提供する作成者/変更履歴情報が失われることを意味します。
  3. ソリューションをロードした後、管理者としてタスクマネージャーを開き、Microsoft.Alm.Shared.Remoting.RemoteContainer.dllプロセス(複数ある場合があります)を右クリックし、優先度に設定します。通常以下または(Visual Studioを開くたびにこれを行う必要があります)
  4. CPUに複数のコアがある場合は、ソリューションをロードした後、管理者としてタスクマネージャーを開き、Microsoft.Alm.Shared.Remoting.RemoteContainer.dllプロセス(複数ある場合があります)を右クリックして、設定をクリックします。アフィニティそして1つ以上のコアのチェックを外します。 (Visual Studioを開くたびにこれを行う必要があります)

#2のみが問題を完全に解決できることがわかりましたが、#3は、プロセスが利用可能なリソースを飽和させることによって引き起こされるフリーズを停止するのに十分なはずです。処理が完了するまでCPU使用率が高い。マイレージは#4によって異なる場合があります。

18
David Schwartz

私もこの問題に悩まされていたので、この投稿に出くわしました。MicrosoftConnectで報告された このバグ に関連しているようです。

残念ながら、良い回避策はないようで、Microsoftは、Visual Studioの将来のバージョンで(かどうかにかかわらず)対処すると述べました。それは新しいバージョンまたはアップデートを意味します、私は知りません)。

ユーザーのChrisBjugstadが、バグレポートページに次のような提案を投稿しました。

Sysinternals procmonを実行し、この特定のプロセス用にフィルタリングしました。私の場合、プロセス(Microsoft.Alm.Shared.Remoting.RemoteContainer.dll)は、プロジェクトの1つによって参照されているdllを「シャドウコピー」フォルダーに読み書きしています。

%Temp%\ALM\ShadowCopies\<some_guid>

上記のフォルダには2600以上の空のフォルダがありました。フォルダを削除したところ、最初はVSの方が高速でした。

これにより、フォルダのバックアップの構築が開始されるまで、問題が一時的に修正されるだけです(あるとしても)。

幸運を!

8
Paccc

この問題にも気づきました。また、Visual Studioプロファイルにログインしていないことに気付き、Visual Studioのオンライン資格情報の問題を解決すると、CPUの占有がなくなりました。

3
Lucas B