Поврежденные зарегистрированные строкиC#

Место общения программистов C#
Ответить
Anonymous
 Поврежденные зарегистрированные строки

Сообщение Anonymous »

У меня есть приложение C# .net 6, которое использует множество потоков (скажем, 15-30) с общим экземпляром регистратора. После многих часов работы (один день или более) зарегистрированные строки повреждены как: < /p>

[2024-11-25 09: 56: 28: 569] [ T: G-D] [PID: 6288] [TH: THEAD ID = 76] [lib: **********. P> Связанный код: < /p>

Код: Выделить всё

_logger.LogDebug("Record {0} management completed", _info.recordName);
, где _info.recordname - это строка, которая не должна изменяться после запуска, а _logger - ilogger от Microsoft .Extensions.logging , который завершает nlog .
corpluction также происходит на фиксированных строках, as: < /p>

Код: Выделить всё

_logger.LogDebug("Program completed");
< /code>
Когда возникает проблема, почти все следующие зарегистрированные строки повреждены (также из разных потоков). Через некоторое время (даже часы) исключено: < /p>

Произошла ошибка во время записи в Logger (ы). (Входная строка не была в правильном формате.)

Входная строка не была в правильном формате.

[2024-11-25 09: 56: 28: 582] [T: CE-M] [PID: 6288] [TH: идентификатор потока = 76]. (Входная строка не была в правильном формате.)

at microsoft.extensions.logging.logger.throwloggingError (список1 exceptions)   at Microsoft.Extensions.Logging.Logger.Log[TState](LogLevel logLevel, EventId eventId, TState state, Exception exception, Func< /code> 3 Formatter)

at microsoft.extensions.logging.loggerextensions.log (ilogger logger, loglevel loglevel, eventId EventId, исключение исключения, строковое сообщение, объект [] args)

at ******* • в правильном формате.

at System.text.valuestringBuilder.ThrowFormaterRor ()

at system.text.valuestringbuilder.appendformathelper (поставщик iformatprovider, строковый формат, paramsarray args)

at system.string.formathelper (paramsarray args) Поставщик iformatprovider, формат строки, параметры Args)

at System.String.format (поставщик iformatProvider, строковый формат, объект [] args)

at microsoft.extensions.logging.logvaluesformatter.format (object [] values)

at nlog.extensions.logging.nloglogger.createlogeventinfo [tstate] (loglevel Nlogloglevel, EventId EventId, государство TSTATE, исключение исключения, Func3 formatter)   at NLog.Extensions.Logging.NLogLogger.Log[TState](LogLevel logLevel, EventId eventId, TState state, Exception exception, Func< /code> 3 Formatter)

at microsoft.extensions.logging.logger.g__loggerlog | 14_0 [tstate] (loglevel loglevel, eventid eventid, ilogger logger, исключение исключения, func3 formatter, List
1 & Exceptions, tstate & State)

Наверняка формат шаблона правильный в коде, и тот же журнал использовался много раз раньше Исключение. В приложении нет явного небезопасного кода (по крайней мере, в моих модулях). Единственное сомнение в некоторых касках с использованием следующего кода: < /p>

Код: Выделить всё

public static T CastTo(this byte[] bytes) where T : struct
{
ArgumentNullException.ThrowIfNull(bytes);

if (bytes.Length != Marshal.SizeOf())
throw new ArgumentException($"{nameof(bytes)}.{nameof(bytes.Length)} != {nameof(Marshal)}.{nameof(Marshal.SizeOf)}()");

GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);

try
{
return Marshal.PtrToStructure(handle.AddrOfPinnedObject());
}
finally
{
handle.Free();
}
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SetProgramRecoverabilityStatusRequest
{
public long programId;
public uint counter;
public uint status;
}

// Usage
byte[] data;
SetProgramRecoverabilityStatusRequest requestData;
//... data is set here
requestData = CastTo(data);
У меня никогда не было исключения из Castto , поэтому я полагаю, что здесь нет развращения памяти.
Есть ли у вас есть идеи Где проблема могла бы родиться и как это отладить/исправить?
Большое спасибо.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ed-strings
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»