2014-09-22 7 views
0

해시를 해시하는 작은 C# 프로그램을 작성하고 있습니다. 내가 초당 통해 올 얼마나 많은 해시를 추적하는 OnTimedEvent와 타이머를 가지고 무한 동안 (사실) 루프 순간스레드를 동결하지 않고 (벤치 마크) 무한 루프

hash = md5.ComputeHash(hash); 
tell me how many times per second it can do this. 

: 나는 (다소 벤치 마크 등)이 일을하고 싶습니다 해싱을 계속하려면. Offcourse 내 프로그램과 타이머는 해시가 시작되는 즉시 멈 춥니 다.

이 작업을 수행하는 적절한 방법은 무엇입니까? 동결없이 어떻게 해싱을 유지할 수 있습니까?

미리 감사드립니다. 이 시점에 모든 것을 마틴

는 타이머를 제외하고 고 quiete 선형이다. BackgroundWorker 구성 옵션이 그렇게 나쁘지되지 않도록

public partial class Form1 : Form 
{ 
    private int count; 
    private MD5 md5; 
    private byte[] hash; 
    private bool Calculate = false; 
    private System.Timers.Timer timer; 

    public Form1() 
    { 
     InitializeComponent(); 

     count = 0; 
     PrepareFirstHash(); 
     timer = new System.Timers.Timer(1000); 
     timer.Elapsed += OnTimedEvent; 
     timer.Enabled = true; 
    } 
    private void PrepareFirstHash() 
    { 
     md5 = MD5.Create(); 
     byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes("start"); 
     hash = md5.ComputeHash(inputBytes); 
    } 
    private void DoCalc() 
    { 
     hash = md5.ComputeHash(hash); 
     count++; 
    } 
    private void OnTimedEvent(Object source, ElapsedEventArgs e) 
    { 
     SetText(count.ToString()); 
     count = 0; 
    } 

    delegate void SetTextCallback(string text); 
    private void SetText(string text) 
    { 
     if (this.label1.InvokeRequired) 
     { 
      SetTextCallback d = new SetTextCallback(SetText); 
      this.Invoke(d, new object[] { text }); 
     } 
     else 
     { 
      this.label1.Text = text; 
     } 
    } 

    private void btnStart_Click(object sender, EventArgs e) 
    { 
     Calculate = true; 
     while (Calculate){ 
      DoCalc(); 
     } 
    } 

    private void btnStop_Click(object sender, EventArgs e) 
    { 
     Calculate = false; 
    } 
} 

}

+0

이 BackgroundWorker''에 대한 작업처럼 소리 :

당신은 정말 다음 것은 유리한 출발을 줄 수 있지만, 멀티 스레드 프로그램에서 다이빙을해야합니다. http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx – Vlad

+0

을 참조하십시오. 한 가지 방법을 시도하는 중이라면, 콘솔 앱과'System.Diagnostics '를 사용하십시오. 스톱워치'? –

답변