🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

3回答

6324閲覧

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

HikaruS.

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

1グッド

1クリップ

投稿2019/10/28 06:11

編集2019/10/28 08:07

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

質問内容

お世話になっております。
現在、他の人が書いた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サイトの状態を保存したもの』やその他『保存される特別なファイルのこと』を指しており、メモリ上のデータを指すことはない 」という勘違いをしていたことがありました。
コメント欄にてこの勘違いをご指摘いただき、解決いたしました。)

lleldigm👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

投稿2019/10/28 06:12

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HikaruS.

2019/10/28 06:13

申し訳ありません。コードを書いた担当者が既に在籍していないためです。
Zuishin

2019/10/28 06:15

ではそのコードを読むしかありません。その他の方法で知ることはできません。
Zuishin

2019/10/28 06:16

一般的には、重い計算の必要なデータを保存して再利用することをキャッシュと呼びます。
HikaruS.

2019/10/28 06:17

ここに記載の情報では「キャッシュ」が何を指すか判断できないということでしょうか?少なくともそれがわかってよかったです。どこか他のクラスや、ファイルを確認してみます。ご回答ありがとうございます。
HikaruS.

2019/10/28 06:18

> 一般的には、重い計算の必要なデータを保存して再利用することをキャッシュと呼びます。 ↑はい、用途としてはこれで間違いありません。実データとして、どこに保存されている何であるのか、が判別できず困っておりました。上のとおりということがわかりましたので、もう少し確認いたします。度々ありがとうございます。
Zuishin

2019/10/28 06:22

ConcurrentDictionary を使っているなら、それがデータの保存先です。メモリですね。何を保存しているかはここからはわかりません。
HikaruS.

2019/10/28 06:29

メモリに保存している値のことを「キャッシュ」と読んでいるということで間違いないようです。元の担当者の言葉の使い方があまり適切ではなかったようです。度々ご指導いただき誠にありがとうございました。
Zuishin

2019/10/28 06:32

いや、それで適切だと思いますよ。Dictionary を使って値をキャッシュすることはごく一般的なことです。
HikaruS.

2019/10/28 06:36

↑そうでしたか、メモリに保存している一般的な変数の値を「キャッシュ」と呼ぶこともあるのですね。理解していなかった部分を理解できました。重ね重ねありがとうございました。
dodox86

2019/10/28 06:39

>HikaruS. さん > メモリに保存している値のことを「キャッシュ」と読んでいるということで間違いないようです。 「CPUキャッシュ」について調べてみると、関連して合点が行くようになるかもしれません。キャッシュ(cache)はそんなに特殊な単語では無いです。
HikaruS.

2019/10/28 06:43

dodox86さま、workaholistさま 知識が足りない状態で質問しているにも関わらず、後学のためになる情報まで教えていただき感謝いたします。 体系立てて知識をつけられている状態ではないので、大変助かりました。ご親切にありがとうございました。
m.ts10806

2019/10/28 07:34 編集

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

2019/10/28 08:08

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

2019/10/28 08:15

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

0

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 08:52

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HikaruS.

2019/10/28 08:56

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

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 06:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HikaruS.

2019/10/28 08:52

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

退会済みユーザー

2019/10/29 01: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
HikaruS.

2019/10/30 01:08

>結局何を聞きたかったのでしょうか? 今回確認したかった内容は、質問欄に記載の状況において「キャッシュ」が示す具体的な実体についてです。 >ASP.NET の世界の狭義のキャッシュは Cache オブジェクトによって提供されているものを指します。 ASP.NETにおける狭義のキャッシュの定義について把握しておりませんでした。ご教示いただきありがとうございます。 >ASP.NET の Cache オブジェクトには~ ↑ありがとうございます。自分で実装する際は、なるべくこちらのオブジェクトを利用するようにいたします。 いつもご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問