[FIX] ADO 2. 5 ストリームとオブジェクトのレコードを使用するリソースをリークします。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:282177
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
マーシャリング データ、インプロセス ActiveX データ オブジェクト (ADO) レコード を使用または Stream オブジェクト、メモリ リークが生じることとは最終的と、プロセスのメモリが不足します。 このリークは、 コマンド レコードセット オブジェクトなどの他の ADO オブジェクトと発生しません。

このリークは、Microsoft データ アクセス コンポーネント (MDAC) 2. 5 では発生が MDAC 2. 6 では発生しません。
原因
レコード Stream オブジェクトは、Active Template Library (ATL) AtlMarshalPtrInProc 関数を使用する呼び出し元に戻すプロキシ情報を送信するのにために使用する、ストリームを作成します。 レコード ストリーム オブジェクトは破棄すると、ときに、 リリース 関数はだけに対して呼び出されます、ストリームこのストリームに割り当てられたメモリを解放するには、 AtlFreeMarshalStream 関数を呼び出さずに。
解決方法

MDAC

この問題を解決するには、Microsoft MDAC 2. 5 の最新のサービス パックの入手します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
293312[INFO] 最新の MDAC 2.5 Service Pack の入手方法
ただし、これより新しい修正ファイルがリリースされている可能性もあります:
   Date          Version        Size               File name   ------------------------------------------------------------   12/14/2000    2.53.6013.0    491,792 bytes      Msado15.dll						

Windows 2000

この問題を解決するには、Windows 2000 の最新のサービス パックを入手してください。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください:
260910最新の Windows 2000 Service Pack の入手方法
この修正プログラムの英語版は次のファイル属性がありますが以降:
   Date        Time    Version       Size       File name   ----------------------------------------------------------   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll				

回避策

MDAC 2. 5 でこの問題の回避策はありません。
状況

MDAC

マイクロソフトではこれが、この資料の冒頭に記載されているマイクロソフト製品のバグとして認識しています。 この問題は、まず MDAC 2. 5 SP3 で修正されました。

この問題は、MDAC 2. 6 では発生しません。

Windows 2000

マイクロソフトとして認識していますこの問題をこの資料の冒頭に記載されているマイクロソフト製品の問題。 この問題は、まず Windows 2000 Service Pack 3 で修正されました。
詳細
Record または Stream オブジェクトは、マーシャリング インプロセス、インターネット インフォメーション サーバー (IIS) や Microsoft トランザクション サーバー (MTS) 環境でこのメモリ リークの発生の大部分と COM + です。 このリークは場所このマーシャリングが発生しない、スタンドアロンの Microsoft Visual Basic アプリケーションのような環境では発生しません。

問題の再現手順

  1. テキスト ファイルに以下のサンプル コードを貼り付け、"ADODBMem.vbs"の名前で保存します。
  2. Windows スクリプティング ホスト (CScript.exe) を使用してこのファイルをコマンド プロンプトから実行します。 たとえば。
    cscript ADODBMem.vbs
  3. メッセージが表示されたら、パフォーマンス モニター (パフォーマンス モニター) を起動し、実行可能ファイル、CScript の Private Bytes カウンターを選択します。
  4. スクリプトに戻って示されているように、ADO オブジェクトの作成ステップします。 メモ パフォーマンス モニターは、増加 レコード ] および [ Stream オブジェクトに割り当てるメモリ量を示します。

サンプル コード

'//////////////////////////////////////////////////////////////////////////////////////////////// ' +'   File:       adodbmem.vbs''   Copyright:  (c) 2000 Microsoft Corporation''   Contents:   Creates/destroys ADODB objects and allows to see memory usage (leaks).''   Comments:   CScript.exe v2.0 required (comes with Windows 2000; just copy to run under NT4)'               WScript.exe will NOT work''               Usage: cscript adodbmem.vbs'               Use PerfMon to see the counter "Private Bytes" in process "cscript"' -'//////////////////////////////////////////////////////////////////////////////////////////////// Const REPT_CNT = 1000Private Function CreateOnce(objName, bStop)  Dim obj  On Error Resume Next  If bStop = True Then    WScript.StdOut.Write  "Create an instance of " & objName & ">"    WScript.StdIn.ReadLine  End If  Set obj = CreateObject(objName)  If Err.Number <> 0 Then    WScript.Echo "CreateObject(" & objName &") failed: " & Err.Description    CreateOnce = False    Exit Function  End If  If bStop = True Then    WScript.StdOut.Write objName & " created. Destroy>"    WScript.StdIn.ReadLine  End If  Set obj = Nothing  If bStop = True Then    WScript.Echo objName & " destroyed."  End If  CreateOnce = TrueEnd Function'//////////////////////////////////////////////////////////////////////////////////////////////// Private Sub TryObject(objName)  Dim i  WScript.StdOut.Write "Create and destroy " & objName & " " & REPT_CNT & " times>"  WScript.StdIn.ReadLine  For i = 1 To REPT_CNT    If Not CreateOnce(objName, False) Then Exit For  Next  WScript.StdOut.Write "Done. "End Sub'//////////////////////////////////////////////////////////////////////////////////////////////// Private Sub ShowVersion  Dim sVer  Dim o  Set o = CreateObject("ADODB.Connection")  sVer = o.Version  Set o = Nothing  WScript.StdOut.Write "ADODB version " & sVer & " loaded. Hit Enter to start>"  WScript.StdIn.ReadLineEnd Sub'//////////////////////////////////////////////////////////////////////////////////////////////// Public sub Main()  WScript.StdOut.Write "ADODB memory leak test." & vbNewLine & _                "Connect Perfmon: process - cscript, counters - Private Bytes." & vbNewLine & _                "Hit Enter then ready>"  WScript.StdIn.ReadLine  ShowVersion  TryObject "ADODB.Command"  TryObject "ADODB.Stream"  TryObject "ADODB.Recordset"  TryObject "ADODB.Record"  WScript.StdOut.Write "All Done. Hit Enter to exit>"  WScript.StdIn.ReadLineEnd subCall Main()Wscript.Quit 0'//////////////////////////////////////////////////////////////////////////////////////////////// '                                  End of file "adodbmem.vbs"'//////////////////////////////////////////////////////////////////////////////////////////////// 				
マーシャリング kbMDAC マーシャリングのマーシャリング

警告: この記事は自動翻訳されています

プロパティ

文書番号:282177 - 最終更新日: 02/24/2014 05:56:31 - リビジョン: 3.2

Microsoft Data Access Components 2.5 Service Pack 1, Microsoft Data Access Components 2.5

  • kbnosurvey kbarchive kbbug kbfix kbado260fix kbqfe kbwin2000sp3fix kbmdac260fix kbmdac250sp3fix kbhotfixserver kbmt KB282177 KbMtja
フィードバック