none
關於random的效率問題 RRS feed

  • 問題

  • 最近有一個用javascript寫的project,效率非常低落,經常造成瀏覽器無回應,本想說使用c#來寫成視窗程式

    ,看看會部會有改善,卻沒什麼幫助,進一步測試的結果,發現在亂數產生這部分,效率差距很大,以下是我測

    試用的程式碼。

    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();sw.Reset();
    sw.Start();
    for (int i = 0; i < 1754400; i++)
    {
        Random r = new Random(Guid.NewGuid().GetHashCode());
        int a = r.Next(0, 4);
    }
    sw.Stop();//碼錶停止
    string result1 = sw.Elapsed.TotalMilliseconds.ToString();
    MessageBox.Show("計算時間="+result1);

    1754400是我每個工作循環所估計會使用到rand的次數,如要求精確還會倍數成長,而此段程式碼使用javascript

    撰寫並使用ie9測試,與使用c#撰寫,在同個電腦上,執行時間相差約數十倍,使用c#撰寫的程式效率較差,想請教

    是否有較有效率的亂數產生方式?

    2011年9月30日 上午 11:54

解答

所有回覆

  • 請把 Random r = new Random(Guid.NewGuid().GetHashCode());
    放到迴圈外試試

    放到迴圈內 new 太多物件了


    Shadowと愉快なコード達
    • 已標示為解答 熊掌 2011年9月30日 下午 12:29
    2011年9月30日 下午 12:01
  • 本來一直以為不重新生成一個物件,會造成亂數容易重複,

    修正後速度快多了,感謝你的提醒。

    2011年9月30日 下午 12:16
  • 你還是在 client 用 javascript 吧~

    1754400 個整數,加上分隔符號,是兩個 bytes ,所以你總計要傳遞 3.4 MB 的字串到 client ,那還不如直接在 client 中產生。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年9月30日 下午 12:19
  • 應該說原本的架構就很詭異,實際會使用演算法功能的function不會開放給user使用,卻將它一起寫進了網頁中,

    現在想要將功能分開,讓管理員使用視窗程式來分析數據就好。

    2011年9月30日 下午 12:27