【发布时间】:2011-01-17 11:23:45
【问题描述】:
目前我正在编写一个 c# 客户端应用程序,它使用 WinForms ReportViewer 控件来显示来自远程服务器的报告。
我在使用 ReportViewer 控件时遇到性能问题,具体来说是 reportViewer.ServerReport.SetParameters() 和 reportViewer.RefreshReport() 这两种方法——它们都是需要很长时间才能完成,并且不仅在第一次调用,而且在随后的每个调用中也是如此。 SetParameters() 需要 20 到 40 秒(它们的时间差异很大,一些执行事件还可以很快), RefreshReport() 稍微快一点,但仍然需要很长时间。
我不认为服务器是罪魁祸首,因为相同的报告查看使用浏览器呈现非常快,大约一秒。
有问题的报告也无关紧要。
当我进入进程并查看调用堆栈时,我看到了对 Socket.DoConnect 的调用。
所以我认为这是开始使用 fiddler 的一个很好的理由,我安装了它,禁用了缓存并再次启动应用程序以查看哪个调用需要很长时间才能连接,但性能问题已经消失。通过使用代理,我的性能与网络浏览器相同。
仅供参考:我通过以下方式使用 NTLM 身份验证:reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredentials() { Username = ... }
我没有强大的网络背景,所以我想我的问题是: 这应该告诉我什么/我应该调查什么? (顺便说一句:在我的安装包中添加提琴手不是我正在寻找的解决方案:))
感谢任何指点。
保重,
-马丁
【问题讨论】:
-
我错过了什么吗?如果有不清楚的地方,我很乐意详细说明。
标签: c# winforms reportviewer