.Net:マルチスレッドのコスト

私は最近、ユーザーのリクエストを処理するWindowsサービスを作成するという簡単なタスクを得ました。 これらの要求が何であり、どのプロトコルでサービスが機能するかという問題は、この記事の範囲外です。 私にとってより興味深いと思われた別の要因は、マルチスレッドのクエリ処理を行うかどうかでした。 一方では、シーケンシャル実行により、情報の処理プロセスが遅くなります。 一方、スレッドを作成して起動するコストは正当化されない場合があります。
したがって、初期データは、ピーク時に1秒あたり20の単純なクエリ(1分あたり1200リクエスト)です。 「サーバー」のテスト:Celeron、3GHz、1GB(70%無料)。

シングルスレッドシステム


最初に、シングルスレッドクエリ実行の基本クラスを作成します。
using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  1. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  2. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  3. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  4. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  5. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  6. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  7. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  8. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  9. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  10. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  11. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  12. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  13. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  14. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  15. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  16. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  17. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  18. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  19. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  20. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  21. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  22. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  23. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  24. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  25. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  26. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  27. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  28. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  29. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  30. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  31. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  32. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  33. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  34. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  35. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  36. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  37. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  38. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  39. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  40. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  41. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  42. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  43. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  44. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  45. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
  46. using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .
using System; using System.Diagnostics; using System.Threading; namespace TestConsoleApplication { class mockClass { private readonly Int32 incriment_speed; private Int32 inc; public mockClass( int incriment_speed) { this .incriment_speed = incriment_speed; inc = 0; } public Int32 incriment() { Thread.Sleep(incriment_speed); return inc++; } public Int32 getIncriment() { return inc; } } class TestConsoleApplication { static void Main( string [] args) { if (args.Length<1) return ; Int32 mockSpeed = 0; if (! Int32 .TryParse(args[0], out mockSpeed)) return ; var mock = new mockClass(mockSpeed); int beginTick = Environment.TickCount; for ( int j = 0; j < 1200; j++) { mock.incriment(); } int endTick = Environment.TickCount; var performance = new PerformanceCounter( "Process" , "Private Bytes" , Process.GetCurrentProcess().ProcessName); Console .WriteLine(mock.getIncriment()); Console .WriteLine( "tick: {0}" , endTick - beginTick); Console .WriteLine( "memory: {0:N0}K" , (performance.RawValue/1024)); Console .ReadLine(); } } } * This source code was highlighted with Source Code Highlighter .

クエリ実行の遅延のいくつかのパラメーターでプログラムを実行します:2、5、10
2510
ダニ記憶ダニ記憶ダニ記憶
368810 792K728110 780K1312510 792K

ご覧のとおり、メモリは実質的に影響を受けず、時間は(mockSpeed + 1)* 1200にほぼ等しくなります。 オーバーヘッドのために余分なミリ秒を相殺します。

マルチスレッドシステム


マルチスレッドで動作するようにプログラムを書き直し、最適化して結果を比較します。
  1. システムを使用して ;
  2. System.Diagnostics を使用します。
  3. System.Threading を使用します。
  4. 名前空間 TestConsoleApplication
  5. {
  6. クラス mockClass
  7. {
  8. プライベート 読み取り専用 Int32 incriment_speed;
  9. private Int32 inc;
  10. パブリック mockClass( int incriment_speed)
  11. {
  12. this .incriment_speed = incriment_speed;
  13. inc = 0;
  14. }
  15. パブリック Int32犯罪()
  16. {
  17. Thread.Sleep(incriment_speed);
  18. return inc ++;
  19. }
  20. パブリック Int32 getIncriment()
  21. {
  22. return inc;
  23. }
  24. }
  25. クラス TestConsoleApplication
  26. {
  27. private static mockClass mock = null ;
  28. 静的 void threadmethod()
  29. {
  30. ロック (モック)
  31. {
  32. mock.incriment();
  33. }
  34. }
  35. static void Main( string [] args)
  36. {
  37. if (args.Length <1) return ;
  38. Int32 mockSpeed = 0;
  39. if (! Int32 .TryParse(args [0]、 out mockSpeed)) return ;
  40. mock = new mockClass(mockSpeed);
  41. var performance = new PerformanceCounter( "Process""Private Bytes" 、Process.GetCurrentProcess()。ProcessName);
  42. long performance_RawValue = 0;
  43. int beginTick = Environment.TickCount;
  44. ロック (モック)
  45. {
  46. forint j = 0; j <1200; j ++)
  47. {
  48. var trd = 新しいスレッド(threadmethod、65536); //スタックに1ページを割り当てます
  49. trd.Start();
  50. }
  51. performance_RawValue = performance.RawValue;
  52. }
  53. int end1Tick = Environment.TickCount;
  54. while (mock.getIncriment()<1200)
  55. {
  56. Thread.Sleep(2);
  57. }
  58. int end2Tick = Environment.TickCount;
  59. Console .WriteLine( "starttick:{0}" 、end1Tick-beginTick);
  60. Console .WriteLine( "alltick:{0}" 、end2Tick-beginTick);
  61. Console .WriteLine( "memory:{0:N0} K" 、(performance_RawValue / 1024));
  62. Console .ReadLine();
  63. }
  64. }
  65. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


-2510
-開始ティックすべてのダニ記憶開始ティックすべてのダニ記憶開始ティックすべてのダニ記憶
シングルスレッド-368810 792K-728110 780K-1312510 792K
マルチスレッド6564234323 508K6257719323 508K75013735323 508K

マルチスレッドのパフォーマンスをテストすると、プロセスの起動時間に新しい値が現れました。 この値によって、プログラムの全体的な期間が増加します。 プロセスのおおよその開始は0.5ミリ秒です。 また、使用済みメモリの量が大幅に増加しており、起動されたスレッドのスタックに費やされています。

まとめ


テーブル内のすべての比較値を選択します。
-シングルスレッドマルチスレッド
総時間メインスレッドの合計時間は、すべてのリクエストの実行時間に依存しますメインスレッドの稼働時間は、リクエストの数に依存します
合計プロセッサー時間低寄生負荷スプリアス負荷が2倍高い
記憶要求の数に関係なく、メモリ不足の要求スレッドスタックごとに少なくとも256KBのメモリが要求ごとに消費されます


ここに、そのような質問の研究で出てきた「学生実験室作業」があります。 石を投げないでください:)

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


All Articles