التخلص بشكل صحيح الموارد المستخدمة من قبل SMTPClient

StackOverflow https://stackoverflow.com/questions/1128390

سؤال

انا املك ج # الخدمة الذي - التي يعمل باستمرار مع بيانات اعتماد المستخدم (أي ليس كإحباط، لا أستطيع تغيير ذلك على الرغم من أنني أريد). بالنسبة للجزء الأكبر، يبدو أن الخدمة تعمل على موافق، ولكن في كثير من الأحيان في كثير من الأحيان قصفت إعادة تشغيل دون سبب واضح (يتم تعيين Servicer Manager لإعادة تشغيل الخدمة في التعطل).

أنا أفعل جوهري تسجيل الحدث, ، ولدي نهج الطبقات ل معالجة الاستثناء وأعتقد أنني على الأقل نوع من المعنى:

  • أساسا حصلت على افضل مستوى استثناء عام، استثناء استثناء وبدء استثناءات بدء التشغيل.
  • ثم حصلت على العديد من المعالجين في "مستوى القيادة"(أي إجراءات محددة تدير الخدمة)
  • أخيرا، أتعامل مع بعض الاستثناءات التي تم التعامل معها في مستوى الطبقة

لقد كنت أتطلع إلى ما إذا كانت أي موارد لا يتم إصدارها بشكل صحيح، وبدأت في المشكوك في شفرة البريد الخاصة بي (إرسال البريد الإلكتروني). لقد لاحظت أنني لم أستدعي التخلص من كائن mailmessage., ، لقد قمت الآن بإعادة كتابة رمز SendMail كما هو موضح أدناه.

ال السؤال الأساسي هو:

  • هل سيصدر هذا الرمز بشكل صحيح جميع الموارد المستخدمة لإرسال رسائل البريد الإلكتروني؟
  • أنا لا أرى طريقة ل تخلص التابع كائن SMTPClient?
  • (للسجل: أنا لا أستخدم "تهيئة الكائن" لجعل العينة أسهل في القراءة)
    private static void SendMail(string subject, string html)
    {
        try
        {
            using ( var m = new MailMessage() )
            {
                m.From = new MailAddress("service@company.com");
                m.To.Add("user@company.com");
                m.Priority = MailPriority.Normal;
                m.IsBodyHtml = true;
                m.Subject = subject;
                m.Body = html;
                var smtp = new SmtpClient("mailhost");
                smtp.Send(m);
            }
        }
        catch (Exception ex)
        {
            throw new MyMailException("Mail error.", ex);
        }
    }
هل كانت مفيدة؟

المحلول

أعرف أن هذا السؤال هو ما قبل .NET 4 ولكن الإصدار 4 يدعم الآن طريقة التخلص من التخلص منها ترسل بشكل صحيح إنهاء خادم SMPT. انظر مرجع MSDN. و سؤال أحدث stackoverflow.

نصائح أخرى

هناك القضايا الموثقة مع فئة SMTPClient. أوصي بشراء مراقبة طرف ثالث لأنها ليست مكلفة للغاية. Chilkat يجعل واحدة كرية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top