私はmemoryappenderでlog4netを使用しています。 すべての行を変数(ここではStringBuilder)に読み込もうとすると、行数が多いときにOutOfMemory-Exceptionが発生します。私は単純にlog4netのコンポーネントのすべてが正常に動作せずにStringBuilderに一万行を追加するときに、私はまた、これを使用しようとした...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());
}
}
を:私は1mioラインでそれをテストしてみました:
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 Exceptionをスローする](http://stackoverflow.com/questions/25010604/stringbuilder-tostring-throws-outofmemory-exception) – raven