Powershell脚本中的大量内存泄漏

时间:2010-11-06 16:56:39

标签: memory powershell memory-leaks

我在XP操作系统上有一个powershell 2.0脚本。该脚本的目的是从旧数据库(Sybase)中提取数据并填充SQL Server 2008数据库。我使用的模型是创建与Sybase数据库的OLEDB连接。该脚本从Sybase数据库调用一系列存储过程。结果用于创建XML字符串。查询XML字符串以获取SQL Server存储过程的输入数据。在SQL Server数据库中创建每个数据元素之后,XML字符串将保存到文件中。执行完成后,每个数据库连接都将关闭。它是简单的模型,但使用了惊人的内存量。为了仅传输1000行数据,脚本内存占用增长到3G。当脚本完成时,内存不会丢失。为了纠正这个问题,我添加了逻辑来在不使用时释放每个变量,并在每个try块的每个finally子句中调用垃圾收集。我知道这是矫枉过正,但我​​试图找到任何会减少内存使用量的东西。我正在寻找内存跟踪工具,但我也在寻找专家意见,以便可能开始追踪这个关键问题。我知道我遗漏了一些明显的东西,所以任何建议都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我找到了泄漏源。我正在使用与Sybase Server实例的OLEDB连接来获取要加载到SQL Server的数据。 95%的泄漏被隔离到一个调用Sybase存储过程的函数中。此过程可以选择将结果作为输出参数或结果集返回,而不是将结果存入结果集。我最初选择了输出参数选项。由于我不清楚的原因,此输出参数机制导致大量内存泄漏。我更改了逻辑以使用结果集并解决了泄漏问题。不清楚为什么输出参数是一个问题,但我找到了一个可选的方法来纠正这个问题。