Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 电子表格图像(图表)的变通方法或替代方法。GetBitmap()?_C#_.net_Excel_Charts_Spreadsheetgear - Fatal编程技术网

C# 电子表格图像(图表)的变通方法或替代方法。GetBitmap()?

C# 电子表格图像(图表)的变通方法或替代方法。GetBitmap()?,c#,.net,excel,charts,spreadsheetgear,C#,.net,Excel,Charts,Spreadsheetgear,我使用spreadsheetgear抓取了超过10万个excel文件,但是我发现当spreadsheetgear点击一个有很多点的图表时,所有东西都会松脱:内存没有释放&它占用了大量内存,而且速度非常慢 例如,我有一个63MB的excel文件,包含35个图表,每个图表有96K个点,每个图表的位图占用了100MB+的内存,并且至少在我关闭工作表之前不会发布。如果我让我的程序在所有图表上运行,我最终会得到>9GB的承诺!而且我绝对不能要求我的客户升级到支持所有文件所需的32GB以上 除了这样做,还有

我使用spreadsheetgear抓取了超过10万个excel文件,但是我发现当spreadsheetgear点击一个有很多点的图表时,所有东西都会松脱:内存没有释放&它占用了大量内存,而且速度非常慢

例如,我有一个63MB的excel文件,包含35个图表,每个图表有96K个点,每个图表的位图占用了100MB+的内存,并且至少在我关闭工作表之前不会发布。如果我让我的程序在所有图表上运行,我最终会得到>9GB的承诺!而且我绝对不能要求我的客户升级到支持所有文件所需的32GB以上

除了这样做,还有其他选择吗?我可以跳过速度较慢的文件,并尝试在seriescollection中检查点数,但似乎点数访问是问题所在,因此这无助于仅检查点数。计数似乎会加载所有点数及其关联数据

非常感谢您提供的任何帮助,您可以使用spreadsheetgear以另一种方式获取图形,也可以使用不需要安装任何东西且支持所有excel文件格式的库,或者使用不使用points.count的方式检查点过多的图形


问一些如此具体的问题有点疯狂,但我真的迷路了。

不是完全相同的问题,但我们在MVC应用程序中尝试将电子表格齿轮图图像保存在上下文中遇到了各种各样的问题,并决定采用一种方法,将图表作为png图像保存到服务器上,然后从服务器中调用将服务器连接到视图

这是在服务器上保存Excel图表并在razor视图中检索它的代码:

<!-- language: lang-cs -->
// Get the image from the spreadsheet
SpreadsheetGear.Shapes.IShape chart7 = worksheet.Shapes["Chart 7"];
SpreadsheetGear.Drawing.Image image7 = new SpreadsheetGear.Drawing.Image(chart7);
saveChartImage(image7, "Chart7.png");

//Save chart images to the server
private void saveChartImage(SpreadsheetGear.Drawing.Image image, string chartName)
{
    var imageFile = System.IO.Path.Combine(imagePath, chartName);
    System.Drawing.Image bitmap = image.GetBitmap();
    bitmap.Save(imageFile, System.Drawing.Imaging.ImageFormat.Png);
}

// Action result to get image    
public ActionResult getImage(string imageDir, string filename)
{
    var file = filename;
    var fullPath = Path.Combine(imageDir, file);
    return File(fullPath, "image/png", file);
}
在视图中检索图像:

<img src="@Url.Action("getImage", new { imageDir = "~/images/" "filename = "Chart7.png" })" />
我们在一些非常大和复杂的6-8MB电子表格上使用了这种方法。该代码从16个散点图中调出400多个数据点的图像。服务器上的这些图表大约为16KB,据我所知,保存/检索时间受internet连接而不是服务器的限制


这种方法的缺点是它不适合多用户环境。要做到这一点,您需要创建用户会话,并提供用户独有的图表名称。

我真的不知道这与我的问题有什么关系?您显示的代码已经是我的代码了,这是问题所在,问题不在于生成的图像,而在于制作,spreadsheetgear为每个点分配了大量内存,并对其进行了大量分割,当您有每个有96000个点的图表,并且每个文件都有100个图表时,所有这些都会崩溃。问题是,我甚至不能通过检查一张图表有多少个点来解决这个问题。计数,因为这已经分配了点!为了清楚起见,我们根本不是在讨论相同的数据大小,我的文件高达300MB,我有100000个文件,每个文件包含300个左右的图表,每个图表的点数高达96000点,而每个图表的点数为400点,所以没有达到这些限制是很正常的。