Microsoft KB Archive/230487

= FIX: Marshaling ADO Recordset Out-of-Process Causes Small Memory Leak =

Article ID: 230487

Article Last Modified on 5/17/2007

-

APPLIES TO


 * Microsoft Remote Data Services 2.1
 * Microsoft Plus! Game Pack: Cards & Puzzles
 * Microsoft Data Access Components 2.1 Service Pack 1

-



This article was previously published under Q230487



SYMPTOMS
When an ADO recordset is marshaled out-of-process from a COM server, a small leak in Private Bytes occurs in the COM server's process space.

This leak occurs when using either a disconnected ADO recordset or a recordset created with the RDS DataFactory if you are using versions of MDAC earlier than 2.1 sp2.



CAUSE
The leak is caused by ADO internally making an incorrect call to AddRef on a Stream pointer within MarshalInterface.



STATUS
This problem has been fixed in Microsoft Data Access Components 2.1 and later. You may download the latest version of Microsoft Data Access Components from the following site:

http://msdn2.microsoft.com/en-us/data/aa937695.aspx



Steps to Reproduce Behavior
  Create an Executable project in Visual Basic that will be the server application. Name the project LeakEXE, and within it, create a class module named LeakRS. Set a reference to the Microsoft ActiveX Data Objects Library. Use the following code within the LeakRS class: Option Explicit

Function GetRS As ADODB.Recordset Dim rs As ADODB.Recordset On Error Resume Next Set rs = New ADODB.Recordset rs.Fields.Append "x", adInteger rs.Open rs.AddNew rs.Fields(0).Value = 1 rs.Update rs.MoveFirst Set GetRS = rs End Function   Next, create a client project in Visual Basic, using the following code. Then, set a reference to the ActiveX EXE and to Microsoft ActiveX Data Objects Library. Sub OutofProcLeak Dim x As New LeakEXE.LeakRS Dim rs As ADODB.Recordset

For i = 0 To 200000 Set rs = x.GetRS Debug.Print Str(i) DoEvents Next

Set rs = Nothing  Run the client application. Use the Windows NT Performance Monitor to watch Private Bytes counter for object Process using instance LeakEXE.exe.

Additional query words: ado rds out of process recordset memory leak small

Keywords: kbhotfixserver kbqfe kbado210fix kbbug kbdatabase kbfix kbmdac210fix kbmdacnosweep KB230487

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.