Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我使用线程获取大量数据,是否应该使用多个连接?_C#_Multithreading_Db2_Ibm Midrange - Fatal编程技术网

C# 如果我使用线程获取大量数据,是否应该使用多个连接?

C# 如果我使用线程获取大量数据,是否应该使用多个连接?,c#,multithreading,db2,ibm-midrange,C#,Multithreading,Db2,Ibm Midrange,我正在使用AS400的iDB2/iSeries连接器一次获取大量数据。我正在创建一个到数据库的连接,为了提高性能,我将这个连接与几个线程(大约10个)一起使用。总共创建并释放了50条命令,关闭了每个DataReader 除了一件事之外,一切都很顺利:我没有设法关闭那个连接。我得到了以下异常(第一行表示“对象引用未设置为对象的实例”): 使用替代线程将使数据处理更加透明和清晰 关心共享您的连接-如果需要,请使用该声明 了解事务作用域和连接池-这是使用DB连接时需要了解的内容 如果在连接周围使用而不

我正在使用AS400的iDB2/iSeries连接器一次获取大量数据。我正在创建一个到数据库的连接,为了提高性能,我将这个连接与几个线程(大约10个)一起使用。总共创建并释放了50条命令,关闭了每个DataReader

除了一件事之外,一切都很顺利:我没有设法关闭那个连接。我得到了以下异常(第一行表示“对象引用未设置为对象的实例”):

  • 使用替代线程将使数据处理更加透明和清晰
  • 关心共享您的连接-如果需要,请使用该声明
  • 了解事务作用域和连接池-这是使用DB连接时需要了解的内容

  • 如果在连接周围使用
    而不是显式调用
    Close()
    ,是否仍会发生异常?坦白地说,我不记得上次调用
    Close()
    -
    时使用
    更方便、更可靠。我使用了“使用”,但connection.dispose()方法真的关闭了连接吗?我不这么认为:如果我手动操作,我可以看到连接的状态仍然是“打开”。无论是
    Close
    还是
    Dispose
    都不会真正关闭连接,或者根据配置,两者都会关闭连接。默认情况下,大多数提供程序使用连接池,因此
    Close
    Dispose
    都只是将基础连接放回可用池中。如果认为
    Dispose
    在这里做了一些错误或不同的事情,那将是一种误解。如果禁用了连接池(通常在连接字符串上),然后
    Close
    Dispose
    都将终止基础连接。清晰简洁:谢谢。在多个线程之间共享单个连接通常是不明智的。我已经用任务替换了所有线程:不确定是否会更改任何内容,但代码更清晰!谢谢我在读你的建议:我很快就会回来。一个小问题:如果我不更新/插入/删除,我真的需要锁吗?@Nicolas如果你从多个线程访问同一个连接,那么是:绝对需要。连接通常不用于并发访问,因此这里的
    只是同步对连接本身的访问。如果您没有使用来自多个线程的同一连接,那么:否。
        {"La référence d'objet n'est pas définie à une instance d'un objet."}
        [System.NullReferenceException]: {"La référence d'objet n'est pas définie à une instance d'un objet."}
        Data: {System.Collections.ListDictionaryInternal}
        HelpLink: null
        HResult: -2147467261
        InnerException: null
        Message: "La référence d'objet n'est pas définie à une instance d'un objet."
        Source: "IBM.Data.DB2.iSeries"
        StackTrace: "   à IBM.Data.DB2.iSeries.iDB2Connection.Close()\r\n   à WcfApp.Metier.InitApp() dans c:\\projet\\WSApp.cs:ligne 450"
        TargetSite: {Void Close()}