- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个用 VS2012 开发的 WCF 客户端应用程序。我使用 MS Report Viewer 2012 (Microsoft.ReportViewer.WinForms 11.0.3366.16) 在我的应用程序中执行和显示报告。问题是当这个报告在任何 32 位环境中执行时我得到这个异常。有趣的是,它不会在不同的 32 位机器上同时发生。
在某些机器上,它发生在数据显示在报告。关于跟踪 64 位和 32 位机器之间的内存使用情况我注意到在 64 位机器上内存使用率飙升到大约 1.3GB(应用程序的专用字节)。在 32 位上机器,它飙升到大约 650MB 的 RAM,然后给出异常(exception)。在 32 位机器上仍然有很多物理和发生这种情况时剩余的虚拟内存,这让我感到困惑。如果您也继续,该错误会不断弹出。
在其他机器上,当您将报告导出到 Excel 时会发生这种情况报告无事后呈现。错误有点不同但在您关闭异常时间歇性地变化,并且其中一个错误是“存储空间不足”错误。
当您从浏览器运行此报告时,无需问题。
周五,当我测试该报告时,它在 2 32 位上完美运行机器没有问题,我以为问题解决了,但是星期一来了,错误又回来了。我问的人重新启动有机器确保没有不必要的东西加载到内存中,但没有运气。
我在互联网上发现了很多关于错误的问题,但没有一个解决方案证明有效。有没有人可以让我了解要寻找的内容,因为我不确定在哪里可以找到答案。
报告数据集有大约 300,000 行,这些行在报告中聚合到显示的大约 3,000 行。
如果需要更详细的信息,请询问。我需要解决这个问题。
编辑
这是我设置报告的一些代码。
void BaseReportingForm_Load(object sender, System.EventArgs e)
{
rptViewer.ServerReport.ReportPath = "/test/TestReport";
rptViewer.ServerReport.ReportServerUrl = new Uri("http://localhost:80/ReportServer");
rptViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new System.Net.NetworkCredential(
"Developer", "Password", "Domain");
rptViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote;
rptViewer.ShowParameterPrompts = false;
this.RefreshReport();
//cant do this here as the parameters that are dynamically loaded will not be populated
LoadParameters(null);
}
void RefreshReport()
{
this.RefreshReport(null);
}
void RefreshReport(Microsoft.Reporting.WinForms.ReportParameterInfoCollection pParameters)
{
//run in seperate thread...
object[] argArr = new object[] { pParameters };
if (reportBackgroundWorker.IsBusy)
{
restartWorker = true;
reportBackgroundWorker.CancelAsync();
}
else
{
reportBackgroundWorker.RunWorkerAsync(argArr);
}
}
void LoadParameters(Microsoft.Reporting.WinForms.ReportParameterInfoCollection pParameters)
{
this.catchClick = false;
if (pParameters != null) //only load the parameter collection
{
Microsoft.Reporting.WinForms.ReportParameterInfoCollection rptParameters = rptViewer.ServerReport.GetParameters();
foreach (Microsoft.Reporting.WinForms.ReportParameterInfo rptParam in rptParameters)
{
if (rptParam.Prompt != "")
{
//Code removed. Just creating edits and combo's for parameters to be captured
}
}
}
else //reload whole group
{
//First delete the group if it exists
//Get parameters and add it to the group as items
string version = rptViewer.ServerReport.GetServerVersion();
Microsoft.Reporting.WinForms.ReportParameterInfoCollection rptParameters = rptViewer.ServerReport.GetParameters();
int paramPosition = 0;
foreach (Microsoft.Reporting.WinForms.ReportParameterInfo rptParam in rptParameters)
{
if (rptParam.Prompt != "")
{
//Code removed. Just creating edits and combo's for parameters to be captured
}
}
}
}
public void RunReport()
{
this.RefreshReport();
}
private void reportBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
rptViewer.Invoke(new MethodInvoker(delegate()
{
//Removed the code that populates the parameters from the created edits and combo's and put some hardcoded params in here
var vParameters = new List<Microsoft.Reporting.WinForms.ReportParameter>();
vParameters.Add(new Microsoft.Reporting.WinForms.ReportParameter("Param1", "Param1"));
rptViewer.ServerReport.SetParameters(vParameters);
rptViewer.RefreshReport();
}));
}
private void reportBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled && restartWorker)
{
restartWorker = false;
this.RefreshReport();
}
if (e.Error != null)
{
throw e.Error;
}
else
{
}
}
编辑 2
根据我的研究,我找到了这个链接: http://unixwiz.net/techtips/not-enough-codes.html系统似乎明确地用完了内存或句柄。最好的行动是追捕 MS 一下,并希望他们回到男人身边?
谢谢
最佳答案
一年后,我仍然没有收到正确的答案。我已经在 Report Viewer 上回滚到以前的版本(版本 9)并且它解决了问题,但我仍然不知道为什么版本 11 只能在 64 位系统上正常工作
关于c# - Microsoft Report Viewer 2012 异常 "Not enough storage is available to process this command",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21251811/
我是一名优秀的程序员,十分优秀!