• ベストアンサー

効率よくリソースを読みこむには

stardustの回答

  • stardust
  • ベストアンサー率44% (8/18)
回答No.2

tontotoさん、こんばんは。 確かにtontotoさんが補足で書いておられる方法のほうが断然速いですね。 簡単なサンプルを書いて処理時間を計測してみました。 ------------------- 環境はPentium3 450MHz のノートパソコン、JDK1.2.2。 10万回の文字列取得処理を10回繰り返した平均値を計測しました。 tontotoさんの方法では、1ミリ秒以内。 前回の私の回答の方法で、約400ミリ秒です。 ------------------- クラスメンバとして持たしてしまえば、メモリ上の位置が決まっているのに対し、 リソースバンドルは逐一、キーから値を検索し、新しいStringインスタンスを生成するのでこのくらいの差はつくのでしょうね。 フレームのメニュー文字列を取得する目的ならば、無視できる差ですよね? となると、後は実行速度とメンテナンス性の兼ね合いでしょうか。 それはtontotoさんのお考え次第です!

tontoto
質問者

お礼

ああ、速度の実験まで…。 なにからなにまで申し訳ありません。 本当にありがとうございます。 stardustさんに教えていただいたSINGLTONのやり方で 取得するStringインスタンスも シングルトンのクラスのなかにかけないものかと思ったのですけれど…。 (getMenuStringメソッドとか定義してstaticなStringを返すように…) これはこれでごちゃごちゃしてるように見えるかな…。 と考えています。 10万回の文字列取得を10回でも400ミリ秒ということですので、 これなら性能的にそんなに影響ないでしょうし、 ソースも綺麗なのでstardustさんに教えていただいたやり方でやろう、 と個人的に思ったのですが。 いま作ろうとしているシステムがものすごく遅くなりそうなので、 少しでも早くできそうなところは短縮するようにとの 命令がでてしまいました。 そこで結局今回は Stringもstaticにするやり方をとることになりました。 でもすごく役に立ちました。 これからも役立つ知識教えていただきましたし…。 本当に本当にありがとうございました。

関連するQ&A

  • C++/CLIのリソースファイルについて

    C++/CLIのリソースファイルについて質問です。 環境は、Visual Studio 2005のC++/CLIです。 アセンブリリソースファイル(resx)の文字列リソースをEXEファイルをに含めることは可能でしょうか? 含めるか、含めないかの設定はどこで可能でしょうか? 現在は、EXEファイルと同じ場所にアセンブリリソースファイル(resx)がないと例外が発生します。

  • Androidアプリで別環境でのリソース取得

    Androidアプリを開発していまして、プログラミングの知識はある方の部類だと思っています。 Androidアプリでのリソースを取得するとき、実行する環境にあった文字列やdrawable等を取得できるのは知っています。 ここで、プログラム上から別環境のリソース(例えば文字列)を取得することは出来るのでしょうか? 具体的にしたいことは、アプリの多言語化なんですが、ほとんどは端末にあった言語の文字列を使いたいのですが  ある部分だけに「日本語」を使いたいのです。 例えば、たくさんのボタンがあって それを押したら「日本語」で 〇〇を押しましたと出したいのです。 英語の環境では   "Hello" , "Good Night"    ー>「おやすみ」を押しました。 日本語の環境では  "こんにちは" , "おやすみ" ー>「おやすみ」を押しました。 ○語の環境では    "○○","△△"        ー>「おやすみ」を押しました。 管理しやすいようにしたいので、文字列リソースを strings.xmlに書きたいところなんですが 、別環境での文字列を取得する方法がわからなかったので 質問いたしました。 自分で、文字列を管理する独自クラスを作ってハードコーディングしてもいいのですが、やはり strings.xml に書きたいなと思っています。 文字列の管理を簡単にしたいので、少々長い処理が必要になってもいいです。 (なるべくAndroid2.2以上を対象としてますが、無視していただいても構いません) 以上よろしくお願いいたします。

  • リソースファイルとは・・・

    リソースについて、2つ疑問が沸きました。 もしよろしかったら、アドバイスよろしくお願い致します。 (1)最近まで、Visual C# .NETを使用しておりました。 さきほど、Visual C++ .NETをいろいろいじっていたのですが、C++にはリソースというフォルダがあって、C#にはないのか疑問になりました。 どうしてC++では、リソースとして明確に分けているのかどうしてもわかりません。(そういえば、C#では、多言語に対応できないのかな・・・!?) (2)C#では、たとえば、メニューのキャプションを変更したりといったことは、コードと同じように編集できるのに、どうしてC++では、わざわざリソースエディタのメニューデザイナで編集させているのでしょうか? あと、リソースエディタの中にダイアログと言う項目があるのも不思議でなりません。ダイアログもフォームなのにリソースなんでしょうか?(リソースファイルとして保存して何か意味あるのでしょうか?)

  • リソースメータでリソースがでてこない?

    WINDOWS XPを使っています。 メモリは512+256MBです。 フリーソフトで”めもりーくりーな”というものがありますが、 このソフトでは、CPU負荷、メモリ使用量、スワップ、リソースの各々使用量が常駐で見ることができます。 ある日、ネットゲームをしていて(多分)、フリーズして、 それ以来、リソースの表示が出てこなくなたのです。 (メータの表示が常にゼロ) 何かシステムが壊れてしまったのでしょうか。 WINDOWSのみを再インストールすれば直るとおもいましたが、 バックアップディスクに一括で組み込まれているため、 すべての再インストールとなりそうです。 本当に何か不具合なのか、もしくは直す方法など何かありますでしょうか。 基本的にリソースがなにの為に必要なのかも、あまりわかっておりません。 宜しくおねがいします。

  • C#で文字列リソースを扱う

    引数でファイル名を絶対パスで読みこんで処理をする、というコンソールアプリを作成しています。 エラーメッセージなどをリソースで管理しているのですが、内容を動的に変更したいとき、どうすればよいのかわからず、困っています。 (たとえば、こういう感じです。) リソース登録された文字列 "指定されたファイル'{1}'はありません。"           ↑  ここに引数で受け取ったファイル名を入れたい。 このようなリソースの作成方法や、呼び出し方法を、どなたかご教授ください。

  • エクセルのリソース不足

    エクセル2003で列全体を指定して文字の中央揃えをしていたら 突然 「リソース不足のため、このタスクを完了できません。 選択するデータを少なくするか、ほかのアプリケーションを 終了して再度試してくださ」 とメッセージがでました。 確かに大きなファイル(50MB)でマクロも数式もたくさん使用していますが こんなのは初めての経験なので驚いています。 このとき ほかのアプリケーションは起動させていませんでした マクロの変数宣言でリソースを使い過ぎているのでしょうか 選択するデータを少なくすればこのまま使い続けられるか不安です 対処法を教えてください

  • (UWSC)このような場合、解決策はありますか?

    UWSCで、下記のようなことをしようと思っています。 GETSTRで、あるウインドウにある文字列を取得し、 その文字列をFPUTでファイルに書き込みます。 FPUTでは、CSVファイルに書き込みます。 GETSTRで取得する文字列は、少々長いメモが書き込まれている ような箇所で、複数行あります。 改行があることから、FPUTで書き込むとき、例えばそれが5行あれば、 2行1列目(セルA2)にそれを書き込もうとすると2行1列~6行1列(A2~A6) に書き込まれます。 セルA2だけに複数行全てを書き込むことはできないでしょうか? (繰り返し実施することから、1行に1項目しか入れたくないので・・・) 最大10行ということが決まっているので、10行おきに書き込むという 技もありますが、空行は作りたくないので・・・。 よろしくお願いします。

  • 日英対応のメニューの作り方

    CでWindowsのプログラム作っています。 メニューの文字が現在、日本語で表示するようにプログラムしていますが、英語表示版が必要になりました。リソースファイルを書き換えて再コンパイルすれば英語版ができるのはわかりますが、もっとスマートな解決策ありませんか? たとえば、外部ファイルとして日本語、英語メニュー文字列を用意しておいて、起動時にどちらかを読み込んで、そこの文字列を表示するとか、日本語版、英語版のメニューをあらかじめプログラムに埋め込んでおいて、実行時のオプションメニューなどで表示を切り替えるなどです。 具体的なテクニックとそのためのコーディングお教えください。 なお、リソース・エディタは、「BCCForm and BCCSkelton」を使っています。

  • Java Struts メッセージリソースの使い方

    JAVA Strutsを使用 各種メッセージを外部ファイルで定義しようと考えています。 Strutsではメッセージ・リソースファイルというものが存在するらしく、それを使用するのが妥当のようです。 http://www.javaroad.jp/opensource/js_struts5.htm しかしここではjsp側のbean:writeタグで表示する方法しか書いておりません。 メッセージをポップアップで表示させようと思っているのですが、どのようにすれば実現できるでしょうか。 .jsp-------- <script lauguage="JavaScript"> function checkErr(){ var msg = document.forms[0].err.value; if(msg != ""){ alert(msg); } document.forms[0].err.value = ""; } </script> Action.java------------ if(!Error.IsNum(id) || !Error.IsNum(pass)){ //ここでリソースファイルから文字列を取得したい msg = ""; logFrm.setErr(msg); return mapping.findForward("loginTop"); }

    • ベストアンサー
    • Java
  • リソース不足?

    自作、XPモデルでの使用ですが、Webページ(IE)を複数開くと、『まれ』にどんどん処理速度が遅くなり、最後にはタスクマネージャーも起動不可。スタートメニュー、終了さえもできなくなってしまいます。 XPなのに9X系リソース不足かのような状況。?? 気になるのはこの時決まって、ウイルスバスターアイコンが真っ黒になっていることです。 未熟な私めの組み立て不良かもしれませんが、情報がございましたらお願いします。