Я использую log4net с memoryappender. Когда я пытаюсь прочитать все строки переменной (здесь: StringBuilder), я получаю OutOfMemory-Exception, когда количество строк должно быть высоким. Я тестировал его с 1mio линиями:log4net memoryappender Недостаточно памяти
public class RenderingMemoryAppender : MemoryAppender
{
public IEnumerable<string> GetRenderedEvents(List<Level> levelList = null)
{
foreach (var loggingEvent in GetEvents())
{
yield return RenderLoggingEvent(loggingEvent);
}
}
public byte[] GetEventsAsByteArray(List<Level> levelList=null)
{
var events = GetRenderedEvents(levelList);
var s = new StringBuilder();
foreach (var e in events)
{
s.Append(e);
}
//the exception is thrown here below when calling s.ToString().
return Encoding.UTF8.GetBytes(s.ToString());
}
}
, когда я просто добавить один миллион линий к StringBuilder без log4net компонент все прекрасно работает ...
Я также попытался использовать это:
var stringBuilder = new StringBuilder();
var stringWriter = new StringWriter(stringBuilder);
foreach (var loggingEvent in GetEvents())
{
stringBuilder.Clear();
loggingEvent.WriteRenderedMessage(stringWriter);
list.Add(stringBuilder.ToString());
}
но это также не сработало.
Возможный дубликат [StringBuilder.ToString() выдает исключение OutOfMemory] (http://stackoverflow.com/questions/25010604/stringbuilder-tostring-throws-outofmemory-exception) – raven