Проблема переполнения таблицы символов в Ruby - PullRequest
4 голосов
/ 10 февраля 2010

Я написал некоторый Ruby-код для импорта данных Google n-грамм в хеш-таблицу, сопоставляя слова с подписями под их счетчики. Я использую символы в отличие от строк для ключей. Я уже давно запускаю этот код на Linux-машине без проблем. Запуск его на моем Mac этим утром привел к ошибке времени переполнения таблицы символов после загрузки около 2 миллионов пар ключ-значение. Я не понимаю, что является причиной этой ошибки. У кого-нибудь есть предложения о том, что может быть причиной? Я использую Ruby 1.9.1 под OS X 10.5.8.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Хотя использование Symbol для ключей вместо String, как правило, более эффективно, получаемая эффективность пропорциональна уровню дублирования. Поскольку ваши ключи по определению уникальны, вам, вероятно, следует просто использовать строковые ключи, чтобы избежать застревания таблицы символов, полной записей.

1 голос
/ 10 февраля 2010

Разница 64-битная бс. 32-битный рубин? Я подозреваю это из-за твоего наблюдения

вызвала ошибка времени переполнения таблицы символов после загрузки около 2 миллионов пар ключ-значение

Если это так, то вы ничего не можете с этим поделать, кроме использования собственной 64-битной сборки ruby, если строки не подходят из-за дизайна приложения. В противном случае вам придется идти со строками. Преобразование легко:

:symbol.to_s == "symbol"
"symbol".to_sym == :symbol
...