• 締切済み

処理の高速化

はじめまして. この度,初めてVisualCを使うことになった,C初学者です. 今回,人が作ったあるプログラムにつきまして,処理の高速化を考えております. 初心者の私としては,まずはどこから手を付けて良いか全く見当が付きません… 皆様,どの辺から検討に入った方が良いのか,教えて頂きたく. どうぞよろしくお願いします.

みんなの回答

  • mttk1238
  • ベストアンサー率15% (9/59)
回答No.4

こんにちわ。 Cに関しては趣味程度の者ですがアドバイスを。 質問内容から業務で使用するプログラムと推測する のですが、どうなんでしょう。 もし業務で使用するプログラムなら、保守性を考え 処理の高速化ばかりに気をとられないほうがいいと 思います。今度はあなたの作ったプログラムを他の 人がみる可能性もありますし。 一番良い方法は、一度人の作ったプログラムの流れ を自分で書いてみることです。そうすることで、処 理上、無駄な部分が見えてくるかもしれません。 具体的な話では、#1、2、3さんが言われているよ うな手順を試してみてください。 ちなみに大学生時代は最適化アルゴリズムについて 研究をしていたので、処理の高速化というタイトル を見て飛んできてしまいました(笑) masayuki3628さんが1からプログラムを組むのでし たらいろいろアドバイスができたかもしれません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 まずは、 ・プログラムがどのような種類か? (Windowsアプリケーション、Webアプリケーションなど) ・どのような動作をするものか? (DBにアクセスする、ネットワークを参照するなど) ・切り分けできるか? (起動が遅い、ある処理は早いが、違うある処理は遅いなど) 業務で使用するプログラムであると思いますので 支障のない程度で内容を提示していただくと、 アドバイスが得やすいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

業務としてでしょうか?研究として?後者の場合、アルゴリズムを見直すという方法でないと、研究にならないかも。 前者の場合は、まずは現在のプログラムの調査、どの処理に時間がかかっているかを調べる作業でしょうね。 プロファイラ、プロファイリングツールなど、実行時に各行の処理回数を計測するようなツールを利用するのが基本でしょう。 プロファイラの効果的な使い方に関して、こちらの本の最初に出てきます。サンプルなどはちと古いですが、読んでいて面白い本ですので、図書館などにあるのでしたら一読をお勧めします。 近代科学社 - プログラマのうちあけ話 続・プログラム設計の着想 http://www.kindaikagaku.co.jp/bookdata/ISBN4-7649-0177-3.htm こちらの本でも引用されていますが、D.E.Knuth(TeXで有名な方です)の論文で、「一般にプログラムの4%以下の部分が全実行時間の半分を占める」という言葉があるそうです。 大雑把に言うと、プログラムの中核となる部分に手を入れると、処理速度を大幅に向上させる可能性が有る。と言うような意味合いです。

参考URL:
http://www.kindaikagaku.co.jp/bookdata/ISBN4-7649-0177-3.htm
全文を見る
すると、全ての回答が全文表示されます。
  • 12m24
  • ベストアンサー率23% (193/817)
回答No.1

 基本的には、プログラムを劇的に高速化できる手法としては、計算方法の改良があげられます。たとえば、 ・逐次検索(先頭から一つずつ確かめる)→インデックス検索(インデックスを作成しておいて検索) ・並び替え順序の変更 などが考えられます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メモリマップドファイルを使って高速化できるか

    現在、テキストファイルの読込みを関数(fopen(),fgets(),fclose()) を使って処理しています。 今回、処理を高速するためメモリマップドファイルの使用を検討しています。 そこで質問なのですが、 メモリマップドファイルを使うと劇的な高速化が期待できるのですか? 高速化する場合、どういったタイプのファイルに有効なのですか? 自分で調べろと言われそうですが、ご勘弁ください。 使ったことのある方、また、実際に比較してみたことのある方が いましたら教えて下さい。

  • 初めましてC++初心者です。

    初めましてC++初心者です。 VisualC++でプログラムを作成しているのですが、どうも上手く動かない箇所があります。一度VisualBasicで作成したプログラムをC++で同じ動作を行おうと思って作っているのですが下記の場所がダメみたいです。VisualBasicの表記をC++で実現するにはどうすれば良いのでしょうか?分かる方が居ましたらお力をお貸しください。 [VisualBasic] if (Not(x<=1)) Then ......... EndIf [VisualC++] if (!(x<=1)) { 'ここの条件が上手く働いていないような? ......... } 宜しくお願い致します。

  • VisualC++.NETかVisualC#.NETか

    こんにちは。 今、VisualBasic6でプログラムをしています。今回、VBを卒業してCを勉強したいと思っているのですが、VisualC++.NETとVisualC#.NETの違いがいまいち分かりません。というか、.NETという物自体が分かっていない初心者です。VB6ではランタイムが必要でしたが、この2つではどうなのでしょうか?ちなみにVB歴約2年です。 .NETの基本的なことから教えていただけると非常に助かります。 回答よろしくお願いします。

  • XPの高速化で。

    私はXPを使っているんですが最近やたら処理速度が遅いなと思うのでフリーソフトを入れてみようと思っています。 ですが種類が沢山ありどれがいいのかよくわかりません…。 使ったことのあるフリーソフトは「窓の手」「TuneXP」 「Win高速化PC+」の3つです。 http://cowscorpion.com/Software/cate_System.html このサイトに沢山あるんですが皆さんのオススメはなんですか? 私が高速化したいのは処理速度・起動速度くらいです。 回答よろしくお願いします。

  • 画像変換の高速化

    DOS/VマシンでMicrosoft C Ver6.0でCの勉強をしています。 初心者の入り口レベルなので、質問の内容が拙いかもしれませんが、よろしくお願いします。 BMPの8ビット形式の画像を任意のデータに変換するプログラムを作ったのですが、処理速度がとても遅く(1.7M位で5分30秒かかりました)何とか高速化をしたいと思います。 今やっているやり方はX方向分(ファイルサイズをYサイズで割ったもの)のバッファを取り、書込む時に実際のX方向分のみ書き込ませる。 をY方向分繰返すという処理です。 絶対もっと早くなる方法があるはずだと思うのですが、いくら考えても全く分かりません。 アドバイスをよろしくお願いします。

  • access高速化処理 初心者です。

    当方初心者です。 vb2005で、アクセスとtxtを使って次のようなプログラムを作りたいです。 access T_TABLE1(カラム4つ) データ3000件程 都道府県 市区町村 町名 丁目 沖縄県 ○○市 ○町 n丁目 ~~~ 沖縄県 ◎◎市 ○町 n丁目 txt このテキストは、カンマ区切りの文字の羅列です。200文字程 △字,○字 ■字,□字 vb2005で、txtに含まれる文字(○字)が、T_TABLE1の中の何れかのカラムに 含まれていた場合、その文字をtxtから消すというプログラムを作りたいです。 できるだけ高速に処理するにはどのような手法が考えられるか、 アドバイスいただけましたら幸いです。(accessをoracleに置き換えることも やろうと思えば可能です) よろしくお願い致します。

  • C#でのPerlプログラムの実行

    C#初心者です。環境はVisualC#を使っています。 C#でGUIを作成中なのですが、GUIのあるボタンを押すと、 Perlのプログラムが実行されて、動くようにしたいのです。 どのようにすればよいでしょうか?

  • バッファリング処理を高速化したいです。

    バッファリング処理を高速化したいです。 perlのプログラムで性能がでなくて困っています。 ファイルの中身からレコードヘッダを検索しつつ可変長なレコードの件数をカウントするツールで バッファリングというかストリーミングっぽい処理をしているのですが 思いの外、性能が出ずこまっています。 (600MBのテキストで10分弱くらい、予定では1分程度で終わる見込みでした) とりあえず、非効率そうなのは、1レコード取得する部分と下記のようなバッファシフトの部分くらいなのですが バッファシフトについて何かもっとよい書き方はありますでしょうか? 処理的なイメージはこんな感じになっています。 LOOP_A: read(IN, $readbuf, 10240); $buf .= $readbuf; LOOP_B: ... レコード長の計算 ... バッファ内にレコード長以上なければ、LOOP_Aへ $buf = substr($buf,$reclen); # 処理済みレコードの削除 LOOP_B へ substr()の部分を C的にいうと先頭アドレスだけ移動するような書き方ができれば一番なのですが~ 1レコード取得は正規表現で探しているのですがこちらはもうすこし調べてからにしようと思います。

    • ベストアンサー
    • Perl
  • VisualC++でRS232C経由のデータの送受信方法

    仕事でVisualC++でプログラムを作っているのですが、VC++は初心者なので解からない事がいっぱいです。 今作っているプログラムは、VisualC++でRS232Cを使って送られてくるデータをダイアログのエディットボックスに表示するというプログラムなんですけど、どうやってデータを受取るのかまたそのデータをどうやって表示するのかがまったく解からない状態です。 解かる方は教えて下さい。 よろしくお願いします。

  • C# 画像のトリミング処理

    C#の課題で画像のトリミング処理を行いたいのですが、 どういった処理を行えばいいのか分かりません。 ネットでもいろいろ調べてみたのですが、 Picturebox上に表示させる画像のトリミング方法は見つかっても、 画像そのものにトリミング処理を行う方法は載っていませんでした。 上記のソースを参考にして、 Pictureboxをプリントスクリーンで撮って保存するやり方も試してみたのですが、Pictureboxよりも大きな画像(パソコンの解像度ぎりぎり)の処理で上手くいきません。 C#のソースプログラムでは 画像そのものに直接手を加える形でのトリミング処理は出来ないのでしょうか?

このQ&Aのポイント
  • アース ナチュラル天然由来ダニよけスプレーは、布団や洋服などに効果的なダニスプレーです。天然由来成分の力でダニを寄せ付けません。
  • ダニアーススプレーは、布団や畳、洋服などに使用することができる効果的なダニスプレーです。ダニを駆除しながらも、肌に優しい成分で作られています。
  • キンチョー ダニがいなくなるスプレーは、布団や洋服に効果的なダニスプレーです。駆除効果が高く、ダニを取り除くことができます。
回答を見る