csharp log4net的を各クラスで毎回GetLoggerするか,上下文内の记录器をGetLoggerして使いまわすかでコストの差を见てみた。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp log4net的を各クラスで毎回GetLoggerするか,上下文内の记录器をGetLoggerして使いまわすかでコストの差を见てみた。相关的知识,希望对你有一定的参考价值。

// なぜかWPFで作っているが…。
public partial class Window1 : Window
{
	public Window1()
	{
		InitializeComponent();

		// log4netを各クラスで毎回GetLoggerするか、Context内のLoggerをGetLoggerして使いまわすかで
		// コストの差を検証してみた。
		// 毎回:    76.988K
		// 使い回し:77.484K
		// よって、コストに差はない。
		// あるかと思ったんだけどなあ…。
#if false
		var hoge = new List<Hoge>();
		for (int i = 0; i < 100000; i++)
		{
			hoge.Add(new Hoge(i));
		}
#else
		var hoge2 = new List<Hoge2>();
		var ct = new Context();
		for (int i = 0; i < 100000; i++)
		{
			hoge2.Add(new Hoge2(ct, i));
		}
#endif
	}
}

public class Hoge
{
	private log4net.ILog logger;

	private readonly int id;

	public Hoge(int i)
	{
		this.id = i;
		this.logger = log4net.LogManager.GetLogger(i.ToString());
		this.logger.Info((i + 1).ToString() + "回目のインスタンス作成です。");
	}
}

public class Context
{
	private log4net.ILog logger;
	public log4net.ILog Logger { get { return logger; } set { this.logger = value; } }
}

public class Hoge2
{
	private readonly Context context;
	private readonly int id;

	public Hoge2(Context c, int i)
	{
		this.id = i;
		this.context = c;
		this.context.Logger = log4net.LogManager.GetLogger(i.ToString());
		this.context.Logger.Info((i + 1).ToString() + "回目のインスタンス作成です。");
	}
}

以上是关于csharp log4net的を各クラスで毎回GetLoggerするか,上下文内の记录器をGetLoggerして使いまわすかでコストの差を见てみた。的主要内容,如果未能解决你的问题,请参考以下文章

markdown TimeWithZoneクラスでUTCの时间を作る

csharp 的SerialPortクラスのラッパー

csharp GameControllerクラスを取得する静メソッド

csharp MATRIX4X4クラスを使って座标変换するサンプル

csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する

csharp ジェネリッククラスに定义した静态フィールドは型パラメータ毎に定义される。