У меня есть две функции, использующие оператор блокировки, где после завершения некоторых операций я перенаправляю вывод в файл .txt. Я понял, что их выполнение занимает много времени, что приводит к блокированию их операций и снижению производительности приложения в целом.
Я думал, что высокое время выполнения может быть связано с операциями записи в файл. Что было бы наиболее эффективным способом сократить время выполнения? Должен ли я использовать другой поток для операций записи, возможно ли это внутри блокировки без удержания блокировки?
Упрощенная версия моего кода показана ниже:
StatsInformation statsInfo = new StatsInformation ();
List<int> lInt = new List<int>();
public void FunctionEnq(List<byte> lByte, int _int)
{
lock (OperationLock)
{
//Do some work here
lInt.Add(_int);
string result = "New Int " + _int + " size " + lInt.Count + " time " + DateTime.Now.ToString("hh:mm:ss.fff");
statsInfo.WriteStatsInFile(result);
}
}
public (List<byte> _outByte, int _time) FunctionDeq()
{
List<byte> _outByte = new List<byte> ();
int _time = -1;
lock (OperationLock)
{
//Do some work here
_outByte.Add(...);
int _int = lInt[0];
//do operations
_time = _int;
lInt.RemoveAt(0);
string result = "Get Int " + _int + " new size " + lInt.Count + " time " + DateTime.Now.ToString("hh:mm:ss.fff");
statsInfo.WriteStatsInFile(result);
}
return (_outByte, _time);
}