Я хотел бы создать / использовать независимый от всей системы универсальный «объект-счетчик», который можно вызывать через COM поточно-ориентированным способом.
Объекту счетчика будет передан идентификатор, чтобы определить, какой счетчик вернуть, обработать счет, «сохранить» счет (иногда), иметь разумную производительность (как можно быстрее), возможно, способную к 1000 счетам в секунду или лучше ( 1 мс) и быть доступным кросс-процесс / вне процесса. Текущее состояние счетчика должно сохраняться между перезапусками / выключениями объекта.
Объект счетчика, скорее всего, является объектом типа «синглтон», реализованным в виде словаря со свободной резьбой, содержащего, может быть, 10 счетчиков (возможно, 50 макс.). Счет должен быть монотонным и непротиворечивым (то есть: гарантированные уникальные последовательные значения).
Каждый счетчик должен иметь несколько методов, таких как сброс, inc, dec, set, clear, remove. Как роскошь, я хотел бы иметь переменную приращения (то есть: значение «шаг за шагом»). Для поддержки потоковобезопасного, возможно, некоторого вызова критического раздела или вызова мьютекса. Ему просто нужно вернуть длинное / 4-байтовое целое число со знаком.
Я действительно хочу что-то, что можно вызвать из любого места, включая VBScript, поэтому я считаю, что COM - мое предпочтительное решение.
Основное использование это для ключей базы данных. Я не могу использовать ключи типа autoinc или guid и на этом этапе исключил системы подсчета, сгенерированные базой данных.
Я провел дни, исследуя это, и я действительно изо всех сил пытался найти решение. Лучшее, что я могу найти, - это объект словаря со свободным потоком, который можно создать с помощью COM + из Motobit - кажется, он предлагает все «основы», и я думаю, я мог бы создать какую-то форму обертки для этого.
Итак, вот мои вопросы:
Имеет ли такое «общее назначение»
контр-объект уже существует? Вы можете направить меня к этому? (MS сделал
сделать объект IIS / ASP под названием
'MSWC.Counter', но это не так
«кросс-процесс» / вне процесса
компонент и не является потокобезопасным. (но если бы это было так, то подойдет!)
Как лучше всего создавать такие
Компонент? (Я бы предпочел VB6
Прямо сейчас, [не спрашивай!], но можно сделать в VB.NET2005
если бы мне пришлось). У меня нет
навыки / знания / инструменты для использования
все остальное.
Я отчаянно нуждаюсь в работоспособном решении. Мне нужно конкретное руководство! Если кто-нибудь может что-то написать для меня, я готов заплатить за это.
Обновление:
Что не так с GUID? a) 16 байт, если мне повезет (двоичное хранилище), 32 + байт, если я не (ANSI без форматирования) или еще хуже (64-байтовый Unicode). б) у меня есть приложение с большим объемом репликации, где GUID слишком велик (по сравнению с фактическими данными строки) и в) накладные расходы на индексирование и вставки; г) я хочу читабельное число! - Мне нужно всего лишь 4 байта, так почему бы не попробовать это? Я знаю, что вы скажете, что дисковое пространство дешево, но для моего приложения стоимость в медленных вставках, и руководства не помогают (и я пробовал / проверял), но предпочел бы не использовать, если у меня есть выбор.
Autonumber / autoincs являются злыми: a) не получают значения до окончания вставки, b) специфичны для сессии, c) легко теряются / портятся при изменении таблицы, d) бесполезны вставки таблиц (это не MS-SQL Svr) плюс мне нужны счетчики вне моей БД ...