Tag: 内存泄漏

VBA子程序在第一次执行后变慢了很多

我有一个子程序,生成5个家庭内不同投资组合的业绩报告。 问题在于所涉及的投资组合从来都不一样,每个家庭的投资额也不相同。 所以,我复制粘贴一个模板(这是格式化的…),并在报告中为每个投资组合添加合适的行(包含公式和…)。 一切工作正常,代码是不是最佳和完美的,当然,但它适用于我们所需要的。 问题不是代码本身,它是当我第一次执行代码时,它会非常快(如1秒)…但是从第二次,代码显着减慢(基本为30秒任务与第一个相同)。 我尝试了所有的手动计算,而不是刷新屏幕,…但它并不是问题的来源。 它看起来像是一个内存泄漏给我,但我找不到问题在哪里! 为什么代码运行速度非常快,但是后来呢太慢了……无论报告的长度和文件的内容如何,​​我都需要closuresexcel并重新打开每个报告。 **不知道我是否清楚,但这不是因为代码使Excel文件变大或什么,因为在第一个(快速)执行后,如果我保存工作簿,closures并重新打开它,(新)第一次执行将再次变得非常快,但是如果我能够在不closures和重新打开的情况下完成同样的动作,那将会非常缓慢…… ^!^ Dim Family As String Dim FamilyN As String Dim FamilyP As String Dim NumberOfFamily As Integer Dim i As Integer Dim zone As Integer Sheets("RapportTemplate").Cells.Copy Destination:=Sheets("Rapport").Cells Sheets("Rapport").Activate i = 3 NumberOfFamily = 0 FamilyP = Sheets("RawDataMV").Cells(i, 4) While (Sheets("RawDataMV").Cells(i, 3) <> "") And (i < […]

在Excelmacros可能的内存泄漏从大量的网页获取信息

我没有太多(或任何)处理内存和内存泄漏问题的经验,但看起来就是这里发生的事情。 我有一个Excelmacros必须 – 遵循工作表中单元格的超链接 – 从网页获取信息 – 对信息进行一些string操作 – 用获得的信息填充工作表中的单元格 我的代码大致是: Sub GetInfo() Dim numRow As Long numRow = Range("E2").Value Do While WorksheetFunction.IsText(Range("D" & numRow)) If Not Range("D" & numRow).EntireRow.Hidden Then URL = Range("D" & numRow).Hyperlinks(1).Address Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate URL Do While IE.Busy Application.Wait DateAdd("s", 1, Now) Loop If IE.document.GetElementsByName("thing1").Length […]

内存泄漏工作表functionexcel 2016

我有一个子程序循环计算很多次。 最近在Excel 2016中,我已经开始耗尽内存。 下面的演示代码在2010年,2013年,甚至2016年Mac都可以使用,但是在2016年,对于Windows,它在内存中积累了大约500MB的内存,直到退出Excel才释放。 不知道2016年已经有多久了, 刚刚开始注意到昨天。 它似乎是导致泄漏的工作表函数。 我在我的真实循环中使用了许多工作表函数。 任何想法如何冲洗这个? Sub MemTest() iend = 1000000 For i = 1 To iend deg2rad = Application.WorksheetFunction.Pi / 180 deg2rad = Empty Next i End Sub

PHP的Excel内存限制2GB用尽阅读一个286KB的文件

Addtitional info:我从命令行运行这个。 CentOS 6,32GB总计,2GB的PHP内存。 我试图增加内存限制到4GB,但现在我得到一个Fatal error: String size overflow 。 PHP的最大string大小是2GB 。 我的代码很简单testing代码: $Reader = new SpreadsheetReader($_path_to_files . 'ABC.xls'); $i = 0; foreach ($Reader as $Row) { $i++; print_r($Row); if($i>10) break; } 而且只打印10行。 这是2千兆字节的内存? 错误发生在excel_reader2.php的第253行 里面的类OLERead里面function read($sFilenName) 这是导致我筋疲力尽的代码: if ($this->numExtensionBlocks != 0) { $bbdBlocks = (BIG_BLOCK_SIZE – BIG_BLOCK_DEPOT_BLOCKS_POS)/4; } for ($i = 0; $i < […]

在PowerPoint演示文稿上closures运行vba代码

我有一个从Excel电子表格中提取数据的演示文稿。 我正在使用这个创build一个新的Excel实例: Public Sub InitExcel() If xlApp Is Nothing Then Set xlApp = New Excel.Application xlApp.DisplayAlerts = False Set wbWorkbook = xlApp.Workbooks.Open(ActivePresentation.Path & "\Data.xlsx", ReadOnly:="True", Notify:="false") xlApp.DisplayAlerts = True Set wsTechnologies = wbWorkbook.Worksheets("Technologies") End Sub 然后,一旦我检索数据,我closuresExcel xlApp.Quit xlApp = Nothing 不幸的是,这有两个问题。 一个是它并不总是closuresExcel,而且我总是在任务pipe理器中至less留下一个实例。 另一个是我想要显示不同的数据,每当用户点击不同的形状,所以我现在正在做的方式,每次发生点击事件Excel必须初始化,获取数据,并退出。 ..很慢。 那么有没有更好的方法来与Excel接口? 我可以初始化一次,让它打开,并告诉它一旦用户退出演示文稿退出? 还是有另一种方式? 更新:我发现有一种方法可以触发事件 。 打电话后仍然留有一个松散的Excel实例 xlApp.quit 和 set xlApp = […]

Excel VBA:删除SeriesCollection不释放内存

我在这个macros中有一个内存泄漏。 我需要dynamic添加新的系列,所以我首先删除所有现有的系列,然后添加我需要的系列。 运行这个macros10000次导致大内存泄漏。 Sub Macro1() Dim Datarange As Range Dim i As Integer ActiveSheet.ChartObjects("Chart 1").Activate With ActiveChart Do While .SeriesCollection.Count > 0 .SeriesCollection(1).Delete Loop For j = 0 to 3 .SeriesCollection.NewSeries Next End With End Sub 有任何想法吗?

VB.Net,利用Excel程序集,内存泄漏

我的程序本质上是一个使用Excel程序集打开文件并将信息放入数组列表的表单。 运行我的程序多次迭代后,我发现在任务pipe理器中,我仍然有多个excel文件打开,尽pipe它们隐藏在我的任务栏中。 另外“系统和压缩存储器”每次占用更多的空间。 我假设我没有正确地释放内存,但我不知道如何,我现在有: shXL = Nothing wbXl = Nothing appXL.Quit() appXL = Nothing 注意:shxl是工作表,wbxl是工作簿,appxl是应用程序。 任何帮助,将不胜感激

如何编写一个Excel C加载项函数返回一个string到Excel没有内存泄漏?

我正在使用C ++编写Excel XLL插件,我希望我的函数使用预定义的XLOPER12将string返回给Excel。 正如我所说的,Excel要求函数返回一个指向内存的指针,然后使得浅拷贝消失,而不清除函数中分配的内存。 所以如果我写这样的东西: extern "C" LPXLOPER12 WINAPI strgen() { XLOPER12 res; res.xltype = xltypeString; res.val.str = (XCHAR*)malloc(2*sizeof(XCHAR)); res.val.str[0] = (XCHAR)1; res.val.str[1] = L"X"; return (LPXLOPER12)&xRes; } 但显然这会造成内存泄漏。 有人build议我可以将res声明为静态variables,但我不知道如何初始化它。 所有的build议都欢迎。 最好

ADO.NET +大量插入+ Excel + C#=“不好的时间”?

基本上我需要插入一堆数据到Excel文件。 创build一个OleDB连接似乎是最快的方式,但我已经遇到了内存问题。 进程使用的内存似乎不断增长,因为我执行INSERT查询。 我已经缩小到只有当我输出到Excel文件(内存保持稳定,没有输出到Excel)时发生。 我closures并重新打开每个工作表之间的连接,但这似乎没有影响内存使用情况(如同Dispose())。 数据写入成功,因为我可以validation相对较小的数据集。 如果有人有洞察力,将不胜感激。 initializeADOConn()在构造函数中被调用 initADOConnInsertComm()创build插入参数化插入查询 writeRecord()每当写入新的logging时被调用。 新的工作表是根据需要创build的。 public bool initializeADOConn() { /* Set up the connection string and connect.*/ string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + this.destination + ";Extended Properties=\"Excel 8.0;HDR=YES;\""; //DbProviderFactory factory = //DbProviderFactories.GetFactory("System.Data.OleDb"); conn = new OleDbConnection(connectionString); conn.ConnectionString = connectionString; conn.Open(); /* Intialize the insert command. */ initADOConnInsertComm(); […]

ClosedXML。 内存泄漏,而Workbook.Save()

我需要从dataTable中添加新的工作表。 对于这个任务我使用ClosedXML: workbook.Worksheets.Add(dataTable); workbook.Save(); workbook = new XLWorkbook(filePath); //reload file to avoid exception at next saving 我的进程使用了​​128 Mb的内存,但是在Workbook.Save()这个数字上升到了382 Mb。 在添加了下一个工作表内存使用从464 Mb到619 Mb之后。 但实际文件在这一点上是1.6 Mb。 这可能是什么原因?