首页 > 解决方案 > 我如何安全地处理变量?

问题描述

我可以在以下代码 中安全地处理变量purge的替代/更好的方法是什么?factory

        public void Run( string XmlFragment ) {
            XmlNode xmlNode = null;

            try
            {
                xmlNode = Common.ConstructXmlNodeFromString(XmlFragment, "Params");
                var list = DataList();

                foreach (var item in list)
                {
                    var factory = new PurgerFactory(item);
                    IPurger purge = factory.Purger;

                    purge.Purge();

                    purge = null;
                    factory = null;
                }

                Common.PurgeEmail(SuccessEmail());
            }
            catch (Exception ex)
            {
                string errorMessage = $"Purge Error:  {ex.Message}. {Environment.NewLine} Stack Trace: {ex.StackTrace}";
                Common.PurgeEmail(FailEmail(errorMessage));
            }
        }

标签: c#console-applicationdispose

解决方案


我想你知道,C# 有一个垃圾收集器。因此,对于不访问非托管资源的普通对象,只需让垃圾收集器清理它们就可以了。

如果您想确定性地关闭托管资源,则主要范例是继承自IDisposable一个using语句。这将在退出 using 语句的代码块时调用 Dispose 函数。

如果你想清理东西,但你不在乎什么时候发生,你可以使用~(MyType). 这在 GC 执行 GC 循环时调用,称为 Finalizer。我个人还没有遇到过这个 vs 的用例IDisposable。但是,如果您只是想确保说一个文件,或者在此电子邮件对象被垃圾收集时被删除,那么这对您来说可能是一个很好的用例。


推荐阅读