2015-05-26 4 views
0

У меня есть список строки, как этотповысить производительность списка <T> с блокировкой и сделать его преемником?

private object = new object(); 
    public List<string> list { 
    get{ 
      lock(object){ 
      return _list; 
      } 
     } 
    } 
    List<string> _list = new List<string>(); 
    //some event which trigger's 1000 in a second 
    public void event(object sender, string e){ 
       list.add(e); 
    } 
    public void processList(){ 
     //process the list items one by one and remove it.  

    } 
    public void writeOnDisk(){ 
      //write list on Disk 
    } 

теперь моя проблема заключается в Список скорость обработки медленнее, чем заполнить. И я хочу взять резервную копию списка на диске для сбоя приложения или сбоя системы, но боюсь, если напишет список дисков, чем это замедлит производительность . Я не хочу потерять данные даже в одном элементе. Можете ли вы предложить мне лучший подход в этом отношении

+0

Я рекомендую изменить свой заголовок на тот, который суммирует вашу проблему. Ваш заголовок может быть использован для десятков тысяч вопросов на этом сайте. –

+0

Производительность относительно. Что именно вы пытаетесь достичь? Из вашего описания это похоже на то, что вы пытаетесь реализовать какую-то очередь заданий? Пожалуйста, будьте немного яснее относительно «медленного», «imrpove» и, конечно, что именно означает «обработка». – LocEngineer

+0

Если вам нужно сохранить список, вы потеряете некоторую производительность при его сохранении (или, по крайней мере, вы будете использовать текущую реализацию). Возможно ли, что потеря производительности (которая может быть _very_ small) приемлема, зависит от вас. Мы не можем ответить на это. Если вы не можете потерять один элемент, вы можете вообще рассмотреть другой подход. – CodeCaster

ответ

0

Использовать потоковые сейфы для .Net 4.0 или выше. В вашем случае, рекомендуется использовать ConcurrentQueue<T>

Thread safe collections in .NET

И одно из узких мест должно быть I/O записи файлов, вы можете рассмотреть возможность писать по партии, а не построчно.

+0

На какой вопрос вы отвечаете? – CodeCaster

+0

@CodeCaster OP запрашивает у себя производительность, используя список, на самом деле «lock» снижает производительность. Использование 'ConcurrentQueue ' может выпустить дорогостоящий переход ядра. – Eric

+0

Возможно, вы захотите упомянуть об этом в своем ответе. OP также спрашивает что-то вроде «как постоянно сохранять список?» _, Поэтому, если использование другого типа коллекции не решает (много) проблемы _ «элементы добавляются быстрее, чем они обрабатываются» _ , то это всего лишь половина ответа. – CodeCaster

 Смежные вопросы

  • Нет связанных вопросов^_^