gpt4 book ai didi

vb.net - 如何主要为数据库键创建一个系统范围的独立通用计数器对象?

转载 作者:行者123 更新时间:2023-12-03 12:57:41 26 4
gpt4 key购买 nike

我想创建/使用一个系统范围内独立的通用“计数器对象”,它可以以线程安全的方式通过 COM 调用。

计数器对象将被传递一个 ID 以识别要返回的计数器、处理计数、“保持”计数(偶尔)、具有合理的性能(尽可能快),也许每秒能够进行 1000 次计数或更好(1 毫秒)以及可以跨进程/进程外访问。当前计数状态必须在对象重新启动/关闭之间保持不变。

计数器对象很可能是以某种形式的自由线程字典实现的“单例”类型对象,可能包含 10 个计数器(可能最多 50 个)。计数需要是单调且一致的(即:保证唯一的顺序值)。

每个计数器都应该有几个方法,比如reset、inc、dec、set、clear、remove。作为一种奢侈,我想要一个可变增量(即:“逐步”值)。为了支持线程安全,可能需要一些临界区或互斥调用。它只需要返回一个 long/4byte 有符号整数。

我真的想要可以从任何地方调用的东西,包括 VBScript,所以我认为 COM 是我的首选解决方案。

它的主要用途是用于数据库键。我无法使用 autoinc 或 guid 类型的键,此时已经排除了数据库生成的计数系统。

我花了几天时间研究这个问题,我真的很难找到解决方案。我能找到的最好的是一个自由线程字典对象,它可以使用来自 Motobit 的 COM+ 进行实例化。 - 它似乎提供了所有的“基础”,我想我可以为此创建某种形式的包装器。

所以,这里是我的问题:

  • 这样的“通用目的”
    反对象已经存在?你能指导我吗? (MS做了
    做一个名为的 IIS/ASP 对象
    'MSWC.Counter' 但这不是
    “跨进程”/进程外
    组件并且不是线程安全的。 (但如果是这样,那就行了!)
  • 创建这样的最好方法是什么
    一个组件? (我更喜欢 VB6
    现在,[别问!] 但可以在 VB.NET2005 中做
    如果我必须)。我没有
    要使用的技能/知识/工具
    还要别的吗。

  • 我渴望一个可行的解决方案。我需要具体指导!如果有人可以为我编写代码,我愿意为此付费。

    更新:
  • GUID 有什么问题? a) 幸运的话是 16 字节(二进制存储),如果不是,则是 32 字节以上(没有格式化的 ANSI),甚至更糟(64 字节 Unicode)。 b) 我有一个大容量复制的应用程序,其中 GUID 太大(与实际行数据相比)和 c) 索引和插入的开销 d) 我想要一个可读的数字! - 我只需要 4 字节整数,那么为什么不尝试得到它呢?我知道你会说磁盘空间很便宜,但对于我的应用程序来说,成本是缓慢插入,而 guid 没有帮助(我已经尝试/测试过)但如果我有选择,我宁愿不使用。
  • Autonumber/autoincs 是邪恶的:a) 在插入之后才获得值,b) 特定于 session ,c) 容易丢失/搞砸表更改,d) 对多表插入没有好处,(它不是MS-SQL Svr) 加上我需要在我的数据库外使用计数器...
  • 最佳答案

    听上去,您要创建的是 ActiveX EXE。它们在自己的进程中运行,但可以通过从它实例化一个对象来从任何其他进程访问,就好像它只是另一个 COM 对象。它处理将其内部线程与调用它的任何进程的线程同步所需的所有编码(marshal)处理。由于您计划使用的只是整数,因此无需担心在线程之间传递的对象的线程安全性。

    您很可能可以使用 MSWC.Counter该 ActiveX EXE 中的对象并让它执行计数器工作。

    关于vb.net - 如何主要为数据库键创建一个系统范围的独立通用计数器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2578881/

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