Я в настоящее время пытаюсь уменьшить количество подобных запросов обрабатываются в бизнес-слое:запросов Кэширования уменьшить обработку (TPL?)
- Кэширования запросов метод получает
- Performing медленных обработки задач (один раз для всех подобных запросов)
- Возврат результат каждого метода запрашивающего вызывает
Things отметить, является то, что:
- Оригинальные звонки метода не в настоящее время в асинхронном BeginMethod()/EndMethod (IAsyncResult)
- просит прибыть быстрее, чем время, необходимое для создания выходного
- Я пытаюсь использовать TPL, где это возможно, поскольку я в настоящее время пытаюсь узнать больше об этой библиотеке
например. Улучшение следующих
byte[] RequestSlowOperation(string operationParameter)
{
Perform slow task here...
}
Любые мысли?
Развейте:
class SomeClass
{
private int _threadCount;
public SomeClass(int threadCount)
{
_threadCount = threadCount;
int parameter = 0;
var taskFactory = Task<int>.Factory;
for (int i = 0; i < threadCount; i++)
{
int i1 = i;
taskFactory
.StartNew(() => RequestSlowOperation(parameter))
.ContinueWith(result => Console.WriteLine("Result {0} : {1}", result.Result, i1));
}
}
private int RequestSlowOperation(int parameter)
{
Lazy<int> result2;
var result = _cacheMap.GetOrAdd(parameter, new Lazy<int>(() => RequestSlowOperation2(parameter))).Value;
//_cacheMap.TryRemove(parameter, out result2); <<<<< Thought I could remove immediately, but this causes blobby behaviour
return result;
}
static ConcurrentDictionary<int, Lazy<int>> _cacheMap = new ConcurrentDictionary<int, Lazy<int>>();
private int RequestSlowOperation2(int parameter)
{
Console.WriteLine("Evaluating");
Thread.Sleep(100);
return parameter;
}
}
Почему вы даже используете 'Lazy' здесь? Я думаю, что делегат, переданный 'GetOrAdd()', не будет выполнен, если значение для этого ключа уже существует. –
svick
Следует отметить, что это не исключает блокировку, вы просто используете структуру данных, которая скрывает сложность от вас (ConcurrentDictionary). –
Ваше предложение довольно приятно usr. Я просто проверяю, как очистить этот словарь в моем сценарии. Спасибо за ваш отзыв. – Westy