gpt4 book ai didi

database - 使用 DB2 .NET 数据提供程序的异步过程调用

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:16 26 4
gpt4 key购买 nike

有什么方法可以使用 DB2 .NET 数据提供程序异步调用 DB2 存储过程吗?

最佳答案

有多种方法 - 哪一种合适取决于您的场景。

我在 Oracle 中所做的是根据工作项 ID 队列从数据库中取回 1000 多个 XML 项。用数据读取器一次性取出它们是行不通的,所以我在几个不同的线程上一次取出一个(每个线程从队列中取出一个工作项,直到队列为空)。当每个单独的线程取回结果时,它会将 XML 放入生产者消费者队列中——一个基于 Joseph Albahari's excellent threading tutorial 的队列。 .一个单独的线程查看生产者消费者队列,对数据执行 XSL 转换并将它们写出到一个文件中 - 当然我首先在单线程中进行了基准测试,这明显更慢。

我尝试使用 threadpool/asynchronous delegates首先(因为关于线程的一般建议是尽可能使用线程池,委托(delegate)也间接地使用线程池),如果您没有超过 64 个项目要做,这可能会起作用。 WaitHandle.WaitAll usually has a limit of 64 work items. .因为我有 1000 个,所以这不是一个好的选择,除了以 64 个批处理进行它们似乎很笨拙。

根据内存,当每个生产者线程没有更多工作要做时,我优雅地退出了生产者线程,然后阻塞直到生产者消费者队列也为空。

最重要的是确保您在每个线程上拥有完全独立的数据库对象,否则您会偶然发现线程问题。

如果您只想在 Windows 窗体/WPF 应用程序中异步执行 1 个存储过程,您可能需要查看使用 background worker component .

如果您知道是否需要任何进一步的信息,请告诉我。

关于database - 使用 DB2 .NET 数据提供程序的异步过程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com