Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft Report Viewer 2012例外情况“;存储空间不足,无法处理此命令;_C#_Reporting Services_Reportviewer - Fatal编程技术网

C# Microsoft Report Viewer 2012例外情况“;存储空间不足,无法处理此命令;

C# Microsoft Report Viewer 2012例外情况“;存储空间不足,无法处理此命令;,c#,reporting-services,reportviewer,C#,Reporting Services,Reportviewer,我在VS2012中开发了一个WCF客户端应用程序。我使用MS Report Viewer 2012(Microsoft.ReportViewer.WinForms 11.0.3366.16)在我的应用程序中执行和显示报告。问题是,当此报告在任何32位环境中执行时,我都会遇到此异常。有趣的是,在不同的32位机器上,它不会发生在同一点上 在某些机器上,它发生在数据显示在屏幕上之前 报告。关于跟踪64位和32位计算机之间的内存使用情况 我注意到,在64位机器上,内存使用峰值为 大约1.3GB(应用程

我在VS2012中开发了一个WCF客户端应用程序。我使用MS Report Viewer 2012(Microsoft.ReportViewer.WinForms 11.0.3366.16)在我的应用程序中执行和显示报告。问题是,当此报告在任何32位环境中执行时,我都会遇到此异常。有趣的是,在不同的32位机器上,它不会发生在同一点上

  • 在某些机器上,它发生在数据显示在屏幕上之前 报告。关于跟踪64位和32位计算机之间的内存使用情况 我注意到,在64位机器上,内存使用峰值为 大约1.3GB(应用程序的专用字节)。在32位上 机器,它会将内存增加到650MB左右,然后给出 例外。在32位机器上,仍然存在大量物理和物理数据 发生这种情况时留下的虚拟内存,这让我感到困惑。 如果继续,错误会不断弹出

  • 在其他计算机上,将报表导出到Excel时会发生这种情况 报告提交后无任何意外。这个错误有点小 不同,但在关闭异常时会间歇性更改,以及 其中一个错误是“存储空间不足”错误

  • 当您从浏览器运行此报告时,它在没有 问题

  • 周五,当我测试报告时,它在32bit上运行得非常好 机器没有问题,我以为问题解决了,但是 星期一到了,错误又回来了。我让他们重新开始 有机器来确保没有不必要的东西 载入记忆,但没有运气

我在互联网上发现了很多关于错误的问题,但是没有一个解决方案是有效的。有没有人可以给我一些关于寻找什么的见解,因为我不知道在哪里可以找到答案了

报表数据集有大约300000行,这些行在报表中聚合为大约3000行

如果需要更多详细信息,请询问。我需要解决这个问题

编辑

下面是我设置报告的一些代码

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
    {

    }
}
void BaseReportingForm\u加载(对象发送方,System.EventArgs e)
{
rptViewer.ServerReport.ReportPath=“/test/TestReport”;
rptViewer.ServerReport.ReportServerUrl=新Uri(“http://localhost:80/ReportServer");
rptViewer.ServerReport.ReportServerCredentials.NetworkCredentials=新系统.Net.NetworkCredential(
“开发者”、“密码”、“域”);
rptViewer.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Remote;
rptViewer.showParameterPerCompts=false;
此.RefreshReport();
//此处无法执行此操作,因为动态加载的参数将不会填充
LoadParameters(null);
}
作废报告()
{
此.RefreshReport(空);
}
无效刷新报告(Microsoft.Reporting.WinForms.ReportParameterInfoCollection pParameters)
{
//在单独的线程中运行。。。
对象[]argArr=新对象[]{pParameters};
如果(reportBackgroundWorker.IsBusy)
{
restartWorker=true;
reportBackgroundWorker.CancelAsync();
}
其他的
{
reportBackgroundWorker.RunWorkerAsync(argArr);
}
}
void LoadParameters(Microsoft.Reporting.WinForms.ReportParameterInfo集合参数)
{
this.catchClick=false;
if(pParameters!=null)//仅加载参数集合
{
Microsoft.Reporting.WinForms.ReportParameterInfo收集rptParameters=rptViewer.ServerReport.GetParameters();
foreach(rptParameters中的Microsoft.Reporting.WinForms.ReportParameterInfo rptParam)
{
如果(rptParam.Prompt!=“”)
{
//代码已删除。只需为要捕获的参数创建编辑和组合
}
}
}
否则//重新加载整个组
{
//首先删除组(如果存在)
//获取参数并将其作为项目添加到组中
string version=rptViewer.ServerReport.GetServerVersion();
Microsoft.Reporting.WinForms.ReportParameterInfo收集rptParameters=rptViewer.ServerReport.GetParameters();
int paramPosition=0;
foreach(rptParameters中的Microsoft.Reporting.WinForms.ReportParameterInfo rptParam)
{
如果(rptParam.Prompt!=“”)
{
//代码已删除。只需为要捕获的参数创建编辑和组合
}
}
}
}
公共报告()
{
此.RefreshReport();
}
私有无效报告BackgroundWorker_DoWork(对象发送方,DoWorkEventArgs e)
{
Invoke(新的MethodInvoker(delegate())
{
//从创建的编辑和组合中删除了填充参数的代码,并在此处放置了一些硬编码的参数
var vParameters=新列表();
添加(新的Microsoft.Reporting.WinForms.ReportParameters(“Param1”、“Param1”));
rptViewer.ServerReport.SetParameters(vpParameters);
rptViewer.RefreshReport();
}));
}
private void reportBackgroundWorker_RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
如果(如取消和重新启动)
{
restartWorker=false;
此.RefreshReport();
}
如果(例如错误!=null)
{
抛出e.错误;
}
其他的
{
}
}
编辑2

从我的研究中,我发现了以下链接: 系统似乎显式地耗尽了内存或句柄。是不是最好的行动理由去追问MS,并希望他们回到一个男人身边


谢谢

一年后,我仍然没有收到关于这个问题的正确答案。我已经在Report Viewer上回滚到以前的版本(版本9),它解决了这个问题,但我仍然不知道为什么版本11只能在64位系统上正常工作