2016-06-22 62 views
0

我们的C#应用​​程序在可执行文件中工作正常,但在调试模式下突然没有响应,我们必须通过调试菜单停止程序。如何在Visual Studio调试模式下处理长执行语句?

经过调查发现,如果json包含非常大的json对象,那么在执行下面的语句时没有返回。

jsonString = Json.Encode(json); 

我们正在使用System.Web.Helpers.Json编码JSON对象,当物体越来越大,这将导致在调试模式下暂停。我们试图为Json.Encode(json)添加一个手表,它将返回“评估超时”。

虽然它不会在我们的生产版本中引起任何问题,但它在调试应用程序时遇到问题,因为应用程序在执行此语句时会挂起。

我们也发现这个问题只发生在Windows 7机器上,并且在Windows 10机器中没有问题。所以我们必须使用Windows 10机器进行调试。

Windows 7下的调试模式似乎有一些限制,不允许这么长的执行语句。我可否知道是否有任何方法可以在调试模式下配置这种超时设置?

+0

是特定的代码行在不同的线程中执行吗? – Rahul

+0

它在UI线程中执行。我们的主要用途是在应用程序退出时保存所有运行的数据。 –

+0

另外,它发生在* all * win7机器上,还是只有其中一个? (只是试图确定它是否是操作系统特定的,或者是该PC上的更多环境) – NPras

回答

0

谢谢NPras。

尽管我们现在使用的是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

它需要研究如何将程序转换为使用Newtonsoft.Json,因为它没有提供与System.Web.Helper中相同的功能。但是我一次又一次地测试,发现它在可执行文件中花费的时间不到1秒,而在调试模式下花费20多秒才能转换同一个对象。 –

1

谢谢NPras,你是对的。问题只出现在System.Web.Helper的json中。 我只是尝试修改其中一个慢速转换代码,并在调试模式下执行以下两条语句,

string jsonString = Json.Encode(json);

string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(json);

输出字符串大约有33K,第一个接收20秒,而第二个可以1s返回,结果是相同的。

还有一个发现,在System.Web.Helper中这样慢的性能只发生在后台线程中运行的代码中。对于那些在UI线程中运行的应用程序,它具有与可执行文件相同的性能。也许,在调试模式下,它正在等待被Visual Studio IDE阻止的UI线程中的某个人。