dポイントプレゼントキャンペーン実施中!

お世話になります、早速ですがよろしくお願いいたします。

インターネット上のサーバーから XML を取得して treeView コントロールに要素を展開したく、
ネット上の情報をもとに、

XDocument doc = XDocument.Load("http://localhost/example.xml");

とやってみましたが、XDocument.Load が初回だけ遅い気がします。

そこで、新規フォームにボタン1つとラベル2つを置いて、

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
private System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
private int cnt = 0;
private string[] url = {
"http://rss.dailynews.yahoo.co.jp/fc/domestic/rss …
"http://rss.dailynews.yahoo.co.jp/fc/rss.xml",
"http://rss.dailynews.yahoo.co.jp/fc/world/rss.xml"
};
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
this.label1.Text = this.url[cnt];
this.label2.Text = "";
this.sw.Reset();
this.sw.Start();
System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load(this.label1.Text);
this.sw.Stop();
this.label2.Text = sw.Elapsed.ToString();
cnt++;
if (cnt >= this.url.Length)
{
cnt = 0;
}
}
}
}


として動かしてみると、私のPCでは初回だけ15秒程度かかります。
原因がわからず困っております、
少しでも早くなるようにするにはどのようにすればよいか教えてください。

もし、XDocument.Load の初回が遅いのはどうしようもないのであれば、
他のよい方法を教えていただけると助かります。

ちなみに、C#&VisualStudio 初心者です。
どうぞ、よろしくお願いいたします。

質問者からの補足コメント

  • shockatz 様ありがとうございます。

    説明不足で申し訳ありません。
    御推察の通りフォームアプリケーションです。
    PHPによるWebアプリと連携する必要があり、
    XMLの取得先は、インターネット上に設置したPHPスクリプトになります。
    "http://localhost/example.xml"としたのはテスト用に置いたファイルで、
    ローカルにapacheを動かしています。
    なので、ローカルPC上のファイルを読み込むのではなく"http"経由で行いたいです。

    「stream経由の読み込み」についてご指南頂けると助かります。

    よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/22 15:57

A 回答 (1件)

えー、ちょっと状況が良く分からないのですが、


名前空間から察するにWindowsFormsアプリケーションだと思われますが、なんでわざわざ

var doc = XDocument.Load("http://localhost/example.xml");

のようにネット上(しかもlocalhostで自サーバを立てて)から読み込んでいるのでしょうか?
最初だけ読み込みが遅い、というのは、Webサーバ(IISやIIS Express)の起動オーバヘッドだと思います。

これを、

var doc = XDocument.Load("example.xml");
var doc = XDocument.Load("D:\test\example.xml");

とするか、stream経由の読込にすれば問題ないのでは。
この回答への補足あり
    • good
    • 0
この回答へのお礼

私の質問の仕方が悪かったです。
一旦、閉めます。
回答ありがとうございました。

お礼日時:2015/04/24 17:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!