2016-06-22 8 views
0

私たちのC#アプリケーションは実行可能ファイルで正常に動作しますが、デバッグモードでは突然応答がなく、デバッグメニューからプログラムを停止する必要があります。Visual Studioのデバッグモードで長い実行文を処理する方法は?

調査の結果、jsonに非常に大きなjsonオブジェクトが含まれていると、次のステートメントの実行に戻りがないことが判明しました。

jsonString = Json.Encode(json); 

オブジェクトが大きい取得するときに我々は、それがデバッグモードでタイムアウトが発生します、JSONオブジェクトをエンコードするためにSystem.Web.Helpers.Jsonを使用しています。 Json.Encode(json)のウォッチを追加しようとしましたが、 "Evaluation timed out"が返されます。

本番版では問題ありませんが、このステートメントを実行するたびにアプリケーションがハングアップするため、アプリケーションのデバッグに問題があります。

また、この問題はWindows 7マシンでのみ発生し、Windows 10マシンでは問題はないことがわかりました。したがって、Windows 10マシンをデバッグに使用する必要があります。

Windows 7では、このような長い実行文を許可しないデバッグモードにはいくつかの制限があるようです。このようなタイムアウト設定をデバッグモードで設定する方法があるかどうか分かりますか?

+0

は、別のスレッドで実行されている特定のコード行ですか? – Rahul

+0

UIスレッドで実行されます。主な用途は、アプリケーション終了時に実行中のすべてのデータを保存することです。 –

+0

また、* all * win7マシンで起こっているのでしょうか、それとも1つだけですか? – NPras

答えて

0

NPAS。

Visual Studio 2015を使用していますが、 "HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 14.0 \ Debugger \"に "LocalsTimeout"というエントリがありません。

しかし、問題は、 "HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 12.0 \ Debugger \"の "LocalsTimeout"の設定を変更することで解決できます。

この設定はさまざまなバージョンで共有されているようです。

訂正: - 本当に面白いですが、それは一度だけ機能します。たぶん私は設定を変更した後、jsonは私のテストに十分な大きさではありません。 - もう一度テストしましたが、まだ返品はありません。 - 値を10000に増やしました。処理に10秒かかる可能性はないようですが、まだ返されません。

+0

問題がSystem.Web自体にあるのだろうかと思います。あなたは 'Newtonjoft.Json'を試しましたか? – NPras

+0

System.Web.Helperと同じ機能を提供していないので、Newtonsoft.Jsonを使うようにプログラムを変換する方法を学ぶ必要があります。しかし、何度も何度も試してみましたが、デバッグモードで同じオブジェクトを変換するのに20秒以上かかりますが、実行可能ファイルには1秒未満しかかかりませんでした。 –

1

ありがとうNPras、あなたは正しいです。問題は、System.Web.Helperのjsonのみです。 低速変換コードの1つを修正し、デバッグモードで次の2つのステートメントを実行してみます。

文字列jsonString = Json.Encode(json);

文字列json2 = Newtonsoft.Json.JsonConvert.SerializeObject(json);

出力文字列は約33Kです。最初の文字列は20秒以上かかりますが、2番目の文字列は1秒で返され、結果は同じです。

さらに、System.Web.Helperのこのような低速なパフォーマンスは、バックグラウンドスレッドで実行されるコードでのみ発生しました。 UIスレッドで実行している場合は、実行可能ファイルと同じパフォーマンスを持ちます。たぶん、デバッグモード中に、Visual Studio IDEによってブロックされているUIスレッドの誰かを待っている可能性があります。

関連する問題