أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تحديد الذاكرة عمليات تسرب في وقت تشغيل اللغة العامة

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

318263
الموجز
تحتوي هذه المقالة تتناول الذاكرة ما يتم تسرب وقوائم بعض الأسباب المحتملة من تسرب الذاكرة. بالإضافة إلى ذلك، توضح هذه المقالة مشكلة حدوث تسرب للذاكرة الملحوظة و كيفية فإنه يمكن تفسيره بشكل غير صحيح على أنه تسرب للذاكرة صحيحاً.
معلومات أخرى
يمكن أن يؤدي تطبيق إلى نفاد موارد تسرب الذاكرة ثم تؤدي إلى تعطل تطبيق. من المهم تعريف تسرب الذاكرة. لديه مشكلة تسرب الذاكرة plagued المطورين في C و C++ سنوات. في Microsoft Visual Studio 2005 أو في Microsoft Visual Studio .NET حزمة مجموعة البيانات المهملة شاملة والذاكرة المدارة يمكن إيقاف تسرب الذاكرة, ولكن في بعض الحالات، قد يظهر أحد برامج أن leaking الذاكرة.

تعريف حدوث تسرب للذاكرة

يحدث تسرب للذاكرة عند الذاكرة المخصصة في برنامج ألا يتم إرجاع إلى نظام التشغيل على الرغم من عدم استخدام البرنامج الذاكرة بعد ذلك. فيما يلي أربعة أنواع أساسية من تسرب الذاكرة:
  • في بيئة ذاكرة مدارة يدوياً: تخصيص الذاكرة ومن الإشارة إلى مؤشر بشكل حيوي. تم محو المؤشر قبل أن يتم تحرير الذاكرة. بعد مسح المؤشر ، لم يعد يمكن الوصول إلى الذاكرة ثم ولذلك لا يمكن تحريرها.
  • في بيئة ذاكرة التي تتم إدارتها بشكل حيوي: التخلص من الذاكرة ولكن عدم جمع ، لأن مرجع إلى الكائن ما تزال نشطة. لأن ما تزال نشطة مرجع إلى الكائن مجمّع البيانات المهملة أبداً بتجميع تلك الذاكرة. يمكن أن يحدث هذا مع مرجع يتم تعيين من قبل النظام أو البرنامج.
  • في بيئة ذاكرة التي تتم إدارتها بشكل حيوي: يمكن جمع أداة تجميع مجمعي البيانات المهملة وإرجاعه مجاني الذاكرة ولكن أبداً إلى نظام التشغيل. يحدث هذا عند جامع البيانات المهملة لا يمكن نقل الكائنات التي لا تزال في استخدام جزء من الذاكرة الحرة المتبقية.
  • في أي بيئة الذاكرة: يؤدي إدارة عندما يتم التصريح عن العديد من كائنات كبيرة أبداً السماح ترك نطاق الذاكرة ضعيف. نتيجة لذلك، يتم استخدام الذاكرة ولا يتم حذف بشكل صحيح بعد استخدامها لتحرير.

مناقشة

وبسبب حزمة مجموعة البيانات المهملة التي يتم تطبيق في Microsoft .NET Framework ليس من الممكن أن يكون لديك مشكلة حدوث تسرب للذاكرة في تعليمات برمجية تمت إدارتها. يقترح هذا الأسئلة اثنين: كيف ثم يمكن حدوث تسرب للذاكرة ؟ لماذا فإنه يظهر وجود تسرب للذاكرة

يمكن حدوث تسرب للذاكرة في تطبيق .NET Framework عند استخدام التعليمات البرمجية غير المُدارة كجزء من التطبيق. هذه التعليمة البرمجية غير المُدارة حدوث تسرب الذاكرة و .NET Framework لا عنوان وقت التشغيل هذه المشكلة.

بالإضافة إلى ذلك، قد تظهر مشروع فقط أن يكون لديك مشكلة حدوث تسرب للذاكرة. يمكن أن تحدث هذه الحالة إذا تم تعريف العديد من كائنات كبيرة (مثل الكائنات DataTable) ثم إضافة إلى مجموعة (مثل DataSet). قد لا يتم إصدار الموارد التي تملكها هذه الكائنات ثم يتم ترك الموارد الحياة بالنسبة تشغيل الكل من البرنامج. يظهر هذا أن يكون تسرب ولكنه فعلياً العرَض الطريقة التي تخصيص ذاكرة في البرنامج فقط.

على سبيل المثال، لديك DataSet. كل مرة يتم فيها تشغيل استعلام جديد ، يمكنك إضافة عنصر DataTable جديد إلى ذلك DataSet لاحتواء البيانات التي يتم إرجاعها. في حالة كميات كبيرة من البيانات أبداً التخلص من البيانات يبقى خلالها طالما كان DataSet يزال قيد الاستخدام. إذا حدث هذا، كافية مرات من الممكن نفاد الذاكرة. هذا ليس تسرب للذاكرة ولكنه بدلاً من ذلك وجود مشكلة في إدارة الذاكرة. راجع المثال التعليمات البرمجية التالي:
  Dim DS As DataSet  Dim cn As New SqlClient.SqlConnection("data source=localhost;initial catalog=Northwind;integrated security=SSPI")  cn.Open()   Dim da As New SqlClient.SqlDataAdapter("Select * from Employees", cn)  Dim i As Integer  DS = New DataSet()  For i = 0 To 1000      da.Fill(DS, "Table" + i.ToString)  Next				
ملاحظة هذا المثال فقط متكررة من التعليمات البرمجية. يفترض هذا المثال أن Microsoft SQL Server مثبت على الكمبيوتر المحلي أن المستخدم الذي يتم تشغيل هذه التعليمة البرمجية لديه حق الوصول إلى قاعدة بيانات Northwind المضمنة في SQL Server.

على الرغم من أن هذه التعليمة البرمجية مجدي obviously و العملي لا ، فإذاحذفت خطأ توضح أنه إذا تم إضافة كائنات إلى مجموعة (مثل إضافة الجداول إلى مجموعة DataSet) ، الكائنات تبقى نشطة طالما أن يبقى خلالها المجموعة إذا تم تعريف مجموعة مستوى البرنامج العمومية الكائنات يتم التصريح عن خلال البرنامج وإضافتها إلى أن مجموعة وهذا يعني أنه على الرغم من أن الكائنات لم تعد موجودة في النطاق الكائنات يبقى خلالها لأن فإنها تكون لا تزال تتم الإشارة.

كل مرة تحدث ، مقدار الذاكرة يستخدم البرنامج يزداد. لم تقليل الذاكرة حتى نهاية البرنامج أو إصدار الكائنات من المجموعة. عند مشاهدة البرنامج على جهاز عرض أداء هذا يبدو أن تسرب ذاكرة ولكن لا. البرنامج الذي يتحكم الذاكرة الاستمرار ولكن قد اختار عدم لتحرير المستند. يمنع الحقيقة لدى البرنامج يظل عنصر التحكم هذا من يتم حدوث تسرب للذاكرة ولكن يمكن جعله حقيقة أن يحافظ على البرنامج زيادة مقدار الذاكرة المستخدمة في يبدو أن تسرب للذاكرة.

أعراض حدوث تسرب للذاكرة

عند استمرار مقدار الذاكرة الذي يستخدمه برنامج لزيادة أثناء التنفيذ, وهذا العرَض تسرب للذاكرة. (يمكنك مشاهدة هذا العدد من الذاكرة خلال جهاز عرض أداء.) أخيراً مقدار الذاكرة الذي يستخدمه البرنامج قد يؤدي برنامج تشغيل نفاد في الموارد إلى العطل.
مراجع
التالي قائمة مواضيع التعليمات للحصول على مزيد من المعلومات حول الذاكرة وإدارة:
  • فئة GC
  • عدادات أداء الذاكرة
  • إدارة الذاكرة التلقائي
  • interoperating مع برمجية غير مُدارة
لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
317297تخطيط للتصحيح تعليق و تسرب الذاكرة deadlocks و حالات السباق في Visual Basic .NET
لمزيد من المعلومات، قم بزيارة مواقع الويب Network (MSDN) المطور Microsoft التالية:
مسح

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 318263 - آخر مراجعة: 12/06/2006 23:18:59 - المراجعة: 4.7

  • Microsoft Common Language Runtime (included with the .NET Framework) 1.0
  • Microsoft Common Language Runtime (included with the .NET Framework 1.1)
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • kbmt kbvs2005swept kbvs2005applies kbinfo KB318263 KbMtar
تعليقات