当前位置: 首页 > 知识库问答 >
问题:

C#IDisposable正确使用和调用

施振海
2023-03-14

这可能是一个新问题,所以我会马上说出来。这是我第一次创建IDisposable类,我想确保我正确创建了我的类,正确调用了它,并正确处理了它。谢谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Crawler
{
    class LoggingClass
    {
        public class LoggingDisposeable : IDisposable
        {
            public void GenericLogging(string systemMsg, string SystemClass, string SystemSection, string ID, string FixID, string baseURL, string mysqlQueryName, string mysqlQuery)
            {
                string Loggingall = " insert into tblLogs " +
                                "set SystemMsg='" + systemMsg.Replace("'", "''") + "'" +
                                ",SystemClass = '" + SystemClass.Replace("'", "''") + "'" +
                                ",SystemSection = '" + SystemSection.Replace("'", "''") +
                                ",ID = '" + CarID.Replace("'", "''") + "'" +
                                ",FixID = '" + FixID.Replace("'", "''") + "'" +
                                ",baseurl = '" + baseURL.Replace("'", "''") + "'" +
                                ",mysqlqueryName = '" + mysqlQuery.Replace("'", "''") +
                                ",mysqlquery = '" + mysqlQuery.Replace("'", "''") + "'" +
                                ",Site = 'AutoTrader'" +
                                ",TimeStamp = Now()";
                using (var MYSQLP = new MySQLProcessing.MySQLProcessor())
                {
                    MYSQLP.MySQLInsertUpdate(Loggingall, "Loggingall");
                }
            }

            public void Dispose()
            {
                this.Dispose(true);
                GC.SuppressFinalize(this);
            }

            protected virtual void Dispose(bool disposing)
            {
                if (!this.Disposed)
                {
                    if (disposing)
                    {
                        // Perform managed cleanup here.

                    }

                    // Perform unmanaged cleanup here.

                    this.Disposed = true;
                }
            }

            protected bool Disposed { get; private set; }

        }
    }
}

这就是我所说的。

 var options = new ParallelOptions();
options.MaxDegreeOfParallelism = 5;
                Parallel.ForEach(urlTable.AsEnumerable(),options, drow =>
            {

共有1个答案

薛华奥
2023-03-14

我认为你打算这样做:

public class LoggingDisposeable : IDisposable
{
    MySQLProcessing MySQLP;

    public LoggingDisposeable()
    {
        MYSQLP = new MySQLProcessing.MySQLProcessor();
    }

    public void GenericLogging(string systemMsg, string SystemClass, string SystemSection, string ID, string FixID, string baseURL, string mysqlQueryName, string mysqlQuery)
    {
        string Loggingall = " insert into tblLogs " +
                        "set SystemMsg='" + systemMsg.Replace("'", "''") + "'" +
                        ",SystemClass = '" + SystemClass.Replace("'", "''") + "'" +
                        ",SystemSection = '" + SystemSection.Replace("'", "''") +
                        ",ID = '" + CarID.Replace("'", "''") + "'" +
                        ",FixID = '" + FixID.Replace("'", "''") + "'" +
                        ",baseurl = '" + baseURL.Replace("'", "''") + "'" +
                        ",mysqlqueryName = '" + mysqlQuery.Replace("'", "''") +
                        ",mysqlquery = '" + mysqlQuery.Replace("'", "''") + "'" +
                        ",Site = 'AutoTrader'" +
                        ",TimeStamp = Now()";

            MYSQLP.MySQLInsertUpdate(Loggingall, "Loggingall");                
    }

    public void Dispose()
    {
        MYSQLP.Dispose();
    }
}

然后像这样使用:

using (var logClass = new LoggingDisposeable())
{
    var options = new ParallelOptions();
    options.MaxDegreeOfParallelism = 5;
    Parallel.ForEach(urlTable.AsEnumerable(), options, drow =>
        {
            logClass.GenericLogging("ZipCode not available for this dealerL", "DealershipRequest", "checkExistingDealers", dealerID, "DealerShipZipCode", rDealerLink, "", "");
        });
}
 类似资料:
  • 本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出

  • 我目前正在从事一个项目,该项目需要一个生成简单XML的对象。我对XML很陌生,还在学习c 我试图实现的是一个可以在代码中这样调用的函数: 在这一行之后,字符串应该包含如下内容:

  • 问题内容: 我正在阅读有关PyQt5的一些文档,以提出一种简单的信号插槽机制。由于设计方面的考虑,我停了下来。 考虑以下代码: 为了跟踪对滑块所做的更改,我仅打印并记录所做的更改。我对代码不满意的是,我需要调用三次插槽以将相同的信息发送到3个不同的插槽。 是否可以创建自己的将整数发送到单个插槽的函数。插槽功能又会发出需要进行的更改吗? 也许我不完全了解它的目的,因为在PyQt Signal-Slo

  • 我用PHPass散列密码已经很久了。我承认仍然有一些我不完全理解(或忽略)的东西来正确地散列密码,所以今天我查看了所有我能找到的关于它的信息。 回顾PHPass文档,我已经进入了这个: 除了实际的哈希之外,phpass 在对新密码或密码进行哈希处理时会透明地生成随机 salt,并将哈希类型、salt 和密码拉伸迭代计数编码到它返回的“hash 编码字符串”中。当phpass根据存储的哈希对密码或密

  • 问题内容: 我的代码有最后一个问题,涉及反射包中的.Call函数。 所以我在打这样的电话: 我正在执行.Call的方法如下: 我不太了解的是如何操作“ in”变量,以便将需要的映射正确传递到函数中。我看到make()中的第二个参数是参数的长度吗?但是我不太了解如何格式化var以正确传递参数。我递归地遇到错误消息: 任何帮助将非常感激! 问题答案: 来自: 呼叫调用函数与输入参数。例如,如果,代表去

  • 我创建了一个ExecutorService来管理所有单独的线程,每个线程都处理一个套接字连接。我在每个线程中重写了中断方法,以便在线程中断时关闭套接字,以防套接字当前处于不可中断的方法(如socketserver.accept())。 如果我在应用程序关闭时手动调用线程上的中断,一切都会正常关闭。但是,如果我使用我的ExecutorService并运行Shutdown Now,它似乎根本没有调用重