все У меня большой объем данных в реальном времени, которые необходимо обработать как можно быстрее.
Эти данные поступают из потоков многосетевого соединения.
Все потоки сети проходятданные в разделяемую функцию, чтобы выполнить некоторый перевод и интерпретацию восстановленных данных, после чего она сохраняет информацию в словарь параллельных вычислений как объект за объектом.в этом словаре.
то, что происходит при получении объекта для обновления, занимает больше времени, чем допустимое время.
public class MyObject
{
System.Timers.Timer LostTimer = new System.Timers.Timer();
public int ID;
public DateTime UpdateTime;
public MyObject()
{
LostTimer.Interval = 20000;
LostTimer.Elapsed+=TimerElapsedHandler(LostTimer_Elapsed);
LostTimer.Enabled = true;
}
void LostTimer_Elapsed(object sender,EventArgs e)
{
if(UpdateTime > DateTime.Now.AddSeconds(-20))
Console.WriteLine(ID + " Lost...");
}
}
public class MyClass
{
public MyClass(){}
private ConcurrentDictionary<int,MyObject> Objects = new ConcurrentDictionary<int,MyObject>();
void NetworkThread1DataRecived(eventArgs e)
{
Translate(e.Data);
}
void Translate(string[] data)
{
Task.Factory.StartNew(()=>
{
Parallel.ForEach(data, s (()=>
{
MyObject o = null;
Objects.TryGet(int.Parse(s),out o)
if(o == null)
{
o = new MyObject();
o.ID = int.Parse(s);
o.UpdateTime = DateTime.Now;
Objects.TryAdd(s,o);
}
else
{
o.UpdateTime = DateTime.Now;
}
});
});
}
}
Теперь при работе с более чем 30K объектов это дает мнепотерянные объектыПожалуйста, мне срочно нужна помощь
Логика заключается в том, что я вычитаю льготный период объекта из текущего системного времени и сравниваю его с последним временем обновления этого объекта.Считаете ли вы, что этот тип многопоточного массива (словарь) не может обрабатывать такой большой объем данных и вызывает чтение / запись задержки доступа, что приводит к потере объекта ???до того, как я использовал List и Lock (Object) {} для обработки многопоточного доступа к этой общей памяти, но он не работает после 10 КБ объектов.после замены на словарь (.Net build in thread safe list) он хорошо работает с 30K.Моя цель - достичь 150K, могу ли я достичь этого с помощью этой логики, или у вас есть лучшие идеи.