0

私は ASP.NET C# アプリケーションに取り組んでおり、アクションのパフォーマンスを改善したいと考えています。

私が持っているのはボタンです。ユーザーがクリックすると、Ajax 呼び出しを送信してデータベースからデータを取得し、データを表示します。

データベースのスキーマは次のようになります。

データベース スキーマ

国のリストがあり、各国には複数のシリーズ (人口、石油、水など) があり、各シリーズには複数の年があります (各年には値があります)。つまり、基本的には、国ごとに何年にもわたるシリーズの進化です。

データを取得するには、AJAX を使用して Web サービスを呼び出します。Web サービスは入力としてシリーズ名を取り、すべての年の各国についてそのシリーズのデータ​​を出力として必要とします。出力データは、次のような Javascript オブジェクトである必要があります。

水 = { "1990": { "アメリカ": 0.1, "カナダ": 0.3, "オーストラリア": 0.4 }, "1991": { "アメリカ": 0.1, "カナダ": 0.5 }}

ajax 呼び出し:

        $.ajax({
                type: "POST",
                url: "Service/WebService.asmx/GetData",
                dataType: "json",
                async: false,
                data: "{'Series':'" + Series+ "'}",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    mapValues = JSON.parse(data.d); 
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
            });

このサービスは、Entity フレームワークを使用してデータベースから読み取ります。

var Context = new DataModel.DBEntities();
IEnumerable<YearClass> r = (from y in Context.Years
                                          where y.Series.Name == Variable
                                          select new YearClass
                                          {
                                              year = y.Name,
                                              value = y.Value,
                                              CountryCode = y.Series.Country.Code
                                          });

yearClass は、ここで使用するためだけに強く型付けされた型です。

次に、すべての年をループし、必要な形式に一致するように文字列を連結して JSON を作成します。

ただし、このプロセスには多くの時間が費やされているため、パフォーマンスを向上させる方法を見つける必要があります。

改善できる部分は?どんなヒントでも大歓迎です。

4

1 に答える 1

0

JSON を自分で生成しないでください。適切なプロパティを持つオブジェクト グラフを作成したらJsonResult、関数を使用してコントローラー アクションからそれを返しJson()ます。JSON.netなどのサードパーティの JSON シリアライザーを使用することもできます。

于 2012-07-02T13:26:27.897 に答える