2011-07-18 17 views
3
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.Mail; 
using System.Threading; 

namespace MGR_Backuper 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string file = "D:\\Programy\\WinRAR\\rar.exe"; 
      string command = "C:\\Users\\Pawel\\Desktop\\Praca magisterska back\\mgrback-%YEAR%-%MONTH%-%DAY%-%HOUR%-%MINUTES%-%SECONDS%.rar"; 
      string arg = "a \"%FILENAME%\" \"C:\\Users\\Pawel\\Desktop\\Praca magisterska\\*\" -m5 -ep1 -hppasspass -rr5 -inul -r0"; 
      var t1 = DateTime.Now; 
      command = command.Replace("%YEAR%", "" + t1.Year); 
      if (t1.Month < 10) command = command.Replace("%MONTH%", "0" + t1.Month); 
      else command = command.Replace("%MONTH%", "" + t1.Month); 

      if (t1.Day < 10) command = command.Replace("%DAY%", "0" + t1.Day); 
      else command = command.Replace("%DAY%", "" + t1.Day); 

      if (t1.Hour < 10) command = command.Replace("%HOUR%", "0" + t1.Hour); 
      else command = command.Replace("%HOUR%", "" + t1.Hour); 

      if (t1.Minute < 10) command = command.Replace("%MINUTES%", "0" + t1.Minute); 
      else command = command.Replace("%MINUTES%", "" + t1.Minute); 

      if (t1.Second < 10) command = command.Replace("%SECONDS%", "0" + t1.Second); 
      else command = command.Replace("%SECONDS%", "" + t1.Second); 

      arg = arg.Replace("%FILENAME%", command); 
      var t2 = DateTime.Now; 
      Process proc = new System.Diagnostics.Process(); 
      proc.EnableRaisingEvents = false; 
      proc.StartInfo.FileName = file; 
      proc.StartInfo.Arguments = arg; 

       proc.Start(); 

       while (!proc.HasExited) 
        Thread.Sleep(50); 


      var t3 = DateTime.Now; 
      try 
      { 
       MailMessage mailMsg = new MailMessage(); 
       mailMsg.To.Add("[email protected]"); 

       // From 
       MailAddress mailAddress = new MailAddress("[email protected]", "Sender"); 
       mailMsg.From = mailAddress; 

       // Subject and Body 
       mailMsg.Subject = "MGR"; 
       mailMsg.Body = "Backup magisterki"; 
      mailMsg.Attachments.Add(new Attachment(command)); 

       SmtpClient smtpClient = new SmtpClient("server.serv.com", 587); 
       NetworkCredential credentials = new NetworkCredential("login", "password"); 
       smtpClient.Credentials = credentials; 
       smtpClient.Timeout = Int32.MaxValue; 
       smtpClient.Send(mailMsg); 
      } 
      catch (Exception ex) 
      { Console.WriteLine(ex.ToString()+"\n"); } 
      var t4 = DateTime.Now; 
      Console.WriteLine("Czas kompresji: \t{0:0.00}s", (t3 - t2).TotalSeconds); 
      Console.WriteLine("Czas wysyłania: \t{0:0.00}s", (t4 - t3).TotalSeconds); 
      Console.WriteLine("Czas całkowity: \t{0:0.00}s", (t4 - t1).TotalSeconds); 
      Console.ReadKey(true); 
     } 
    } 
} 

これは、自分の重要なデータをメールアドレスに送信することで、重要なデータを簡単にバックアップするためのプログラムです。作成されたアーカイブは約1.5 MBです。電子メールの送信には約7〜8分かかります。これは、電子メールプログラムまたはウェブメールで同じファイルを送信しようとすると5〜6秒かかるため、接続不良のためではありません。なぜこのような電子メールを送信するのが遅いのですか?電子メールの送信に時間がかかるのはなぜですか?

EDIT:

私は別のテスト

  var ts1 = DateTime.Now; 
      smtpClient.Send(mailMsg); 
      var ts2 = DateTime.Now; 

を作り、それがsmtpClient.Send(mailMsg);が鈍化する責任があることを確認しました。どんな考え?

+2

電子メールの部分が遅いかどうか確認したことがありますか?それとも、ファイルをアーカイブするプロセスのスポーンになる可能性がありますか? –

+0

はい、デバッグを開始し、コードをステップ実行して遅延の原因を確認してください。 –

+0

添付されているものは何ですか?添付ファイルのサイズは重要です。あなたは非同期を送信していないので、サーバーがあなたのリクエストが正常に送信されたことを確認するのを待っています。 – Mohgeroth

答えて

4

私は同じ問題に直面しました。メールを送信する前にSMTPサーバーが何らかのチェックを行っているようです。

私は以下のように新しいスレッドを使用して非同期的にメールを送信して問題を解決しました。

private void SendMail(string from, string to) 
{ 
    //your logic to send the mail 
} 

メールを非同期で送信します。

ThreadStart threadStart = delegate() { SendMail(from, to); }; 
Thread thread = new Thread(threadStart); 
thread.Start(); 
+0

それを手伝ってもらえますか?これはどうすればできますか? – Ichibann

+0

ここに私達.....行く –

+0

ところで、どのようにスレッドを送信する電子メールをスピードアップできますか?ちょっと興味があるんだけど。 – Ichibann

関連する問題