【发布时间】:2011-03-03 16:30:13
【问题描述】:
我想存储一个递增和递减的整数变量(用于限制对外部 API 的并发请求的计数信号量)。这很容易,除非我需要一种方法从在并行 SQL 代理作业中运行的 SSIS 包中读取/写入此变量。现在可以有 0 到 5 个 SQL 代理作业实例,因此 SSIS 包同时运行。
我有哪些读取和写入此变量的选项?将使用此变量的代码在 .NET 中编写为自定义 SSIS 任务。
该值是否完全正确并不特别重要,只要它通常接近我在公差范围内。精确会很好,但不是必需的。
我可以访问整个文件系统、注册表、数据库、服务器和 SSIS 代理,但我想经常使用 15-30 个线程检查这个变量,这在历史上会导致使用文件出现问题系统方法(我可能做错了),并且 IMO 过于密集而无法存储在数据库中。如我错了请纠正我。存储在注册表中可防止变量在服务器场中被访问。
如果有人可以提供帮助,我很乐意成为您的契约仆人。
【问题讨论】:
-
只是想知道,这个值为什么不能存在于数据库表中?所有 5 个实例都应该能够读取它,如果适用,您必须使用适当的锁定,或者我可能过度简化您的问题?当您需要获取或更新值时,您可以通过 SqlClient 自定义任务中的代码来完成。
-
主要原因只是我正在与数据库交谈的数量。我上面的概述有些简化,因为这 5 个实例中的每一个都可以有多达 20 个线程,所有线程都在一个循环中访问该变量,等待该变量低于某个阈值。最坏的情况是每秒大约 100 个查询,假设我让线程休眠一整秒。现在他们正在休眠 100 毫秒等待本地进程变量。希望这会有所帮助。
标签: c# .net multithreading ssis cross-process