4

URLが入力として指定されている場合、各URLのページ読み込み時間を取得するためにどのC#コードを記述すればよいか誰かに教えてもらえますか?

また

可能であれば、それを行うソフトウェアへのリンクを教えてください。入力として複数のURLを受け取り、各URLのページ読み込み時間を提供するソフトウェア。

4

7 に答える 7

4

最初のリクエストに応答するのにかかる時間を測定しますか、それともスタイルと外部スクリプトのダウンロードおよびクライアント側のレンダリングを含めますか?

1つ目は、 WebClientを使用して簡単に解決できます。

WebClient client = new WebClient ();

// Add a user agent header in case the 
// requested URI contains a query.

client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

Stream data = client.OpenRead (@"your-url-here");
StreamReader reader = new StreamReader (data);
string s = reader.ReadToEnd();

stopwatch.Stop();
Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed);

data.Close();
reader.Close();

後者の場合は、 DocumentCompletedイベントを使用するためのメソッドを作成するフォームにWebBrowserを配置します。

// in your form declarations
Stopwatch _stopwatch = new Stopwatch();
String _url = @"your-url-here";

// in the button-click or whenever you want to start the test
_stopwatch.Start();
this.WebBrowser1.Navigate(_url);

// The DocumentCompled event handler
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url == _url)
    {  
        _stopwatch.Stop();
        Console.WriteLine("Time elapsed: {0}", _stopwatch.Elapsed);
    }
}
于 2011-11-21T13:19:59.920 に答える
3

私が質問を正しく理解している場合、Apache JMeterはこれを行うことができます:http://jmeter.apache.org/

スクリプト化可能であり、負荷テストのさまざまなシナリオを設定できます。

于 2011-11-21T19:22:00.060 に答える
2

これを試して

var URLs = new[] 
{ 
    "http://www.google.com", 
    "http://www.microsoft.com", 
    "http://www.slashdot.org"
};

var tasks = URLs.Select(
url => Task.Factory.StartNew(task => 
    {
        using (var client = new WebClient())
        {
            var t = (string)task;
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        String result = client.DownloadString(t);
        stopwatch.Stop();
            Console.WriteLine(String.Format("{0} = {1}", url, stopwatch.Elapsed));
        }
    }, url)
    ).ToArray();
    Task.WaitAll(tasks);

これで私は得ます

http://www.microsoft.com = 00:00:05.1784172 milliseconds
http://www.slashdot.org = 00:00:09.9922422 milliseconds
http://www.google.com = 00:00:10.8720623 milliseconds
于 2011-11-27T06:07:42.500 に答える
1

私はYSlowをお勧めします、ウェブサイトのパフォーマンスをチェックするための非常に便利なツールです、YSlow

于 2011-11-15T08:59:01.077 に答える
1

WebデバッグプロキシFiddlerに精通していると思います。Fiddlerには、アプリケーションに(UIのように)必要のないものがたくさんありますが、プロジェクトに含めることができる.NETライブラリを提供し、必要なすべてのHTTPnessを提供します。

FiddlerCoreは現在、任意の.NETアプリケーションで使用できる.NETクラスライブラリとして提供されています。FiddlerCoreは、ユーザーインターフェイスなしで実行される特殊用途のアプリケーション(テスト自動化など)、またはFiddlerアドオンが適切なオプションではないほど特殊化されたUI(WPFトラフィックの視覚化など)で使用するように設計されています。

ダウンロードに含まれているサンプルアプリが数分で変更され、統計タブの下のフィドラーUIに表示されるのと同じ情報にアクセスできるようになります。これらの値については、fiddlercoredllのSession.Timersオブジェクトを確認してください。

ClientConnected:15:03:05.017
ClientBeginRequest:15:03:05.056
ClientDoneRequest:15:03:05.076
ゲートウェイの決定:0ms
DNSルックアップ:3ms
TCP / IP接続:20ms
HTTPSハンドシェイク:0ms
ServerConnected:15:03:05.151
FiddlerBeginRequest:15: 03:05.152
ServerGotRequest:15:03:05.157
ServerBeginResponse:15:03:05.292
ServerDoneResponse:15:03:05.314
ClientBeginResponse:15:03:05.331
ClientDoneResponse:15:03:05.333
全体的な経過:00:00:00.2770277

これがお役に立てば幸いです。プロキシを使用する代わりに独自のセッションを作成する方法を理解する必要がありますが、これは製品の機能であり、それほど時間はかかりません。

于 2011-11-21T20:10:41.190 に答える
0

、、StopwatchおよびのいずれかがWebClient必要になりますWebRequest

于 2011-11-15T08:55:33.647 に答える
0

私はこれを使用して、内部Webサイトをアクティブに保ち、応答時間を測定/ログに記録します。これは、キープアライブサービスの一種です。

static void Main(string[] args)
{
    LoggingManager.ConfigureAtStartup();

    ErrorLogger.LogInformation("STARTED");

    try
    {
        if (args.Length < 1)
        {
            ErrorLogger.LogInformation("No parameters provided...");
            return;
        }

        int pingTimeoutMilliseconds = Convert.ToInt32(ConfigurationManager.AppSettings["pingTimeoutMilliseconds"]);

        var urls = args[0].Split(';');

        foreach (string url in urls)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                continue;
            }

            ErrorLogger.LogInformation(String.Format("Pinging url: {0}", url));

            using (var client = new WebClient())
            {
                client.Credentials = CredentialCache.DefaultCredentials;

                var stopW = new Stopwatch();

                stopW.Start();

                string result = client.DownloadString(url);

                var elapsed = stopW.ElapsedMilliseconds;
                stopW.Stop();

                if (elapsed > pingTimeoutMilliseconds)
                {
                    ErrorLogger.LogWarning(String.Format("{0} - took: {1} milliseconds to answer!", url, elapsed.ToString("N0")));

                    ErrorLogger.LogInformation(String.Format("Response was: {0} chars long", result.Length.ToString("n0")));
                }                        
            }
        }
    }
    catch(Exception exc)
    {
        ErrorLogger.LogError(exc);
    }
    finally
    {
        ErrorLogger.LogInformation("COMPLETED");

        LoggingManager.ShutdownOnExit();
    }
}

ErrorLogger私が作った小さなラッパーですLog4Net

于 2011-11-15T08:59:22.833 に答える