Опция, которую вы, похоже, пропустили, - это использование встроенной функции .NET GetHashCode () для строки. Я совершенно уверен, что это то, что происходит за кулисами в словаре C # со строкой как <TKey>
(я упоминаю об этом, потому что вы пометили вопрос со словарем). Я не уверен, как класс словаря .NET относится к вашему Castle.Windsor
или system.runtime.caching
интерфейсу, который вы упомянули.
Причина, по которой вы не хотите использовать GetHashCode в качестве хэш-ключа, заключается в том, что MicroSoft специально отказывается от этой функции, чтобы переключаться между версиями без предупреждения (например, чтобы обеспечить более уникальную или более быструю функцию выполнения). Если этот кэш будет жить исключительно в памяти, то это не проблема, поскольку для обновления .NET Framework потребуется перезапустить приложение, очистив кэш.
Для пояснения, просто использование составной строки (вариант 1) должно быть достаточно уникальным. Похоже, вы добавили все возможное для уникальной квалификации ваших методов.
Если вы в конечном итоге введете строку слов MD5 или Sha256 в ключ словаря, программа в любом случае, вероятно, перефразирует строку за кулисами. Прошло много времени с тех пор, как я прочитал о внутренней работе класса Dictionary. Если вы оставите его как Dictionary<String, IEnumerable<MyObject>>
(в отличие от вызова GetHashCode () для самих строк с использованием возвращаемого значения int в качестве ключа), то словарь должен обрабатывать коллизии самого хеш-кода.
Также обратите внимание, что (по крайней мере, согласно тестовой программе, запущенной на моей машине), MD5 примерно на 10% быстрее, чем SHA1, и в два раза быстрее, чем SHA256. String.GetHashCode () примерно в 20 раз быстрее, чем MD5 (он не криптографически безопасен). Были проведены тесты на общее время для вычисления хэшей для тех же 100 000 случайно сгенерированных строк длиной от 32 до 1024 символов. Но независимо от точных чисел, использование криптографически безопасной хеш-функции в качестве ключа только замедлит вашу программу.
Я могу опубликовать исходный код для своих сравнений, если хотите.