Можно ли использовать другой поток внутри блокировки для перенаправления вывода в файл? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть две функции, использующие оператор блокировки, где после завершения некоторых операций я перенаправляю вывод в файл .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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...