2014-01-21 66 views
2

我有一個在VS2012中開發的WCF客戶端應用程序。我使用MS Report Viewer 2012(Microsoft.ReportViewer.WinForms 11.0.3366.16)在我的應用程序中執行並顯示報告。問題是,當這個報告在任何32位環境中執行時,我會得到這個異常。有趣的是,它不會發生在不同的32位機器上。Microsoft Report Viewer 2012例外「沒有足夠的存儲空間來處理此命令」

  • 在某些機器上,它發生在數據顯示在 報告中之前。在跟蹤64位和32位機器之間的內存使用情況時,我注意到,在64位機器上,內存使用率增加到了大約1.3GB(應用程序的專用字節),達到 。在32位的 機器上,它達到650MB左右的內存,然後出現 異常。在32位機器上,當發生這種情況時,仍然有很多物理和虛擬內存,這就是困擾我的東西。 如果繼續,錯誤會不斷彈出。

  • 在其他機器上出現報告呈現後沒有發生事件後將報告導出到Excel 。該錯誤與 有點不同,但會在您關閉異常時間歇性地更改,並且 其中一個錯誤是「存儲空間不足」錯誤。

  • 當您從瀏覽器運行此報告時,它工作正常,沒有 問題。

  • 上週五,當我測試的報告,它完美地工作在2臺32位 機器沒有問題,而且我認爲這個問題是解決了,但 週一來了,錯誤又回來了。我問那些傢伙重新啓動 那裏的機器,以確保沒有不必要的事情是 加載在內存中,但沒有運氣。

我發現很多關於互聯網上的錯誤的問題,但沒有任何解決方案證明工作。有沒有人可以給我一些洞察力以尋找什麼,因爲我不知道在哪裏找到答案了。

報表數據集包含大約300,000行,報表中彙總了大約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 
    { 

    } 
} 

EDIT 2

從我的研究,我發現這個鏈接: http://unixwiz.net/techtips/not-enough-codes.html 看來,制度明確耗盡內存或句柄。是追求MS的行動的最好的原因,並希望他們回到一個男人?

謝謝

回答

1

一年後,我仍然沒有得到一個正確的答案。我已經回到報告查看器(版本9)上的以前版本,它解決了這個問題,但我仍然不知道爲什麼版本11只能在64位系統上正常工作

相關問題