рддреНрд╡рд░рд┐рдд рд▓реЙрдЧрд┐рдВрдЧ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреА рд╕рдмрд╕реЗ рдирд┐рдЬреА рдХреЙрд▓ рдХреЗ рдорд╛рдирджрдВрдб рд░рдЦреЗ рд╣реИрдВред рдореИрдВрдиреЗ M4 SSD рдХреЗ рд╕рд╛рде Intel Windows 10 x64 рдкрд░ log4net рдФрд░ NLog рдкрд░ рд╕рднреА рдкреНрд░рдпреЛрдЧ рдХрд┐рдПред


GitHub рдкрд░ рдХрдЪреНрдЪреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рд╕рдорд╛рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ (рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ .Net 4.7.2 + Microsoft Visual Studio 2017+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред


рдХреНрдпрд╛, рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ - рдХрдЯ рдХреЗ рддрд╣рддред


рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛:


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
KeepFileOpen = true, ConcurrentWrites = false, Async = true1,144.677 рдПрди.рдПрд╕.26.3805 рдПрди.рдПрд╕.77.7835 рдПрди.рдПрд╕.
KeepFileOpen = true, ConcurrentWrites = true, Async = true1,106.691 рдПрди.рдПрд╕.31.4041 рдПрди.рдПрд╕.87.5421 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = false, Async = true4,804.426 рдПрди.рдПрд╕.110.3406 рдПрди.рдПрд╕.103.2126 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = true, Async = true5,303.602 рдПрди.рдПрд╕.104.3022 рдПрди.рдПрд╕.102.4387 рдПрди.рдПрд╕.
KeepFileOpen = true, ConcurrentWrites = false, Async = false5,642.301 рдПрдирдПрд╕73.2291 рдПрди.рдПрд╕.68.4986 рдПрди.рдПрд╕.
KeepFileOpen = true, ConcurrentWrites = true, Async = false11,834.892 рдПрдирдПрд╕82.7578 рдПрдирдПрд╕77.4117 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = false, Async = false731,250.539 рдПрди.рдПрд╕.14,612.0117 рдПрди.рдПрд╕.27,444.8998 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = true, Async = false730,271.927 рдПрди.рдПрд╕.11,330.0172 рдПрди.рдПрд╕.10,598.1051 рдПрди.рдПрд╕.
CreateLog4NetFromString1,470.662 рдПрди.рдПрд╕.19.9492 рдПрди.рдПрд╕.18.6605 рдПрди.рдПрд╕.
CreateNLogFromString228.774 рдПрди.рдПрд╕.реи.резрейрезрел рдПрди.рдПрд╕.1.8895 рдПрди.рдПрд╕.
CreateLog4NetLogger21,046.294 рдПрди.рдПрд╕.284.1171 рдПрди.рдПрд╕.265.7633 рдПрди.рдПрд╕.
CreateNLogTypeOfLogger164,487.931 рдПрди.рдПрд╕.3,240.4372 рдПрди.рдПрд╕.3,031.1070 рдПрдирдПрд╕
CreateNLogDynamicLogger134,459.092 рдПрди.рдПрд╕.1,882.8663 рдПрди.рдПрд╕.1,761.2344 рдПрди.рдПрд╕.
FileLoggingLog4NetNoParams8,251.032 рдПрди.рдПрд╕.109.3075 рдПрди.рдПрд╕.102.2463 рдПрди.рдПрд╕.
FileLoggingLog4NetSingleReferenceParam8,260.452 рдПрди.рдПрд╕.145.9028 рдПрди.рдПрд╕.136.4776 рдПрди.рдПрд╕.
FileLoggingLog4NetSingleValueParam8,378.693 рдПрди.рдПрд╕.121.3003 рдПрди.рдПрд╕.113.4643 рдПрди.рдПрд╕.
FileLoggingLog4NetMultipleReferencesParam9,133.136 рдПрди.рдПрд╕.89.7420 рдПрди.рдПрд╕.79.5539 рдПрди.рдПрд╕.
FileLoggingLog4NetMultipleValuesParam9,393.989 рдПрдирдПрд╕166.0347 рдПрди.рдПрд╕.155.3089 рдПрди.рдПрд╕.
FileLoggingNLogNetNoParams6,061.837 рдПрди.рдПрд╕.69.5666 рдПрди.рдПрд╕.65.0726 рдПрди.рдПрд╕.
FileLoggingNLogNetSingleReferenceParam6,458.201 рдПрди.рдПрд╕.94.5617 рдПрди.рдПрд╕.88.4530 рдПрди.рдПрд╕.
FileLoggingNLogNetSingleValueParam6,460.859 рдПрди.рдПрд╕.95.5435 рдПрди.рдПрд╕.84.6969 рдПрди.рдПрд╕.
FileLoggingNLogNetMultipleReferencesParam7,236.886 рдПрди.рдПрд╕.89.7334 рдПрди.рдПрд╕.83.9367 рдПрди.рдПрд╕.
FileLoggingNLogNetMultipleValuesParam7,524.876 рдПрди.рдПрд╕.82.8979 рдПрди.рдПрд╕.77.5427 рдПрди.рдПрд╕.
NoOpLog4NetNoParams12.684 рдПрди.рдПрд╕.0.0795 рдПрди.рдПрд╕.0.0743 рдПрди.рдПрд╕.
NoOpLog4NetSingleReferenceParam10.506 рдПрди.рдПрд╕.0.0571 рдПрди.рдПрд╕.рдПрдПрдмреА 6 рдПрди.рдПрд╕.
NoOpLog4NetSingleValueParam12.608 рдПрди.рдПрд╕.0.1012 рдПрди.рдПрд╕.0.0946 рдПрди.рдПрд╕.
NoOpLog4NetMultipleReferencesParam48.858 рдПрди.рдПрд╕.0.3988 рдПрди.рдПрд╕.0.3730 рдПрди.рдПрд╕.
NoOpLog4NetMultipleValuesParam69.463 рдПрди.рдПрд╕.0.9444 рдПрди.рдПрд╕.0.8834 рдПрди.рдПрд╕.
NoOpNLogNetNoParams2.073 рдПрди.рдПрд╕.0.0253 рдПрди.рдПрд╕.0.0225 рдПрди.рдПрд╕.
NoOpNLogNetSingleReferenceParam2.625 рдПрди.рдПрд╕.0.0364 рдПрди.рдПрд╕.0.0340 рдПрди.рдПрд╕.
NoOpNLogNetSingleValueParamреи.реиsрез рдПрди.рдПрд╕.0.0222 рдПрди.рдПрд╕.0.0208 рдПрди.рдПрд╕.
NoOpNLogNetMultipleReferencesParam41.525 рдПрди.рдПрд╕.0.4481 рдПрди.рдПрд╕.0.4191 рдПрди.рдПрд╕.
NoOpNLogNetMultipleValuesParam57.622 рдПрди.рдПрд╕.0.5341 рдПрди.рдПрд╕.0.4996 рдПрди.рдПрд╕.

NoOpLogging


рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ рдХрд┐ рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ) рдХреНрд░рд┐рдпрд╛ рдбрд┐рдмрдЧ рд▓рдбрд╝рд╛рдИ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛рддрд╛ рдирд╣реАрдВ рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдгрд╛рдо:


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
NoOpLog4NetNoParams12.684 рдПрди.рдПрд╕.0.0795 рдПрди.рдПрд╕.0.0743 рдПрди.рдПрд╕.
NoOpLog4NetSingleReferenceParam10.506 рдПрди.рдПрд╕.0.0571 рдПрди.рдПрд╕.рдПрдПрдмреА 6 рдПрди.рдПрд╕.
NoOpLog4NetSingleValueParam12.608 рдПрди.рдПрд╕.0.1012 рдПрди.рдПрд╕.0.0946 рдПрди.рдПрд╕.
NoOpLog4NetMultipleReferencesParam48.858 рдПрди.рдПрд╕.0.3988 рдПрди.рдПрд╕.0.3730 рдПрди.рдПрд╕.
NoOpLog4NetMultipleValuesParam69.463 рдПрди.рдПрд╕.0.9444 рдПрди.рдПрд╕.0.8834 рдПрди.рдПрд╕.
NoOpNLogNetNoParams2.073 рдПрди.рдПрд╕.0.0253 рдПрди.рдПрд╕.0.0225 рдПрди.рдПрд╕.
NoOpNLogNetSingleReferenceParam2.625 рдПрди.рдПрд╕.0.0364 рдПрди.рдПрд╕.0.0340 рдПрди.рдПрд╕.
NoOpNLogNetSingleValueParamреи.реиsрез рдПрди.рдПрд╕.0.0222 рдПрди.рдПрд╕.0.0208 рдПрди.рдПрд╕.
NoOpNLogNetMultipleReferencesParam41.525 рдПрди.рдПрд╕.0.4481 рдПрди.рдПрд╕.0.4191 рдПрди.рдПрд╕.
NoOpNLogNetMultipleValuesParam57.622 рдПрди.рдПрд╕.0.5341 рдПрди.рдПрд╕.0.4996 рдПрди.рдПрд╕.

рдФрд░ рдХреЛрдб:


void Log4NetNoParams() => _log4Net.Debug("test"); void Log4NetSingleReferenceParam() => _log4Net.DebugFormat("test {0}", _stringArgument); void Log4NetSingleValueParam() => _log4Net.DebugFormat("test {0}", _intArgument); void Log4NetMultipleReferencesParam() => _log4Net.DebugFormat( "test {0} {1} {2} {3} {4} {5} {6} {7} {8}", _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument); void Log4NetMultipleValuesParam() => _log4Net.DebugFormat( "test {0} {1} {2} {3} {4} {5} {6} {7} {8}", _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument); void NLogNetNoParams() => _nlog.Debug("test"); void NLogNetSingleReferenceParam() => _nlog.Debug("test {0}", _stringArgument); void NLogNetSingleValueParam() => _nlog.Debug("test {0}", _intArgument); void NLogNetMultipleReferencesParam() => _nlog.Debug( "test {0} {1} {2} {3} {4} {5} {6} {7} {8}", _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument, _stringArgument); void NLogNetMultipleValuesParam() => _nlog.Debug( "test {0} {1} {2} {3} {4} {5} {6} {7} {8}", _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument, _intArgument); 

рдкрд╣рд▓реЗ, рдЖрдЗрдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреНрдпреЛрдВ рдЪреБрдиреЗ рдЧрдП:


  • рдкреНрд░рдпреЛрдЧ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред
  • NLog рдФрд░ log4net рдХреЗ рдкрд╛рд╕ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ:


    • log4net:

     void DebugFormat(string format, object arg0) 

    • NLog:

     void Debug(string message, string argument) void Debug<TArgument>(string message, TArgument argument) 

    • рд╕рд┐рджреНрдзрд╛рдВрдд: рдЬрдм рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреЛ log4net рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдмрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред NLog рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
    • рдХрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред
    • рдХреНрдпрд╛ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ "Is ... Enabled" рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ рд╣реИ

рдФрд░ рдЕрдм рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг:


  • NLog рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рддреНрдпрдХреНрд╖ рд▓реЙрдЧрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЗ рдбрд┐рдмрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реНрддрд░ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдЧрддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ (рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛)ред
  • рдпрджрд┐ рдЖрдкрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рдмрдВрдж рдХрд░ рджреА рд╣реИ рдФрд░ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХреЙрд▓ рджрд╕ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред
  • рдЬрдм рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЛ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЕрдХреНрд╕рд░ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░рдг, рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдпрд╣ Log4NetSingleReferenceParam рдФрд░ Log4NetSingleValueParam рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдордп рдХреЗ рдЕрдВрддрд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

FileLogging


рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдЕрднреА рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдЪреБрдирддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рд▓реЙрдЧрд░реНрд╕ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдмрд┐рдирд╛ рдмрдлрд░рд┐рдВрдЧ рдХреЗ, рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╛рд▓реЗ рдХреЗ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ рдЖрджрд┐ред


рдкрд░рд┐рдгрд╛рдо:


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
FileLoggingLog4NetNoParams8,251.032 рдПрди.рдПрд╕.109.3075 рдПрди.рдПрд╕.102.2463 рдПрди.рдПрд╕.
FileLoggingLog4NetSingleReferenceParam8,260.452 рдПрди.рдПрд╕.145.9028 рдПрди.рдПрд╕.136.4776 рдПрди.рдПрд╕.
FileLoggingLog4NetSingleValueParam8,378.693 рдПрди.рдПрд╕.121.3003 рдПрди.рдПрд╕.113.4643 рдПрди.рдПрд╕.
FileLoggingLog4NetMultipleReferencesParam9,133.136 рдПрди.рдПрд╕.89.7420 рдПрди.рдПрд╕.79.5539 рдПрди.рдПрд╕.
FileLoggingLog4NetMultipleValuesParam9,393.989 рдПрдирдПрд╕166.0347 рдПрди.рдПрд╕.155.3089 рдПрди.рдПрд╕.
FileLoggingNLogNetNoParams6,061.837 рдПрди.рдПрд╕.69.5666 рдПрди.рдПрд╕.65.0726 рдПрди.рдПрд╕.
FileLoggingNLogNetSingleReferenceParam6,458.201 рдПрди.рдПрд╕.94.5617 рдПрди.рдПрд╕.88.4530 рдПрди.рдПрд╕.
FileLoggingNLogNetSingleValueParam6,460.859 рдПрди.рдПрд╕.95.5435 рдПрди.рдПрд╕.84.6969 рдПрди.рдПрд╕.
FileLoggingNLogNetMultipleReferencesParam7,236.886 рдПрди.рдПрд╕.89.7334 рдПрди.рдПрд╕.83.9367 рдПрди.рдПрд╕.
FileLoggingNLogNetMultipleValuesParam7,524.876 рдПрди.рдПрд╕.82.8979 рдПрди.рдПрд╕.77.5427 рдПрди.рдПрд╕.

рдкреНрд░рдпреБрдХреНрдд рдХреЛрдб:


  • log4net:

 var roller = new RollingFileAppender(); roller.ImmediateFlush = true; roller.RollingStyle = RollingFileAppender.RollingMode.Once; roller.MaxFileSize = 128 * 1000 * 1000; 

  • NLog:

 new FileTarget($"target_{_logIndex++}") { ArchiveAboveSize = 128 * 1000 * 1000, MaxArchiveFiles = 16, AutoFlush = true, ConcurrentWrites = false, KeepFileOpen = false }; 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЙрдЧрд░реНрд╕ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрдореЛрдмреЗрд╢ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░:


  • NLog рд▓реЙрдЧ 4net рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рддреЗрдЬ рд╣реИ, рдХрд╣реАрдВ 15% рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИред
  • рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рд╣реБрдЖред рдЗрд╕рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдХреЗрд╡рд▓ Log4net рдХреЗ рдЦрд┐рд▓рд╛рдл NLog рдХреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИред

NLog - рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд╛рд▓реЗ


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
KeepFileOpen = true, ConcurrentWrites = false, Async = false5,642.301 рдПрдирдПрд╕73.2291 рдПрди.рдПрд╕.68.4986 рдПрди.рдПрд╕.
KeepFileOpen = true, ConcurrentWrites = true, Async = false11,834.892 рдПрдирдПрд╕82.7578 рдПрдирдПрд╕77.4117 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = false, Async = false731,250.539 рдПрди.рдПрд╕.14,612.0117 рдПрди.рдПрд╕.27,444.8998 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = true, Async = false730,271.927 рдПрди.рдПрд╕.11,330.0172 рдПрди.рдПрд╕.10,598.1051 рдПрди.рдПрд╕.

рд╕реНрд░реЛрдд рдХреЛрдб:


 new FileTarget($"target_{_logIndex++}") { ArchiveAboveSize = 128 * 1000 * 1000, MaxArchiveFiles = 16, AutoFlush = true, ConcurrentWrites = XXXXX, KeepFileOpen = YYYYY }; 

рдпрджрд┐ рд╣рдо XXXXX рдФрд░ YYYYY рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрди рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓рддрд╛ рд╣реИред


рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВ:


  • рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдЯреНрд░реЗрдХреНрдЯрд╡рд░реНрдЯреНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд▓рдЧрд╛рддрд╛рд░ рдореНрдпреВрдЯреЗрдХреНрд╕ рд▓реЗрдЧрд╛ рдФрд░ рджреЗрдЧрд╛, рдЬреЛ рдХрд┐ рдореБрдлреНрдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рд▓рд┐рдЦрдирд╛ рд▓рдЧрднрдЧ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
  • рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░рдирд╛ рдФрд░ рдЦреЛрд▓рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред KeepFileOpen=true рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ KeepFileOpen=true рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдИ (рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде), рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦреА, рдЬрд┐рд╕реЗ рдлреНрд▓рд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реИрдВрдбрд▓ рд▓реМрдЯрд╛ рдФрд░ рдЗрдВрдЬрди рдХреЗ рдмрд╣реБрдд рд╕реЗ рд╣реВрдб рдСрдкрд░реЗрд╢рди рднреА рдХрд┐рдПред рдирддреАрдЬрддрди, рдЧрддрд┐ рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ рдЧрд┐рд░рддреА рд╣реИред

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЙрдХрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ


рдПрдирдПрд▓рдУрдЬреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рдПрдХ рдФрд░ рдзрд╛рдЧреЗ рдкрд░ рд╕рднреА рдЖрдИрдУ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рддреБрд░рдВрдд рд╡рд░реНрддрдорд╛рди рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдПрдХ рдИрд╡реЗрдВрдЯ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рдХреНрд░реЙрдкреНрдб рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛрдВ), рдФрд░ рдЗрд╕реА рддрд░рд╣ред


рд╡рд┐рднрд┐рдиреНрди рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо:


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
KeepFileOpen = true, ConcurrentWrites = false, Async = true1,144.677 рдПрди.рдПрд╕.26.3805 рдПрди.рдПрд╕.77.7835 рдПрди.рдПрд╕.
KeepFileOpen = true, ConcurrentWrites = true, Async = true1,106.691 рдПрди.рдПрд╕.31.4041 рдПрди.рдПрд╕.87.5421 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = false, Async = true4,804.426 рдПрди.рдПрд╕.110.3406 рдПрди.рдПрд╕.103.2126 рдПрди.рдПрд╕.
KeepFileOpen = false, ConcurrentWrites = true, Async = true5,303.602 рдПрди.рдПрд╕.104.3022 рдПрди.рдПрд╕.102.4387 рдПрди.рдПрд╕.

рдЕрд╡рд░реБрджреНрдз рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдЖрдЧреЗ рдХреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ - рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдоред


AsyncTargetWrapper рдХреЛрдб:


 new AsyncTargetWrapper(fileTargetWithConcurrentWritesAndCloseFileAsync) { OverflowAction = AsyncTargetWrapperOverflowAction.Block, QueueLimit = 10000 } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд░реИрдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрд╕ рддрд░рд╣ рдХреА рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдпрд░реЗрдХреНрдЯ рдбрдВрдк рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдмрдбрд╝рд╛ рдмрдлрд░ рдЬрдорд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдВрдЪрд╛рд▓рди рдЬреИрд╕реЗ "рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓" рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА (рдФрд░ рдмрд╣реБрдд рдХреБрдЫ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖:


  • рдпрджрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рд╣рд░ рдмрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓ рдФрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдмрдбрд╝реЗ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдпрд╣ рд▓рдЧрднрдЧ рдЕрдЧреЛрдЪрд░ рд╣реЛрдЧрд╛ред
  • рд╕рднреА рдорд╛рдк рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдмрдлрд╝рд░реНрд╕ рдХреЗ рднрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдЧрддрд┐ рд╕реЗ рдбрд┐рд╕реНрдХ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо + рдорд╛рдк рдХреЗ рдмреАрдЪ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдард╣рд░рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдерд╛)ред

рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЙрдЧрд┐рдВрдЧ


рдкрд░рд┐рдгрд╛рдо:рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDevрдордВрдЭрд▓рд╛
KeepFileOpen = true, ConcurrentWrites = false, Async = true1,835.730 рдПрди.рдПрд╕.55.3980 рдПрди.рдПрд╕.163.3422 рдПрди.рдПрд╕.1,791.901 рдПрдирдПрд╕
FileLoggingLog4NetNoParams7,076.251 рдПрди.рдПрд╕.41.5518 рдПрди.рдПрд╕.38.8676 рдПрди.рдПрд╕.7,075.394 рдПрди.рдПрд╕.
FileLoggingNLogNetNoParams5,438.306 рдПрди.рдПрд╕.42.0170 рдПрдирдПрд╕37.2470 рдПрдирдПрд╕5,427.805 рдПрди.рдПрд╕.
NoOpLog4NetNoParams11.063 рдПрди.рдПрд╕.0.0141 рдПрди.рдПрд╕.0.0125 рдПрди.рдПрд╕.11.065 рдПрди.рдПрд╕.
NoOpNLogNetNoParams1.045 рдПрди.рдПрд╕.0.0037 рдПрди.рдПрд╕.0.0033 рдПрди.рдПрд╕.1.045 рдПрди.рдПрд╕.

рдирд┐рд╖реНрдХрд░реНрд╖:


  • рддреЗрдЬ рдбрд┐рд╕реНрдХ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ - M.2 SSD), рдПрдХ рдлрд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдХрдИ рдмрд╛рд░ рдХрд╛рдо рдХреА рдЧрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдПрдЪрдбреАрдбреА рдбрд┐рд╕реНрдХ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдкрд░ рднреА рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдн рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред
  • рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рддреЗрдЬреА рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд▓реЙрдЧрд┐рдВрдЧ рдХреА рдХрдореА рдПрдХ рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рд╛рдн рджреЗрддреА рд╣реИ (рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ)ред

рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдкреИрджрд╛ рдХрд░рдирд╛


рдкрд░рд┐рдгрд╛рдо:


рд╡рд┐рдзрд┐рдореАрдирддреНрд░реБрдЯрд┐StdDev
CreateLog4NetFromString1,470.662 рдПрди.рдПрд╕.19.9492 рдПрди.рдПрд╕.18.6605 рдПрди.рдПрд╕.
CreateNLogFromString228.774 рдПрди.рдПрд╕.реи.резрейрезрел рдПрди.рдПрд╕.1.8895 рдПрди.рдПрд╕.
CreateLog4NetLogger21,046.294 рдПрди.рдПрд╕.284.1171 рдПрди.рдПрд╕.265.7633 рдПрди.рдПрд╕.
CreateNLogTypeOfLogger164,487.931 рдПрди.рдПрд╕.3,240.4372 рдПрди.рдПрд╕.3,031.1070 рдПрдирдПрд╕
CreateNLogDynamicLogger134,459.092 рдПрди.рдПрд╕.1,882.8663 рдПрди.рдПрд╕.1,761.2344 рдПрди.рдПрд╕.

рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:


 [Benchmark] public object CreateLog4NetFromString() { return LogManager.GetLogger("my-logger_" + (Interlocked.Increment(ref _log4NetStringLogIndex) % 1000)); } [Benchmark] public object CreateNLogFromString() { return NLog.LogManager.GetLogger("my-logger_" + (Interlocked.Increment(ref _nLogStringLogIndex) % 1000)); } [Benchmark] public object CreateLog4NetLogger() { return new [] { LogManager.GetLogger(typeof(BaseTest)), // x16 times }; } [Benchmark] public object CreateNLogTypeOfLogger() { return new[] { NLog.LogManager.GetCurrentClassLogger(typeof(BaseTest)), // x16 times }; } [Benchmark] public object CreateNLogDynamicLogger() { return new[] { NLog.LogManager.GetCurrentClassLogger(), // x16 times }; } 

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгреА: рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рдЬреЛ рдЖрдЙрдЯ рдСрдл рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЙрдЧрд░ рдмрдирд╛рддрд╛ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реА рддрд░рд╣)ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдкрд░, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдмрд╕реЗ рдХрдард┐рди рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдПрдХ рдирд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг, рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, log4net рдХреЗ рд▓рд┐рдП рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд▓реЗрдХрд┐рди 16 (рдпрд╛рдиреА 16 рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ)ред рдпрджрд┐ рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ .Net рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рджрд┐рдпрд╛ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕рд┐рд░реНрдл рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЖрдПред


рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖:


  • рд▓реЙрдЧрд░ рд╕рдмрд╕реЗ рдЬрд▓реНрджреА рддрд╛рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (NLog рдлрд┐рд░ рд╕реЗ рддреЗрдЬ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд▓реЙрдЧрд░ рди рдХреЗрд╡рд▓ рдЙрд╕реА рддрд░рд╣ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рдж рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП)ред
  • Log4net NLog рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рд╢рд╛рдпрдж рдпрд╣ NLog рдкрдХреНрд╖ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬреЛ Debug , Info рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдХреЙрд▓ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ ILogger рдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рдЙрддреНрддрд░ рдкрддрд╛ рд╣реИ: рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЗрд╕ рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХреА рд╡рдЬрд╣ рд╕реЗ, рдЖрдЙрдЯ рдСрдл рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрджрд┐ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЖрджрд┐)ред
  • LogManager.GetCurrentClassLogger() LogManager.GetLogget(typeof(XXX)) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднреА рдзреАрдорд╛ рд╣реИред рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ NLog рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд╣рд▓реЗ рддрд░реАрдХреЗ рдХреЛ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред
  • рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рдЗрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рдЧрддрд┐ рдЕрдХреНрд╕рд░ рдЖрд╡реЗрджрди рдХреА рдардВрдбреА рд╢реБрд░реБрдЖрдд рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдЬрдм рдлреЙрд░реНрдо рдХреЗ рдХреНрд╖реЗрддреНрд░ private static readonly ILogger Log = LogManager.GetCurrentClassLogger() рд░реВрдк рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ private static readonly ILogger Log = LogManager.GetCurrentClassLogger() ред рдпрд╣реА рд╣реИ, рдпрд╣ рд╕реАрдзреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд▓реЙрдЧреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ:


  • рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЙрдЧ рдЗрди рди рдХрд░реЗрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ (рдЬреЛ рдЕрдм рддрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ)ред
  • рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХреЙрд▓ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ (рдХрдВрд╕реЛрд▓, рдЖрджрд┐) рдкрд░ рдбрдВрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ NLog рддреЗрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдвреЗрд░ рдкрд░ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ NLog рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЦрд╛рддреА рд╣реИ (рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ NLog рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдорд╛рдкреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, log4net рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ Stream рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рд░реНрдпрдХреНрд░рдо рддреЗрдЬреА рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
  • рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдмрдирд╛рдирд╛ рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдмрдирд╛рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, LogManager.GetLogger("123") , LogManager.GetLogger("123") рдЬреИрд╕рд╛ рдХреБрдЫред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрдбрд╝реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдХреНрд╡реЗрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛")ред
  • рдпрджрд┐ рдЖрдк рд▓реЙрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рд╕реАрдзрд╛ рдбреЗрдЯрд╛ рдбрдВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддреЛ рдХрдИ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдирдкреНрд▓реЛрдЧ рдвреЗрд░ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХрд░реНрд╖:


  • рдпрджрд┐ рдЖрдкрдХрд╛ рддрд░реАрдХрд╛ рдПрдХ рдордирдорд╛рдиреА рд╡рд╕реНрддреБ (рдпрд╛рдиреА object ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдЕрдиреБрдмрдВрдзреЛрдВ / рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ), рддреЛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╣реА рд╣реИ (рдпрд╛рдиреА рдлреЙрд░реНрдо рдХреЗ рддрд░реАрдХреЗ Something<TArg>(TArg arg) )ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреНрд░рдорд┐рдд рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рд╣рд╛рдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХреЛ рдЧрддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдИрдУ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдзреАрдореА рдбрд┐рд╕реНрдХ рд╡рд╛рд▓реЗ рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi456488/


All Articles