Сообщение Thread-safe словарь с авто-инкрементируемым значением от 31.01.2015 4:31
Изменено 31.01.2015 4:32 AJ
Дисклеймер: всегда писал на Java и только недавно стал пользоваться C#, так что просьба не обращать внимание на стиль
Для решения одной задачи понадобилось написать такой словарь, который бы было можно использовать из разных потоков и который бы реализовывал вот такой интерфейс
Производительность, конечно, требуется выше, чем в случае если каждый метод сихронизован в лоб.
Если строка запрашивается впервые, то возвращаемый результат равен количеству строк на данный момент находящихся в словаре и автоматически инкрементируется. Нумерация начинается с нуля. "Дырки" в счетчике не допускаются, то есть если в словаре N строк, то набор индексов должен быть таким: 0, 1, 2, ..., N-1
Предполагается, что есть несколько наборов строк (каждый количеством до нескольки сотен), которые будут проиндексированы при старте приложения и в дальнейшем новые строки запрашиваться не будут.
Написал вот такой код, просьба подсказать, если есть более оптимальный вариант:
Для решения одной задачи понадобилось написать такой словарь, который бы было можно использовать из разных потоков и который бы реализовывал вот такой интерфейс
public interface IIndexer
{
IEnumerable<string> Keys { get; }
int GetIndex(string key);
int MaxIndex { get; }
}
Производительность, конечно, требуется выше, чем в случае если каждый метод сихронизован в лоб.
Если строка запрашивается впервые, то возвращаемый результат равен количеству строк на данный момент находящихся в словаре и автоматически инкрементируется. Нумерация начинается с нуля. "Дырки" в счетчике не допускаются, то есть если в словаре N строк, то набор индексов должен быть таким: 0, 1, 2, ..., N-1
Предполагается, что есть несколько наборов строк (каждый количеством до нескольки сотен), которые будут проиндексированы при старте приложения и в дальнейшем новые строки запрашиваться не будут.
Написал вот такой код, просьба подсказать, если есть более оптимальный вариант:
Решение | |
| |
Thread-safe словарь с авто-инкрементируемым значением
Дисклеймер: всегда писал на Java и только недавно стал пользоваться C#, так что просьба не обращать внимание на стиль
Для решения одной задачи понадобилось написать такой словарь, который бы было можно использовать из разных потоков и который бы реализовывал вот такой интерфейс
Производительность, конечно, требуется выше, чем в случае если каждый метод сихронизован в лоб.
Если строка запрашивается впервые, то возвращаемый результат равен количеству строк на данный момент находящихся в словаре и автоматически инкрементируется. Нумерация начинается с нуля. "Дырки" в счетчике не допускаются, то есть если в словаре N строк, то набор индексов должен быть таким: 0, 1, 2, ..., N-1
Предполагается, что есть несколько наборов строк (каждый количеством до нескольки сотен), которые будут проиндексированы при старте приложения и в дальнейшем новые строки запрашиваться не будут.
Написал вот такой код, просьба подсказать, если есть более оптимальный вариант:
Для решения одной задачи понадобилось написать такой словарь, который бы было можно использовать из разных потоков и который бы реализовывал вот такой интерфейс
public interface IIndexer
{
IEnumerable<string> Keys { get; }
int GetIndex(string key);
int MaxIndex { get; }
}
Производительность, конечно, требуется выше, чем в случае если каждый метод сихронизован в лоб.
Если строка запрашивается впервые, то возвращаемый результат равен количеству строк на данный момент находящихся в словаре и автоматически инкрементируется. Нумерация начинается с нуля. "Дырки" в счетчике не допускаются, то есть если в словаре N строк, то набор индексов должен быть таким: 0, 1, 2, ..., N-1
Предполагается, что есть несколько наборов строк (каждый количеством до нескольки сотен), которые будут проиндексированы при старте приложения и в дальнейшем новые строки запрашиваться не будут.
Написал вот такой код, просьба подсказать, если есть более оптимальный вариант:
Решение | |
| |