Webアプリケーションのナビゲーションカテゴリのリストがあります。 eveyユーザー用のデータベースから選択するのではなく、global.asaxのapplication_onStartに関数呼び出しを追加して、そのデータを何度も再利用される配列またはコレクションにフェッチする必要があります。データがまったく変更されない場合 - (編集 - 非常に頻繁に)これが最良の方法でしょうか?.net Webアプリケーションで高度に再利用されたデータをロードするにはどうすればいいですか
答えて
あなたは、Applicationオブジェクトのリスト項目を格納することができます。あなたはapplication_onStart()について正しいです、あなたのデータベースを読み込み、そのデータをApplicationオブジェクトにロードするメソッドを呼び出すだけです。
は、Global.asaxの
でpublic class Global : System.Web.HttpApplication
{
// The key to use in the rest of the web site to retrieve the list
public const string ListItemKey = "MyListItemKey";
// a class to hold your actual values. This can be use with databinding
public class NameValuePair
{
public string Name{get;set;}
public string Value{get;set;}
public NameValuePair(string Name, string Value)
{
this.Name = Name;
this.Value = Value;
}
}
protected void Application_Start(object sender, EventArgs e)
{
InitializeApplicationVariables();
}
protected void InitializeApplicationVariables()
{
List<NameValuePair> listItems = new List<NameValuePair>();
// replace the following code with your data access code and fill in the collection
listItems.Add(new NameValuePair("Item1", "1"));
listItems.Add(new NameValuePair("Item2", "2"));
listItems.Add(new NameValuePair("Item3", "3"));
// load it in the application object
Application[ListItemKey] = listItems;
}
}
は今、あなたは、プロジェクトの残りの部分であなたのリストにアクセスすることができます。
protected override void OnPreInit(EventArgs e)
{
ddList.DataSource = Application[Global.ListItemKey];
ddList.DataBind();
base.OnPreInit(e);
}
コードサンプルの良いソリューション - 乾杯。私はこれが本当に私が探しているものに近いと言うでしょう。 – Mike
私は静的なコレクションをプライベートとして、パブリック静的プロパティを使用して、データベースからロードまたは取得します。
また、読み込まれたときに設定された静的な日時を追加したり、一定の時間が経過してから呼び出すと、静的なコレクションをクリアして再度クエリを実行したりすることができます。
変更されない場合は、おそらくデータベースに存在する必要はありません。
データがあまりない場合は、web.configに入れるか、enumとしてコードに入れます。
良い点。データは変更される可能性があります。その質問ではデータが明確ではないため、更新しました。ごめんなさい。 – Mike
すべてを取得するのは高価な場合があります。 lazy initを試して、要求データだけを取り出し、それをキャッシュ変数に格納してください。
早すぎる最適化は悪です。つまり、アプリケーションにパフォーマンスの問題があり、ユーザーに表示する静的な情報がある場合は、そのデータをアレイに一度ロードしてアプリケーションオブジェクトに格納することができます。メモリ使用量と最適化とのバランスを慎重にしたいと思っています。
この問題は、データベースに格納されている情報を変更し、キャッシュされたバージョンを更新しないという問題があります。キャッシュされたデータと共に状態に保存するデータベースには、最終変更日付が必要です。そうすれば、変更された時間の最大値を照会して比較することができます。キャッシュされた日付より新しい場合は、それをダンプしてリロードします。
素晴らしいポイント!現在、問題はありません。私は、セッションが速くなるとボトルネックを探すことを嗅覚しています - 別名slashdot/digg/redditエフェクト。リロードの問題は、それ自体別の問題かもしれません。 – Mike
アプリケーション変数。
アプリケーション変数には.NET内のオブジェクトを含めることができるので、global.asaxでオブジェクトをインスタンス化してコード内で直接使用することができます。例えば
アプリケーション変数がメモリ内であるため、彼らは(データベースを呼び出すために持つ対)は非常に迅速です
:
// Create and load the profile object
x_siteprofile thisprofile = new x_siteprofile(Server.MapPath(String.Concat(config.Path, "templates/")));
Application.Add("SiteProfileX", thisprofile);
私はアプリケーションキャッシュ(キャッシュオブジェクト)にデータを格納することになる。
<asp:DropDownList runat="server" ID="ddList" DataTextField="Name" DataValueField="Value"></asp:DropDownList>
およびコードビハインドファイルに:例えば、Default.aspxの中のDropDownListの値をロードします。そして、私はそれをプリロードしません、私はそれが要求されたときに初めてロードします。キャッシュについてうれしいのは、そのASPです。NETはそれを管理します。これは、ファイルの変更や期間の経過後にキャッシュエントリを期限切れにするオプションを与えることを含みます。アイテムはメモリに保持されるため、オブジェクトはシリアライズ/デシリアライズされず、使用が非常に高速になります。
使い方は簡単です。 CacheオブジェクトにGetメソッドとAddメソッドがあり、それぞれアイテムを取得してキャッシュに追加します。
Jeff - 素晴らしい提案。私はページ上の他のすべてがダイナミックでヘッダーさえあるので、Webキャッシングに関するいくつかの問題がありました。毎回新鮮なコピーが欲しいので、私はそれから離れていたので、私はアプリのルートが好きです。いずれにせよ、1ヶ月に1回、便利なリフレッシュ可能性が最も良い。 – Mike
キャッシングは方法です。そして、あなたがデザインパターンに入るなら、シングルトンを見てください。
しかし、全体的にはパフォーマンスの低下に気づくまでは心配していません。
- 1. App Engineで/ WEB-INF URLを再利用するにはどうすればいいですか?
- 2. Viewオブジェクトを再利用するにはどうすればよいですか?
- 3. 更新されたXMLファイルをブラウザに再ロードさせるにはどうすればいいですか?
- 4. 複数のアプリケーションでMVC3コントローラ/ビューを再利用するにはどうすればよいですか?
- 5. iOSアプリケーションで消耗品の再利用を防止するにはどうすればよいですか?
- 6. 再利用可能なアプリケーションでモデルを拡張するにはどうすればよいですか?
- 7. 再利用のためにASP.NETプロジェクトを構成するにはどうすればいいですか
- 8. レールコンソールでモデルを再ロードするにはどうすればよいですか?
- 9. Webアプリケーションでシステムショートカットをバインドするにはどうすればいいですか?
- 10. クロスドメインアクセスでWebサービスを利用できるようにするにはどうすればよいですか?
- 11. アセンブリでCアプリケーションをロードするにはどうすればよいですか?
- 12. Asp.Netテーマを使用しているときにブラウザにキャッシュされたCSSファイルを再ロードさせるにはどうすればよいですか?
- 13. .NETアプリケーションでHTML5をホストするにはどうすればよいですか?
- 14. グラフィックデザイナーでSKNodeをデザインしてコードで再利用するにはどうすればいいですか?
- 15. iOS:ペンで作成したUIViewを再利用するにはどうすればよいですか?
- 16. ネイティブWebアプリケーションを構築するにはどうすればいいですか?
- 17. LinearLayoutの高さを子コンポーネントの最高高さにするにはどうすればいいですか?
- 18. iPhoneアプリケーションのSQLiteデータベースからWebサービスにデータを送信するにはどうすればいいですか?
- 19. 再利用識別子が既にUITableViewに登録されているかどうかを確認するにはどうすればよいですか?
- 20. Railsで名前付きスコープをグループ化/再利用するにはどうすればいいですか?
- 21. XPath 1.0を使用してSchematronでアサートテストを再利用するにはどうすればよいですか?
- 22. 私のWebアプリケーションのWebページをAndroidアプリケーションで実行するにはどうすればいいですか
- 23. 繰り返しタスクを再起動/再利用するにはどうすればよいですか?
- 24. Androidでタイマーを利用するにはどうすればよいですか?
- 25. セルを再利用すると、セルを完全にクリアするにはどうすればよいですか?
- 26. データがロードされる前にコンポーネントのレンダリングを防止するにはどうすればよいですか?
- 27. Concrete5コアブログサムネイル、他の作曲家に再利用するにはどうすればいいですか?
- 28. クロムエクステンションにロードされたiframeにCSSとJavascriptを挿入するにはどうすればいいですか?
- 29. Spring/Tomcat Webアプリケーションで$ {catalina.home} /conf/application.propertiesをロードするにはどうすればよいですか?
- 30. DatagridがitemRenderersを再利用するのを防ぐにはどうすればいいですか?
私は十分な担当者が「キャッシング」とタグを付けるべきだとお勧めします。 – rohancragg