Posts Tagged ‘VisualStudio’

WindowsのVisualStudioでpriority_queueに大量データを突っ込むと遅くなった

2月 11th, 2010

という問題が職場であったのでそのメモ。Releaseモードだとすぐ処理出来るのにDebugモードだと無限ループに陥ったかのような挙動を示す質問をもらったので調べてみました。priority_queueというのはある値に戻づいて順序が保たれるqueueです。便利ですね。

再現コードはこれでOK、C++編(標準ライブラリ) 第7章 priority_queueを参考にさせて頂きました。

#include
#include
using namespace std;

int main()
{
    priority_queue qu;

    // 要素を追加
    for(int i=0; i<100000; i++){
        qu.push( i );
    }

    // 先頭要素を取り出して出力
    cout << qu.top() << endl;

    return 0;
}

VisualStudio2005で試したところDebugモードだと動いてはいるのですが、とにかく時間がかかります。途中で処理を止めたところpushに時間がかかっているようです。そこでpushの先を追って行くと下記のようなコードが見つかります。

_Vector_iterator()
       {       // construct with null vector pointer
       }

#if _HAS_ITERATOR_DEBUGGING
_Vector_iterator(pointer _Ptr, const _Container_base *_Pvector)
       : _Mybase(_Ptr, _Pvector)
       {       // construct with pointer _Ptr
       }

#elif _SECURE_SCL
_Vector_iterator(pointer _Ptr, const _Container_base *_Pvector)
       : _Mybase(_Ptr, _Pvector)
       {       // construct with pointer _Ptr
       }

#else
_Vector_iterator(pointer _Ptr)
       : _Mybase(_Ptr)
       {       // construct with pointer _Ptr
       }
#endif /* _HAS_ITERATOR_DEBUGGING */

これを見るとdefineの定義状況によって、毎回値の妥当性チェックが呼ばれているようです。
これが過度にパフォーマンスが落ちていた原因でしょう。

_HAS_ITERATOR_DEBUGGINGはデバッグビルドでのみ有効になるようですが、_SECURE_SCLはリリースビルドでも残るようです。何用の定義なのかは軽くググッた限りではわかりませんでした。2007-07-04 – 新言語 Xtalを作る日記が見つかったぐらいです。

回避策としては両defineを0に設定すれば動かなくなり、通常のRelease/Debugの時間差で収まるようになります。

【解決済】VisualStudioとgccでコンパイルできるソースのエンコーディング

11月 4th, 2009

UTF-8だと一見どっちも対応しているように見えるんだけど、VisualStudioはBOM有のみ、gccはBOM無しのみ対応しています。

んで、対策として取ったのが gitでリポジトリからのチェックアウト時に文字コードを変換する » tune webだったんですが、今日仕事中にこんなページを見つけました。
GOGA – 数式の夢とコンピュータの現実: UTF8のソースコードをgccとVCで共有すること

なんだ、VisualStudioの方は警告さえ抑えれば普通にコンパイルできるのかとさっそくやってみたのですが、見事に失敗しました。VisualStudioでコンパイルするとエラーが山ほどでてダメでした。
調べてみるとVisualStudio2003まではいけたらしいんですが、自分が使っているVisualStudio2005ではNGでした。今の最新版は2008ですし、来年には2010もでます。VisualStudioのバージョンによらず簡単な解決法を模索したいところなのですが、困りました。

「VisualStudio2008/2010ならBOM無しのUTF-8も扱えるよ」という情報をお持ちの方がいらっしゃいましたらぜひ教えてください。

→2010年5月2日 解決しました Windows/Linux両環境で動作するC言語ソースの一元管理をGitで行う » tune web

Visual Assist X

4月 24th, 2007



昨日の DoxyCommentを探している途中で見つけたVisualStudioの機能を拡張してくれるadd-inです。 Visual Assist X – The Code Project – Product Showcaseの記事によると入力補完を拡張してくれるようです。

シェアウェアでなければ試してみたかったのですが、会社では使えないなぁ。

DoxyComment

4月 23rd, 2007



会社で作成しているプログラムのAPIドキュメント作成に Doxygenを使うことになりそうなのでVisualStudioで入力補助などを実現するadd-inを探してみたのですが DoxyCommentくらいしか見つかりませんでした。ファイルの先頭か関数の前かを判断して定型のコメントを挿入する機能しか持ち合わせていないようです。設定で拡張できたりするといいんだけど・・・

マクロだと以下のリンクが参考になりそうです。

VisualStudioで○○言語の開発をする

1月 5th, 2007

VisualStudioのカスタマイズを調べていたら本来VisualStudioがサポートしていない言語での開発をサポートするソフトをいくつか見つけたのでまとめておきます.

* PHP – VS.Php


まずは有名どころのPHPから.デバッガ,インテリセンスも使えてPEAR,Smartyなんかも対応しているらしいです.日本では アシアル株式会社 事業紹介 VS.Phpから購入できます.30日の無料体験版がダウンロードできて製品版は39800円です.
- Php IDE – VS.Php Standalone Edition | Jcx.Software Corp.

* Ruby – Ruby In Steel


お次はRuby,PHPと同じくデバッガ,インテリセンスが使えて,Ruby on Railsも対応しているようです.無料版もあって,有料版だと$249,いまなら期間限定で$199で購入できるみたいです.
- Ruby IDE :: Ruby In Steel :: Ruby Programming with Visual Studio 2005

* Haskell – Visual Haskell


最後は関数型言語のHaskellです.無料で使えるのでHaskellの勉強にも使えそうです.
- Visual Haskell

PerlやPythonは以前VisualPerlやVisualPythonといったソフトがあったようなのですが開発は終了してしまったようです.探せば他の言語のもありそうですね.あとは何の言語があったかな・・・