質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

以下に示す場合の「キャッシュ」とは何のことを指しているのでしょうか?

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,660

score 33

コメント欄に頂いた内容で解決した形ですので、その内容を質問下部に記載しています。

質問内容

お世話になっております。
現在、他の人が書いたASP.net MVCのコード(C#)を読まなくてはならず、知識がないなりに諸々確認を行っているのですが、あるクラスで扱われている「キャッシュ」という言葉の意味を理解できず質問を起票しました。

コードの中に「キャッシュ」という言葉が名称に含まれるクラスがあり、そこには ConcurrentBag 型や ConcurrentDictionary 型のstaticなクラス変数と、それを操作するための関数が存在しています。また、このクラスは他のどのクラスも継承していません。

この場合、ここで扱われている「キャッシュ」という言葉は具体的に何のことを指しているのでしょうか?

私が思いつく「キャッシュ」には以下のような種類があります:

  1. Internet Explorerが「Temporary Internet Files」で定義される場所に保存しているファイルのこと
  2. Chromeがデフォルトで「C:\Users\<ユーザー名>\AppData\Local」に保存するファイルのこと
  3. その他ブラウザが各々の場所に保存するファイルのこと
  4. Googleが保有する、ある期間におけるWebサイトの状態を保存したデータのこと
  5. プロキシサーバがクライアントごとに保存している既アクセスサイトのデータのこと
  6. IISがキャッシュ ディレクトリに保存するデータのこと
  7. ASP.netで提供される、キャッシュ保管に利用できるクラスによって保管されるデータのこと
  8. C#で提供される、キャッシュ保管に利用できるクラスによって保管されるデータのこと
  9. …など

コードの状況は上のどれにも当てはまっていないような気がしているのですが、もしかするとこの状況ではstaticな変数すべてが「キャッシュ」として扱われるのでしょうか?
それとも ConcurrentBag 型、 ConcurrentDictionary 型の変数はそれそのものが「キャッシュ」にあたるのでしょうか?

もし、ここに記載した情報だけで「キャッシュ」という言葉が指している意味が判別できる場合、大変恐縮ですがそれが具体的に何のことであるのかお教えいただきたいです。
ここに記載の情報だけで判別が不可能な場合はお手数ですがご連絡いただけましたら追記いたしますので、どうぞよろしくお願いいたします。

わかったこと

この場合、 メモリ上に保存しているデータ(該当クラスのメンバ変数)を指して 「キャッシュ」という言葉が使われていました。
(この質問が発生した理由として、質問者が「 キャッシュという言葉は、主に『Webブラウザ、プロキシサーバ、Googleがある時点のWebサイトの状態を保存したもの』やその他『保存される特別なファイルのこと』を指しており、メモリ上のデータを指すことはない 」という勘違いをしていたことがありました。
コメント欄にてこの勘違いをご指摘いただき、解決いたしました。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

なぜそれを他人に聞くのでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/28 15:59 編集

    コメントで連なっていて流れが分かりづらいので、ベストアンサーはそのままとして質問者さんとして理解できた内容を別途回答か質問に追記するかでまとめられたほうがあとから見る人のためになると思いますし、自身の理解にも繋がると思います

    キャンセル

  • 2019/10/28 17:08

    m.ts10806さま
    質問の最下部に記載する形でわかったことをまとめさせていただきました。ご指摘いただきありがとうございました。(遅くなり失礼いたしました。)

    キャンセル

  • 2019/10/28 17:15

    いえいえ。特にこちらは急いでいませんので。大事なのは「質問者が回答者のアドバイスを正しく理解できたか」という点で、回答者も気にするところですので。

    キャンセル

+1

Cache(キャッシュ)はデータのコピーの一時的な保存場所です。

Webブラウザは、以前アクセスしたURLで得られたデータ(HTML等)を「Temporary Internet Files」等に保存しておいて、また同じURLがアクセスされた時には、そのURLのWebサーバにアクセスするのではなく、保存しておいたデータを使って画面表示します。

そうすることで、ネットワークを経由してWebサーバにアクセスするよりも早く、画面が表示できます。
それは、パソコン上のディスクにアクセスするほうが、ネットワークで通信するより早いからです。

このように主として速度向上のために、大きな、あるいは、遠い(遅い)データを、一時的に近い(早い)場所にデータのコピーを保存場所(あるいは、保存されたデータ自体)がキャッシュです。

==
Zuishinさんが指摘しているように、 ConcurrentBag 型や ConcurrentDictionary 型のstaticなクラス変数がデータの保存場所だろうと思われます。

キャッシュは、以下のようなメソッドを持ちます。
1)キャッシュにデータを保存する
2)キャッシュからデータを取り出す
3)キャッシュに存在するかどうか確認する

問題のプログラムの中には、
・必要とするデータがキャッシュにあるかどうか確認する
・キャッシュにあればキャッシュからデータを取得し、無ければキャッシュより遠い場所にあるデータを取得し、キャッシュに保存し、そのデータを使う
という動作をしているコードが含まれているはずです。

そのコードの動作を確認すれば、キャッシュがどこにあって、そのキャッシュに保存されるデータが何処に由来するのかが判るはずです。

それが「具体的に何のことを指している」に対する答えです。

Webブラウザであれば、webページのキャッシュは、「Temporary Internet Files」等に保存されるHTMLなどのファイルパスで、データ元のURLをキー、ファイルパスをデータとするDictionaryで管理されているというような具体的な構成が理解できるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/28 17:56

    coco_bauerさま
    今回はまさにご指摘のような状態でした。キャッシュに関する根本的な理解をコメントいただき、解決いたしました。ご回答いただきありがとうございました。

    キャンセル

0

コードの中に「キャッシュ」という言葉が名称に含まれるクラスがあり、そこには ConcurrentBag 型や ConcurrentDictionary 型のstaticなクラス変数と、それを操作するための関数が存在しています。また、このクラスは他のどのクラスも継承していません。

static という言葉からの想像ですが、いわゆる ASP.NET のキャッシュではなくて、アプリケーション全体で共有するデータを保持するために、Global.asax.cs に定義して、Application_Start で初期化し使っているものではないのですか?

具体的にどういうものかは以下の記事を見てください。

[ASP.NET]アプリケーション全体で共有するデータを扱うには?(静的メンバ編)
https://www.atmarkit.co.jp/fdotnet/dotnettips/122globalobj/globalobj.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/28 17:52

    SurferOnWwwさま
    いつもご回答いただきありがとうございます。お礼が遅くなり申し訳ございません。
    今回は質問欄に記載の通りの内容でしたが、ご指摘のような場合もあるということがわかりました。記録し、今後に役立てたいと思います。いつもありがとうございます。

    キャンセル

  • 2019/10/29 10:26

    > 今回は質問欄に記載の通りの内容でしたが、

    結局何を聞きたかったのでしょうか?

    質問欄に追記された「わかったこと」の「メモリ上に保存しているデータ(該当クラスのメンバ変数)を指して」というのが私の回答の通りと思っているのですが、違うのですか?

    それをキャッシュと呼ぶかどうかは定義次第ですが、ASP.NET の世界の狭義のキャッシュは Cache オブジェクトによって提供されているものを指します。 以下の記事の図 "Various options maintain the state" の Chaching が該当します。

    State management and ways to handle Cache in a Web Farm/Web Garden scenario
    https://www.codeproject.com/Articles/180726/State-management-and-ways-to-handle-Cache-in-a-Web

    今回の質問の「ConcurrentBag 型や ConcurrentDictionary 型のstaticなクラス変数」は ASP.NET で言う Cache ではなく、上の記事の図 "All server side state management data resides in the AppDomain" の Static Variables に該当するはずです。

    以下は余計な話かもしれませんが・・・

    ASP.NET の Cache オブジェクトにはメモリを自動的に回収したり、使用されなくなったアイテムを削除したり、優先順位を付けたり、依存性を割り当てたりと本来のキャッシュに求められる機能が備わっています。ASP.NET Web Forms アプリと同等なページ出力キャッシュも使えます。なので、本来の意味でのサーバー側でのキャッシュには ASP.NET 組み込みの Cache オブジェクトを使うのがお勧めです。

    ASP.NET の Cache とは関係ないですが、ブラウザ側のキャッシュについては以下の記事が参考になるかも。

    ブラウザキャッシュでパフォーマンス向上
    https://www.atmarkit.co.jp/ait/articles/0305/10/news002.html

    キャンセル

  • 2019/10/30 10:08

    >結局何を聞きたかったのでしょうか?
    今回確認したかった内容は、質問欄に記載の状況において「キャッシュ」が示す具体的な実体についてです。

    >ASP.NET の世界の狭義のキャッシュは Cache オブジェクトによって提供されているものを指します。
    ASP.NETにおける狭義のキャッシュの定義について把握しておりませんでした。ご教示いただきありがとうございます。

    >ASP.NET の Cache オブジェクトには~
    ↑ありがとうございます。自分で実装する際は、なるべくこちらのオブジェクトを利用するようにいたします。
    いつもご回答ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る