- PR -

ビルド時にはファイルのデータを持ちたい

投稿者投稿内容
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-02-19 11:59
ビルド時にファイルからデータを読み込むようにするには
どうしたらいいでしょうか?

今作っているのは、Webアプリケーションなんですが、
ファイルのデータを使って処理を行うところがあります。
そのファイルが少し大きいので、その処理を行うときに、
毎回ファイルからデータ読み込むのでは、処理が遅くなるので、
最初からファイルのデータを持ちたいと思っています。

ビルドされたときには、
ファイルのデータを、すでに持っているようにする方法は
あるのでしょうか?
無理でしょうか?


説明おかしいかもしれませんが、
どなたかご教授よろしくお願い致します。


開発環境
WindowsXP Pro
VS.NET2003( C# )
.NET Frame 1.1
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-02-19 12:19
ファイルの内容を全てデータとしてプログラム中の変数に入れてしまうとか?
16進数で打ち込む必要があるかも知れません
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-02-19 12:40
コブラさん 返答ありがとうございます。

ファイルのデータが変わることがあるので、
データが変更されてもだいじょうぶなように
ファイルから読み込むようにしたいです。

この処理は無理でしょうか?

ご教授よろしくお願い致します。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-19 12:47
処理の度に毎回読むから遅くなるというこですので、global.asax内で最初にデータを取得しておき、Application変数に保持しておくのはどうでしょうか?
ファイルが変わることもあるということですが、「ビルド時に読み込みたい」という条件がついているので、変更されることは稀であり、そのときはWebアプリケーションの実行がリセットされてもよいということですよね。

ビルド時にデータを読み込むとは少し違いますが、アセンブリにリソースファイルを持たせるということもできます。でもどこかで読まなければいけないので、やはり最初に一度だけという方法が適切だと思われます。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-19 12:49
>コウイチさん
>最初からファイルのデータを持ちたいと・・・
>ファイルのデータを、すでに持っているようにする方法は・・・

「持つ」というのは、つまりどういうことでしょう?
ビルド時というのですから、メモリー上じゃないですよね?

Grobal.asaxとかで、アプリケーションが開始する時に読ませるというのはだめなんですか?
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-02-19 13:55
noderaさん、一郎さん 返答ありがとうございます。

>「持つ」というのは、つまりどういうことでしょう?
ファイルのデータを使いたいのですが、
Webアプリケーション開始時に、
ファイルからデータを取得処理をしなくていい状態?のつもりです。
取得処理をしなくてもいい方法があれば、
ご教授よろしくお願い致します。

説明が下手で申し訳ありません。


Webアプリケーション開始時に、
Grobal.asaxで最初に読み込んで、
Application変数に保持する方向で考えてみます。

ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-19 14:51
 キャッシュを使えば、「変更」を動的に察知して読み込み直しができますよ。問い合わせはSingletonパターンで行えば、なお良いのではないでしょうか。
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-02-19 16:12
Jittaさん 返信ありがとうございます。

Singletonパターンですか。
すみません。聞いたことがありませんでした。
ちょっと調べてみたのですが、
使い方がよくわかりませんでした。

Singletonの質問になってしまうのですが、
Singletonは、1つのインスタンスしか生成しないというのは、
Webアプリケーションで、複数のユーザーがアクセスしてきても
同じインスタンスを各ユーザーが利用するので、
メモリを効率よく使える・・・ということでしょうか?

使い方なのですが、
インスタンスの作成を1つだけにしたいクラス(TestClass)の
・コンストラクタをprivate宣言
  private TestClass(){ }
・自身をprivate static メンバインスタンスとして宣言
  private static TestClass TC = new TestClass();
・他のクラスから、このクラスを使うために
  public static TestClass getInstance()
  {
    return TC;
  }
として、
他のクラスで、TestClassを使いたい場合は、
  TestClass tc = TestClass.geInstance();
として、利用するようにしたら、
複数のユーザーが同時に利用しても、
TestClassのインスタンスは1つしか生成されない?
Webアプリケーション実行中は、
インスタンスはずっと削除されない?
・・・であっているでしょうか?

脱線してすみませんが、
よろしくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)