powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / string.GetHashCode() - нужна альтернатива, гарантирующая результат
25 сообщений из 81, страница 2 из 4
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556745
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. И да, хэш-функции не предназначаются, и никогда не предназначались для уникальной идентификации объектов.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556764
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregПоставил перед собой цель, и ничего кроме этой цели не видишь.
ну почему же не вижу? В самом первом сообщении написал:
_NovichokМожет кто посоветует какую-то альтернативу?
и в заголовке темы тоже

Пока приемлемой альтернативой считаю хеш MD5, тем более, что ранее такой подход у нас использовался, но был забыт
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556770
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Добро пожаловать в интернет, если вышел из лесу.
Ну, не нужно, не нужно опускаться до такого уровня...
Давайте уважать друг друга
Профессионализм человека заключается не только в умении запилить какую-то тулзовину, а еще и в умении культурного общения с коллегами по цеху, даже если эти коллеги знают меньше, чем вы
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556771
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NovichokrefregПоставил перед собой цель, и ничего кроме этой цели не видишь.
ну почему же не вижу? В самом первом сообщении написал:
_NovichokМожет кто посоветует какую-то альтернативу?
и в заголовке темы тоже

Пока приемлемой альтернативой считаю хеш MD5 , тем более, что ранее такой подход у нас использовался, но был забытО чем и речь...
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556804
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichok,
Вы обиделись на сравнение вашего обоснавания с кашей из топора.
И пошли рассуждать о форумах.
Вот и всё.
А он был прав. По вашим словам, ваша цель - экономия оперативки.
Тут нет генералов. Все одинаковы как в бане).
Удачи Вам.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556858
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Не обижался я ни на кого, и дело не в этом.
Просто вместо разговора по делу начинаются размышления не по делу. Я не прав - так и скажите, что не прав (я не самодур, и смогу признать если не прав), но каша из топора - конечно интересное сравнение, но в то же время сомнительный аргумент, не дающий понимания, почему я не прав.

По поводу форумов, извините, не из лесу вышел (да здравствует Petro123) и данная тема не первая, где авторы топиков подымают данный вопрос.
Petro123По вашим словам, ваша цель - экономия оперативки
не только, и это было обозначено в самом первом сообщении
_NovichokМожет кто посоветует какую-то альтернативу? Ну и, конечно, подход должен быть достаточно быстрым .

А теперь по делу: попробовал MD5 хеш, не подходит, поскольку нагружает процессор и использует памяти не на много меньше, и расчеты идут достаточно медленно
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556906
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NovichokА теперь по делу: попробовал MD5 хеш, не подходит, поскольку нагружает процессор и использует памяти не на много меньше, и расчеты идут достаточно медленно
Мой вариант не заинтересовал? 20971320
Если вместо hash_t взять UInt64 то получится 64-битный хэш и считать будет быстро, т.к. не требуется конвертации в Byte[].
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556907
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NovichokА теперь по делу: попробовал MD5Флудер вы. У вас по делу 15% текста.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556912
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichok,

Сформулируй проблему без хеша (может новую тему?). Пока не совсем понятно, зачем тебе строки в памяти. Зачем их идентифицировать? Что потом с идентификаторами делать? Вынимается ли потом нормальная строка по идентификатору?
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556914
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichokэто было обозначено в самом первом сообщении
Для идей по архитектуре нужна цель по ТЗ.
Там ФУНКЦИОНАЛЬНЫЕ требования. А не память и процессор.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556918
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Флудер вы. У вас по делу 15% текста.
у вас вообще 0. Будем продолжать, или по делу общаться?
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556936
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregСформулируй проблему без хеша (может новую тему?). Пока не совсем понятно, зачем тебе строки в памяти. Зачем их идентифицировать? Что потом с идентификаторами делать? Вынимается ли потом нормальная строка по идентификатору?
Проблема в следующем:
В программе обрабатываются строки, строки могут быть и короткими по нескольку символов, а могут быть и десятки тысяч. Строки могут дублироваться, поэтому разумно обработать один раз строку и запомнить, что строка уже обрабатывалась. Когда приходит такая же строка, то выдается предыдущий результат. Из-за этого уменьшается время работы программы за счет обработки только уникальных строк. Чтобы запомнить строку, можно использовать ее в качестве того самого хеша, но т.к. строки могут быть длинными, то это будет больно бить по памяти. Сохраненное значение этой строки (или ее хеш) используется только для того, чтобы обозначить, что такая строка уже приходила. Соответственно и ищется подход для идентификации строки более легковесным ключом, чем сама строка. Время создания этого ключа тоже не должно быть продолжительным.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556941
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в строке текст обычный или base64\uue\mime код или подобное?
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556945
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

обычный человекочитаемый текст
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556953
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NovichokКогда приходит такая же строка, то выдается предыдущий результат. Из-за этого уменьшается время работы программы за счет обработки только уникальных строк
Уже лучше после 2х страниц флуда.
Вы не сказали про хранилище строк.
Если оно есть, то есть ID и флаг обработки.
Или у вас сервис REST когда ничего не помните что делали со строками?
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556957
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И придумайте что вы делаете со строкой. Хотя бы размыв секретность и придумав Цель.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556958
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichok,

если это обычный текст, то используйте хеш, вероятность совпадения будет стремиться к 0, если страдаете паранойей используй 128 битный хеш.
если пренебречь этим нельзя, то при совпадении хеш кода добавляйте проверку, которая будет извлекать из хранилища строки и проверять их соответствие, вероятность такого события крайне мала, а значит на скорость работы это не окажет особого влияния. Выход только такой имхо.
как уже сказал, если строки очень большие, более 10кб, имеет смысл сжать их gzip'пом или еще чем.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556973
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes_Novichok,

если это обычный текст, то используйте хеш, вероятность совпадения будет стремиться к 0, если страдаете паранойей используй 128 битный хеш.
если пренебречь этим нельзя, то при совпадении хеш кода добавляйте проверку, которая будет извлекать из хранилища строки и проверять их соответствие, вероятность такого события крайне мала, а значит на скорость работы это не окажет особого влияния. Выход только такой имхо.
как уже сказал, если строки очень большие, более 10кб, имеет смысл сжать их gzip'пом или еще чем.
Поддерживаю.
Без хранилища строк, думаю не получится. Хотя если большие строки (например, больше 1кБ), приходят редко - то их, возможно, дешевле не хранить а еще раз обработать.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556975
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

эта часть программы не знает где и как обрабатывается строка.
это может быть Dictionary (ключом которого является ) или HashSet. Само наличие хеша или самой строки - это уже признак того, что строка была обработана
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556981
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Novichok(ключом которого является )
пардон, не дописал
ключом которого является или сама строка или ее хеш
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556987
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_NovichokПроблема в следующем:
В программе обрабатываются строки, строки могут быть и короткими по нескольку символов, а могут быть и десятки тысяч. Строки могут дублироваться, поэтому разумно обработать один раз строку и запомнить, что строка уже обрабатывалась. Когда приходит такая же строка, то выдается предыдущий результат. Из-за этого уменьшается время работы программы за счет обработки только уникальных строк. Чтобы запомнить строку, можно использовать ее в качестве того самого хеша, но т.к. строки могут быть длинными, то это будет больно бить по памяти. Сохраненное значение этой строки (или ее хеш) используется только для того, чтобы обозначить, что такая строка уже приходила. Соответственно и ищется подход для идентификации строки более легковесным ключом, чем сама строка. Время создания этого ключа тоже не должно быть продолжительным.
Тут еще бы статистику: строк в кэше, какая доля повторных запросов?

Как вариант: оставить родной 32-битный хэш, но дополнительно считать 64-битный хэш
Код: c#
1.
2.
3.
4.
5.
6.
7.
		static UInt64 Hash64(String str) {
			UInt64 h = 0;
			for(Int32 i = 0; i < str.Length; i++) {
				h = (h << 5) + h + str[i];
			}
			return h;
		}


По 64-битному дополнительная проверка, не совпало - отправка строки на обработку.
Можно и до 128 расширить: вторую половину считать при не нулевом h, например h = 123456789098765;
Но расширяя битность автоматом увеличиваешь занимаемую память.

Для управления памятью можно какой-нибудь спец.класс использовать. Например MemoryCache
Как вариант, можно посмотреть на готовые решения: Memcached
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556990
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да всё это бумагомарательство, автор пишет, что текст представляет собой обычный человеческий текст, значит уровень энтропии данных очень низкий и вероятность выпадания 2 строк с одинаковым хеш кодом крайне мала. Вы пытаетесь решать проблему, которой нет. Даже количество символов в человеческом тексте явно меньше 256\65536.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556992
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Novichok, а тебе не приходит в голову, что единственный хэш, гарантирующий соотношение 1 к 1 строки и его значения - это и есть сама строка? Если ты готов наложить ограничения, допустим будут использоваться только буквы, цифры и пара десятков спецсимволов, (т.е. не использовать 95% таблицы Unicode), хэш можно значительно уменьшить (в 10-15 раз), но его изготовление будет весьма затратной операцией.
Опять же: Если ты готов наложить ограничения, допустим будут использоваться только буквы, цифры и пара десятков спецсимволов, это уже 150 символов. Для строки, состоящей из 1..10 символов это 5е21 комбинаций, Log2(5е21) = 72.279, т.е. тип данных для уникального хэша уже должен занимать 73 бита, т.е. 10 байт.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556994
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesда всё это бумагомарательство, автор пишет, что текст представляет собой обычный человеческий текст, значит уровень энтропии данных очень низкий и вероятность выпадания 2 строк с одинаковым хеш кодом крайне мала. Вы пытаетесь решать проблему, которой нет. Даже количество символов в человеческом тексте явно меньше 256\65536.
Ту забыл количество символов в строке учесть, например если использовано 64 варианта символов, то комбинациями всего из 6 символов можно получить все возможные 32 битные хэши, для 64 надо 11 символов.
...
Рейтинг: 0 / 0
string.GetHashCode() - нужна альтернатива, гарантирующая результат
    #39556995
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesВы пытаетесь решать проблему, которой нет.
+1
Если это человечий текст, то нужно пересмотреть постановку.
Повторы если и будут, то лично по недосмотру архитектора).
...
Рейтинг: 0 / 0
25 сообщений из 81, страница 2 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / string.GetHashCode() - нужна альтернатива, гарантирующая результат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]