2011-11-29 135 views
1

我创建了一个多线程random.org数字getter来实现到我的C#IRC机器人。我遇到的问题是,它使用了适度大的内存占用。我认为这是WebClient班。我不喜欢它如何使用~5,000K内存仅用于连接到URL,并阅读第一行并输出数字。

有没有更轻的方法呢?

class Program 
    { 
     static void Main(string[] args) 
     { 
      for (int i = 0; i < 4; i++) 
      { 
       Thread More = new Thread(GetRandomNum); 
       More.Start(); 
      } 
     } 
     public static void GetRandomNum() 
     { 
      string number; 
      for (int i = 0; i < 100; i++) 
      { 
       using (WebClient client = new WebClient()) 
       { 
        number = client.DownloadString("http://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new"); 
       } 
       Console.WriteLine(number.Trim()); 
      } 
     } 
    } 
+3

为什么你使用Random.org而不是一个好的加密PRNG?我从来没有发现通过加密PRNG选择RNG Web服务的令人信服的技术原因,并有很多理由避免它。 – CodesInChaos

+0

那么,我试图为我的IRC机器人创建一个真正的随机1-100骰子卷。 PRNG还好,我想我只是想要它是完美的:( – Kyle

回答

0

WebRequest会做伎俩。

WebRequest request = WebRequest.Create ("http://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new"); 
// If required by the server, set the credentials. 

// Get the response. 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
// Display the status. 

// Get the stream containing content returned by the server. 
Stream dataStream = response.GetResponseStream(); 
// Open the stream using a StreamReader for easy access. 
StreamReader reader = new StreamReader (dataStream); 
// Read the content. 
string responseFromServer = reader.ReadToEnd(); 
// Display the content. 
Console.WriteLine (responseFromServer); 
// Cleanup the streams and the response. 
reader.Close(); 
dataStream.Close(); 
response.Close(); 

这看起来很复杂,但代码是相当简单和直接。 内存消耗量必须比WebClient低得多。