処理速度

解決


屋敷高人  2007-07-30 09:37:43  No: 65897

テキストファイルをオープンして
1万個の配列に文字をいれる方法と
コード上に文字列を一万個書いて
配列に代入するのでは
一般的にどちらの方が処理速度はやいのでしょうか?
変わらないんでしょうか?
だいたいどのくらい違ったりしますか?


wclrp ( 'o')  2007-07-30 10:31:30  No: 65898

どれくらい違うかはFDから読み込むのか高速なHDから読み込むのか
どれくらい高速なCPUか文字って全て1バイトなのか
などの様々な要因で結果違うから
一般的とか言われてもわからんのう。
コンピュータの性能なんてコロコロ変わるし
昔の常識が通用しなくなることもあるしわからん。

推測だよ。
たとえば全て1バイトなら
const char * const data = "aaaaaaaaaaaaaaaaa";
で終わりだから
コンパイラが音を上げなければこれで終わりじゃない。
まあ、プログラムサイズが大きくなるし若干遅くなるかもしれないけど
改めてテキストファイルを開くよりかは速いんじゃない。

やってみりゃわかるだろ。
俺はやってみる気がしないけど。

俺なら
固定データならプログラムに入れる。
変更するデータならファイルにする。

あるいは
とりあえず簡単なほうで作っておく。
遅かったら遅い原因を調べ改善する。
配列に文字入れるのとファイル読むくらい
何日も架かって作るほどでもないし
改造もそれほど難しくなく出来るでしょ。
どっちが速いんだろうって考えてもわからないことを
時間かけて悩んでも実際やったら
どっちも速かったなんてこともあるだろうし。


επιστημη  URL  2007-07-30 10:31:34  No: 65899

やってみて、どうでしたか?
一般にファイルアクセスはメモリに比べてかなり遅いけども。


屋敷高人  2007-07-30 18:07:01  No: 65900

やってみるのもいんですけど、
コードに沢山の文字列を書くのは大変だし、コーディングが無駄に
長くなるような気がしますけど。

>固定データならプログラムに入れる。
って地道にコードに入力することですよね?


オショウ  2007-07-30 19:43:20  No: 65901

まず性能の実証試験と言う観点では、そこはプログラマーの
責任ではないでしょうか?

また手でコードを書くと言う作業で、そこが大変ならソース
コードを吐き出すプログラムを作成してもよいわけだし。

一般的に、
デバイス=>メモリ
と言うデータの流れと、
メモリ=>メモリ
と言うデータの流れだと、断然後者のメモリ=>メモリが高
速になるわけだし・・・

動作原理として、プログラム中に埋め込まれたデータ部位は
プログラムがメモリにロードされた段階で既にメモリ上に展
開されており、少々バカなコンパイラでも、デバイスから読
む動作速度より遅くなるとは到底考えられない。

それを実証する意味で、時間と手間を費やしても、それが問
題になるとは思えないのですが。

※  ただし、それらは、あくまでプログラマー個人のスキル
    に依存する話で、そこに時間的コストがかかり、業務的
    NGになるなら、「できる人」にやってもらったらよい
    話かと・・・

以上。


屋敷高人  2007-07-30 20:19:25  No: 65902

ではテキストボックスから取り出すのと
コードで
商品 = "キャベツ";
と直接書く方法。
どちらが一般的には早いとされますか?
同じですか?


かさのば  2007-07-30 20:29:33  No: 65903

とりあえず、計ってみては?
http://www.mm2d.net/c/c-02.shtml


wclrp ( 'o')  2007-07-31 07:54:34  No: 65904

>やってみるのもいんですけど、
>コードに沢山の文字列を書くのは大変だし、コーディングが無駄に
>長くなるような気がしますけど。

お前がどっちが速いか聞いたんだろ。
最初から片方やらないんだったら聞くなよ。

>>固定データならプログラムに入れる。
>って地道にコードに入力することですよね?

お前が先に『コード上に文字列を一万個書いて』って書いたんだろ。
なぜ、どういうことかこっちが説明しなきゃいけないんだよ。

どうせお前もやる気がないんだろうから
『俺はやってみる気がしないけど。』って書いたんだけどな。

テキストファイルがあるんだったら
データが改行で区切られている場合だけど
正規表現でも使って行頭に『"』を付けて
行末に『",』を付ける置換すればかなり作業省けるよ。

そして以下みたいにすれば終わり。
const char * data[] = {
"キャベツ",
"キャベツ",
--省略--
"キャベツ",
};
ただそんなに大きなソースをコンパイルできるか試したことないけど。

>ではテキストボックスから取り出すのと
>コードで
>商品 = "キャベツ";
>と直接書く方法。
>どちらが一般的には早いとされますか?
>同じですか?

ふざけてんの?
なりすまし?
けんか売ってんの?

テキストボックスから取り出す処理を書いてごらんよ。
聞かなくても違うこと判るでしょ。

『商品 = "キャベツ";』これはあいまいです。
たとえば
const char * x = "キャベツ";
の場合、おそらく0秒か3GHzのCPUなら3000000000分の数秒じゃないの。
というのも、これ自体何か処理するわけじゃないから。

テキストボックスに1万個のデータを入れたりしない。
ろくに考えずにただ面倒だから質問しているだけだろ。
そんな質問することは自体おかしいよ。

試さないし、聞いておきながら速いほうを採用する気すらないようだが
こっちの方がもっと面倒だよ。

データが一個だけならテキストボックスかな。
データ変える時プログラムの書き直しが必要なんて
遅いし面倒だしそんなの使えねーだろ。


屋敷高人  2007-07-31 10:12:41  No: 65905

はあ?
お前って誰にいってんの?
俺の友達かお前?
偉そうに言う前にお前の態度どうにかしろ。

問答無用で通報ね  お前。


かさのば  2007-07-31 10:56:18  No: 65906

いちいちキレていても問題解決には繋がりませんよ。
というかwclrp ( 'o')さんのおっしゃていることは尤もです。

私も実行速度計測のTipsを紹介したりしてみましたが、テキストボックスから値を読み込むか、コードにベタ書きするかを実行速度の観点から見て決定することはまず無いと思います。
可変データを扱うならテキストボックスから読み込ませたほうが良いはずだし
定数を扱うならコード内にベタ書きするのも手だし。

とりあえず屋敷高人さんが何をなさりたいのかイマイチ掴めません。
何に使うわけでもないけど、とりあえず実行速度の差が知りたいというのであれば、ちょろっとテストプログラムを書いて叩いてみれば、すぐに分かると思います。
テストプログラムを作るのが面倒くさいというのは、ナシですよ。
貴方が面倒くさいと思う作業を回答者が引き受ける筋合いはありませんから。
テストプログラムを作る際に分からない所があり、それを質問するのであれば回答者も答えるのにやぶさかではないと思います。

そうではなく、何か他に目指す所があるのであれば、それも書いて頂くとより要望に合った回答が得られると思います。

正直、今のままでは課題を丸投げしていると取られてもおかしくありませんので。


かさのば  2007-07-31 10:58:35  No: 65907

嗚呼、改行し忘れて無駄に読み難い文章になってしまいました…
申し訳ないですorz


wclrp ( 'o')  2007-07-31 17:32:13  No: 65908

怒った?
ごめんね


夏休み  2007-08-01 00:22:41  No: 65909

wclrp ( 'o')、
へー、何で謝るの、荒らすためにそんな語調使ってるでしょ


wclrp ( 'o')  2007-08-01 08:17:41  No: 65910

> へー、何で謝るの、荒らすためにそんな語調使ってるでしょ

謝らないほうがよかったか。迷ったんだよね。
荒らすのが目的じゃないですよ。
荒らすならこんな長文で質問に答えず
少し指摘するだけで相手を不快に出来ますよ。

> 俺の友達かお前?
> 偉そうに言う前にお前の態度どうにかしろ。

聞いておきながら実は最初からやる気がなかったなんて不愉快でしょ。

礼もしなければ
大変だからとか言い訳するし
(他人のプログラムのことなんてこっちが無駄だって言いたいよ)
自分の考えも述べず詳しい説明もせず次の質問するなんて
お前は俺の友達か?

しかも使い方の異なるものを速度で比較するなんて変だし
ふざけてんのか、偽者が質問者になりすましているのかと思った。

というわけであえてきつく言ったんだけどきつすぎた?
ごめんね


屋敷高人  2007-08-01 12:24:48  No: 65911

俺は、自分でしろって言われたことに切れたのではない。
逆切れ気味で返答されたから失礼だといっているだけ。

俺が聞きたいのはプログラムを書いてやってくれといっているんじゃなく
プログラマの皆さんの経験則から、
一般的にこっちの方が早いよっていうアバウトな回答が欲しかっただけ。
別に正確な数字を計ってくれなんて頼んでないのに
いきなり、キレてくるから。切れただけ。

まあ、いいたいことは以上。


wclrp ( 'o')  2007-08-01 18:56:45  No: 65912

本人でしょうか?
偽者のなりすましでしょうか?

かさのばさんが
> テキストボックスから値を読み込むか、コードにベタ書きするかを実行速度の観点から見て決定することはまず無いと思います。

といっているし、
私は
使い方が違うものを速度で比較してどうすんのとか
テキストボックスでデータが一個だけの場合の回答と
テキストボックスで1万個のデータを入れないと指摘しているのに
その点について教えてくれないの?
いいたいことだけいって満足?

『商品 = "キャベツ";』の場合
# "キャベツ"のバイト数を調べる;
# char * x = "キャベツ"を格納できるようにメモリ確保
# xのバッファへ"キャベツ"をコピー
という処理になったと仮定します。

テキストボックスでも文字列を変数へ入れるために
メモリ確保やコピーをする必要があります。

そして、取得するためには、テキストボックスのウィンドウハンドルを
指定してGetWindowTextを呼び出します。
このGetWindowTextはメッセージWM_GETTEXTを指定して
ウィンドプロシージャを呼び出します。

つまりウィンドウハンドルから呼び出すべき
ウィンドプロシージャを調べなければなりません。
以下省略
どう考えてもテキストボックスは遅いです。

これに人間がデータを入力する時間を加える必要があります。
『商品 = "キャベツ";』の方が遥かに高速です。
高速なメモリと高速なCPUなら一瞬でしょう。
速過ぎて測定しても処理時間よりも誤差の方が大きな値になるくらい。

仮に人間がデータ1件を3秒で入力できたとしても
100倍とかじゃすまないくらい
『商品 = "キャベツ";』の方が高速です。

でも『商品 = "キャベツ";』で1万件は大変だからどうせやらないだろ?
2回目の質問も大変だからとかの理由でやるつもりのないことを
聞いているとしたら不愉快じゃん。


屋敷高人  2007-08-01 22:11:03  No: 65913

一万件というのは分かりやすくいってるだけで
実際は300だったり、1500ぐらい。
別にたとえなんだから厳密に考えなくいい。
二つの方法を一回実行するのじゃたいしてスピードが
変わらないとおもったから大きな数字で効いて見ただけ。

>テキストボックスでデータが一個だけの場合の回答と
>テキストボックスで1万個のデータを入れないと指摘しているのに
これも例えだし、
厳密に考えすぎ。
アバウトな回答が欲しい時も質問者は
あると思うからそこは見極めて欲しい。

というか、「お前」呼ばわりされたのに単に切れてるだけだし。
深く考える必要なし。


wclrp ( 'o')  2007-08-02 05:46:30  No: 65914

>アバウトな回答が欲しい時も質問者は
>あると思うからそこは見極めて欲しい。

お前呼ばわりする相手にはお前呼ばわりで返し
今度は偉そうな発言ですかぴょ〜ん。

私だって1万件というのは分かりやすくいってるだけで
屋敷高人さんが本気でテキストボックス1万件なんて思ってませぴょ〜ん。

>とりあえず屋敷高人さんが何をなさりたいのかイマイチ掴めません。
とか、そのほかの発言から
詳しく説明して欲しいっていう回答者や閲覧者からの疑問(質問)であり
答えて欲しかったんだと見極めて欲しいぴょ〜ん。

きっと俺の「お前」呼ばわりが気になってそれどころじゃないだねぴょ〜ん。
でも謝らないぴゅ〜ん。

夏休みさんが指摘するように謝ったり丁寧な語調だから
余計むかついたのかな〜ん。
だから語尾をふざけたものに変えてみましぴゃ〜ん。


wclrp ( 'o')  2007-08-02 06:20:45  No: 65915

重要なことを忘れてた。

>あると思うからそこは見極めて欲しい。

確かに屋敷高人さんの発言のように見極めて欲しいです。
ですが同様にこちらも相手に見極めて欲しいと思うことがあります。

しかし伝わらないことがあります。
というより寧ろストレートに言った方が良いと思っています。
今までの経験から思っています。

しかし実際にはストレートに言っていませんでした。

この発言です。

>礼もしなければ
>大変だからとか言い訳するし
>(他人のプログラムのことなんてこっちが無駄だって言いたいよ)
>自分の考えも述べず詳しい説明もせず次の質問するなんて
>お前は俺の友達か?

ここは本来

#(私に対してという意味ではなく)礼もしなければ
# 言い訳するが自分の結論は言わず
# 詳しい説明もせずさっさと次の質問に話を移すなんて失礼です。

というべきでしたが
ついついウケ狙いで『お前は俺の友達か』としてしまいた。


んー。  2007-08-02 14:01:17  No: 65916

>やってみりゃわかるだろ。
>俺はやってみる気がしないけど。

>お前がどっちが速いか聞いたんだろ。
>最初から片方やらないんだったら聞くなよ。

最近の人はこんな言葉を初対面の人に使うのでしょうか?
相手がどんな人かも分からないのにすごい言葉遣いですね。
ネット上であってももう少し丁寧な言葉を遣った方が良い気がします。


子供は夏休みか  2007-08-02 19:41:53  No: 65917

いやぁ平和だねえ日本は。


もうすぐ夏休み  2007-08-03 08:20:13  No: 65918

んー。さんの意見には同意です。
でも、世の中には色々な人いるからね
それが、それを言った人の人としてのクオリティ表すと思うよ。
正しいことを言っても、言動で嫌われてすかんをくらう人いるしね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加