series_count = 500のとき、OutOfMemoryException発生 VS2008 でC++/CLIを使ってフォームアプリを作成しています, 下記のMicrosoft Chart Controlsを使ってグラフを描画しています, http://www.microsoft.com/ja-jp/download/details.aspx?id=14422, 試しに、データ数100個で固定してプログラムを書いてみましたが、とても遅く実用できそうにありません, さらにseries_count = 1000ぐらいになってくると、グラフ描画する時点でPCの画面が固まり30秒程度操作不可になりだします。これは原因は分かりませんが、メモリ不足でスワップが発生している気がしています。, Microsoft Chart Controls(VS2010では標準で使える)は、使うべき理由が特に生じなかったため調べていませんでしたが, 普通はそうでない要因で少なくとも「30秒程度操作不可」といったことは起きるかと思われます。(メモリ使用量を見ての推測), 『OutOfMemoryException』についてはそれぞれの型や下準備が不明瞭なのでコメントは控えますが, 佐祐理さんの「C++言語としてのオブジェクト参照」はToStringのみじゃなくて, にかかってるものだと思いました。(連想配列的なものを実装した事がある身としてはむしろこっちの方が主題に思います。), バインドよりもAddY連続の方が「最初の生成は」速い傾向があり、その代わりバインドは描画が速くなりました, 少なくともDataBindYをSeries毎にやることではあまり変わりがありませんでした。, 「Y要素数」を100個から2個に(50分の1!)減らしても、依然として何十秒もかかります。, 複数のSeriesをひとくくりかのように扱えるバインディングの方法がもしかしてあれば別、かもしれませんが, 世の中にあるこういう系統のグラフって、ほとんど系列10もないぐらいじゃないでしょうか?, もしどうしても削らないという場合は、やっぱりMicrosoft Chart Controlsを使わず, 仮に1000*100=10万ポリゴンと見立てて、たとえばDirectX使えば、最近の並みのGPUなら普通1秒も絶対かからないようなものだと思います。, 環境が全く異なるため比較にならないかもしれませんが、ずいぶんと結果が異なるようです。 VMware Playerの仮想マシンを軽快に動作させる. 『計測が終わった後の最初の描画(内部計算&Bitmapに反映の一連のながれ?)』 がけた外れに遅いという事実は変えられませんでした。 バインドよりもAddY連続の方が「最初の生成は」速い傾向があり、その代わりバインドは描画が速くなりました まずは動作しているVMware Playerを停止しましょう。停止したら、仮想マシンのファイルが格納されているフォルダにアクセスします。, フォルダ内の「*.vmx」(今回はCentOS7-2.vmx)を、テキストエディタで開きます。, 開いたら、ファイルの末尾に以下のパラメータを書き加えます。 [/VIM] ※ この記事は少し古かったんですが、検索経由で来られる方が多いので 2015/11/26 に情報を更新しました... こんにちは。肥大化とか膨らむなどの単語に過剰反応しがちな篠キチです。   Windows系のOSを使... またしてもVirtualBoxネタです。前回の記事ではVMWareで使われているVMDK形式の仮想マシンイメー... 半年くらい前ですが社内のPCが突然インターネットにつながらなくなるトラブルが頻発したことがあり、原因が意外なも... 土・日・祝日、ゴールデンウィーク・年末年始休暇等は、翌営業日以降のご対応となる場合がございますのでご了承ください。. MemTrimRate = “0” using System.Drawing; using System.Diagnostics; 投稿日:2016年03月02日 最終更新日: 2017年10月26日 VMware Playerを利用して仮想マシンを動作させるのは、便利ではありますが、動作が遅かったり … series_count = 1000のとき、OutOfMemoryException発生, 他のバインドのメソッドも試してみたいのですが、色々調べて試していますが、使い方がいまいち分かっていません。, できるかぎり速度はあげたいことはかわりませんが、これはこれで重要になので検討します。, てっきりToStringのことと思ってしまいました。Series^を使うようにするんですね, >『計測が終わった後の最初の描画(内部計算&Bitmapに反映の一連のながれ?)』, 最大系列数を減らすことは私に決定権はないので出来るかまだわかりませんが検討しています, 私の環境C2D 3.12GB/ WinXP 32bit / VS2008 C# .NET3.5で、, ただ、それ以外全部そのままで " SeriesChartType::FastLine "に変えてみると, 9~10秒程度になりましたw(はやっ ・・・てかFastLineじゃないと遅すぎるのかw), でもやっぱり「古い環境を除外できる」なら、この辺ぐらいまでならありかもっていうきはしますね。, 数値をどちらも5000,5000に、さらに書き換えてのメモリ使用量を監視しての感想なのですが, FormのLoadイベントにコードを設置したところダブルクリックして30秒ぐらいたってもまずフォーム自体が表示されてこない(この間CPUは2コアの片方がぶん回りっぱなし), こちらは1000, 100だと50MBぐらいですね。(アプリケーションの内容にもよりますが、大抵はこれでも「これだけの理由のために割くにしては」多くないかな?), これはアプリケーション自体のメモリ使用量も込みなので、仮に実際には40MBぐらいだとして、単純計算出来ると仮定しても, となり、32bitでは絶対無理で、64bitでも一般的には(?)十分無理な気がします。, ちなみに、少し大きめに見積もって仮に一つの要素に8bytes使うとしても、全部自力でグラフを書くのならば, となり、Bitmapは画面出力用の最小限の大きさでいいので、普通にやってればあと数MBぐらいあるだけ、合わせて200MB程度で、これは状況によってなんとか許容範囲な気がします。, C#のテストプロで、FastLineで250シリーズ100プロットの場合に表示に丁度1秒なので、ここらあたりが限界なのかと思います。, 佐祐理さんの2012年7月2日 20:44のテストプロ(1000シリーズ,100プロット)を利用して、表示した場合に、メモリ空き容量が、1633000→1583000となったので、使用量は50KBでした。, 自分の作ったC++/CLIのテストプロだとMB単位だったような気がしたんですが・・・何かそれはまた別の原因のようです, これって何で測りましたか?(この数値は、単位KBじゃないですかね? ※ちなみに私はAPIうったりするのが面倒なので、簡易チェックはタスクマネージャとかで行っていますが), といいますのも、流石に.NETフレームワークのアプリ起動&Bitmap内部で使ってると考えると, MB単位はいってないとおかしいと思います。1000*100の要素があれば、1要素あたり1バイトしか使ってなくても100KB近く行ってしまいますし, で試したところ、だいたい1000*100一つに対して27~30MBぐらい上昇する事が分かりました。, なので、そのまま直線的に増えた場合は、9GBはいかないですね。せいぜい7GB超ってとこのはずです。(どっちみち十分多いですがw), ※他の方が今後使う場合も、おそらくどの道シリーズ数低めに保つのが王道だと思うので、そう言う点では無用な心配でしょう。. prefvmx.useRecommendedLockedMemSize = “TRUE” using System.Linq; 仮想マシンのイメージをVMWareのVMDK形式のままにしてるのと、VirtualBox用のVDI形式にした場合でパフォーマンスに差があるか調べてみたことがあります, 仮想マシンイメージのOSがWindows7(32bit)、IDE接続でメモリは512MB、1CPU, ホストPCのスペックはMid2013の13インチ MacBook Airで。1.3GHzのCore i5、メモリ8GB. [VIM] mainMem.useNamedFile= “FALSE” 大好きとか言ってんならもっと早く気づけよ、全然待望してねえじゃんって話ですが、VirtualBox起動したときに新しいバージョンがあるかどうか自動でチェックしにいく仕組みがあるのに、それ経由で通知されたのつい最近だよ。しかも既にVer5.0.8だった。教えろよVirtualBox! 何事も報・連・相だよ、ホウ・レン・ソウ! 相談されても困るけど。, というわけで、VirtualBoxが4から5になって速くなったりしたのか、3ヶ月以上遅れの速報してみたいと思います。, 以前、仮想マシンのイメージをVMWareのVMDK形式のままにしてるのと、VirtualBox用のVDI形式にした場合でパフォーマンスに差があるか調べてみたことがありますが、あんな感じでVirtualBox4と5の差を調べてみます。, MacのOSは時代にあわせてEl Capitanの最新版(10.11.1)です。SSDでディスクの読み書きのパフォーマンスはもともとかなり速いです。これも前回同様。, 今回はCrystal Disk Markでディスクのパフォーマンスを見つつ、ちょっと懐かしい感じですがCrystal Mark 2004で総合的な数値も見てみることにしました。, 全体的に10%くらいの性能向上かな。VirtualBoxもVer5ともなるとこなれちゃってて、そんな劇的には変わらないですね。まあ、こんなもんかなという感じがします。, そもそも1年くらい前に書かれた「ScalaのコンパイルはVirtualBox環境だと5倍時間がかかる」というQiita記事が発端らしいんですが、5倍遅いとか言われるとVirtualBox大好きっ娘(おっさん)としては気になってしまいます。, そこでVirtualBoxの4と5の比較に使ったのと同じ仮想マシンを、VMWareFusionの最新バージョン(8.0.2) 評価版がダウンロードできたのでそれを使って検証してみました。, ハードディスクの読み書きがめちゃ速い! やるな、VMWare Fusion。他の性能は大きく変わりませんが、ハードディスク性能には明らかに差があります。, 元記事のScalaのコンパイルに関しては僕はよくわかりませんが、一般的にコンパイルで細かいファイルの読み書きが頻繁に発生するという状況はありそうなので、だとすればコンパイル速度がディスク性能にかなり引っ張られてしまう可能性は高いと思います。, 僕も以前はVMWare Fusionを使っていましたが、通常の使い方でVMWare FusionとVirtualBoxに5倍の性能差を感じるようなことはありませんでした。Scalaコンパイルの足を引っ張っているのはディスク性能の差と言えそうな気がします。, 5倍遅いかどうか検証した方も書かれてますが、たぶんこれくらいであれば差がついても2倍行くかどうかというあたりじゃないかと思います。であれば、VMWare Fusionじゃないとダメってとこまでにはならない感じがしますし、最近はSSDも安いのでいっそディスクを入れ替えたほうが幸せになったりするんじゃないかと思ったりもします。, っていうか、個人的に気になるのは描画のパフォーマンスの差なんですけどね。VMWare Fusionのほうが5倍以上遅い感じしますけどどうなんでしょ(ドヤ顔, 約3年半にわたり君臨したランチェスター最年長の座を譲り、今はただの猫・鉄道・Perfume好きな不惑おじさん。好きなスタバオーダーはクワットロベンティノーホイップソイホワイトモカ。. Copyright © Lanchester Co. Ltd. All Rights Reserved. 秒数指定はミリ秒単位で行います。5~6秒(5000ms~6000ms)くらい確保すれば、BIOS画面(F2キーを押す)やブートデバイス選択画面(ESCキーを押す)にも入りやすくなります。 いつもお世話になっております ファイルを保存したら、カスタマイズ完了です。, また、その特性上、ホストマシンにはそれなりの量のメモリを搭載することが要求されます。具体的には、「ホストOSを動作させるために必要なメモリ量+ゲストOSで消費する(仮想マシン設定で割り当てた)メモリ量」を確保出来るだけのメインメモリが必要です。, ハイスペックなマシンでゲストOSを動作させていると、BIOS設定画面(ブートデバイス選択画面)に入るためにボタンを押すタイミングが非常にシビア(というか1発で入るのは至難の業)になってきます。そのようなときに、BIOS設定画面に入りやすくするための設定を解説します。, 動作しているVMware Playerを停止して仮想マシンのファイルが有るフォルダにアクセスし、*.vmxファイルをテキストエディタで開くのは同じです。その後、「BIOS.BootDelay」と書かれたパラメータを探します(なければ追記しましょう)。ここでBIOS画面を表示させる秒数を制御できます。 [/VIM] sched.mem.pshare.enable = “FALSE” using System.Windows.Forms.DataVisualization.Charting; デバッグ起動だと表示完了までにさらに10秒ぐらい余分にかかりましたので、とりあえず, Athlon 64 X2 1.87GB/ WinXP 32bit / VS2010 C# EE .NET3.5で, (今となっては最近のPCと比べるとひよっこぐらいの性能になってしまったかもしれませんがw その中でどうにかやりくりしようとすると、結構何とかなってしまうもので、かわいいもんですw 7や8じゃないと使えないものが色々あるのでそれはそのうち欲しいですが、このXPには愛着があります。), ※これは少なくともこちらの環境では、私が提示したC++/CLIのコードとほぼ同じ数値となりました。, な~るほど、この中に挙げられている環境要因の中でここまで大きく差がつく点があるのだとしたら・・・さすがにコンパイルは32bitということですし、プロセッサだけでは、そこまではたぶんなぁ・・・, (インテリセンス効いてる状況でvarが使えて、しかも対.NETなのに当たり前にラムダ式が使える), やっぱりマネージコードだけに集中出来て、それをバリバリに書く部分は出来るだけC#でやった方が良さそうだな、と。, これはもしかすると、古い環境を除外できるのであれば1000とかでも許容できる、ということを示唆しているのかもしれませんね。, ここに書かれているだけで見ても、series_count = 1000のとき #秒数指定はミリ秒単位 (参考リンク→乳牛日記: VMwareでBIOS設定画面の起動をしやすくする(F2を押せ!)), VMware KB: ホスト型ディスクの I/O パフォーマンスに関する問題のトラブルシューティング, VMware Playerの仮想マシン(CentOS7)のネットワーク設定(IPアドレス設定など)を手動で行う, 次の記事:「少年の非行防止のためには、部活動強制加入システムで少年を部活動に縛り付けなければならない」理屈を崩壊させる資料が出た!?部活動強制で生徒の自由を剥奪する意味はもはやどこにも無い!!, 教員の「超勤4項目」とはなんぞや?でもこれを知らないと教員の残業問題は語れないかも!?, PCの消費電力を測定するMicrosoft製のソフトウェア「Joulemeter」, LibreOffice Calcで「この条件を満たしている時にセルの背景色を変える」などの動作をさせるときに使用する「条件付き書式」についてメモ, 日本の学校における体育教育の目的は何なのか?体力の向上が目的なら、ひたすら個人のペースでゆっくりトレーニングしていたほうが良いのでは?, 現在開いているタブ・ウインドウの情報を保存・復元できるFirefoxアドオン「Tab Session Manager」, Thunderbirdでメールを作成する時に自動で折り返す(改行する)文字数を変更する・自動折り返しを無効にする, mainMem.useNamedFile= “FALSE” … ゲストOSのメモリにファイルを使わない(物理メモリを使う), sched.mem.pshare.enable = “FALSE” … ページ共有機能を無効にする, prefvmx.useRecommendedLockedMemSize = “TRUE” … メモリ使用量が変化してもメモリサイズを固定する, MemAllowAutoScaleDown = “FALSE” … ゲストOSのメモリサイズを自動調整させない. BIOS.BootDelay =”5000″ こちらの環境はCore i7 8GB Win8 64bit VS2012 .NET 4.5 C#で32bitでコンパイルしています。それでもseries_count=1000、各seriesに100プロットで、データの設定に0.287秒、表示完了までに2~3秒です。, 32bitでコンパイルしているので使用可能なメモリ量に差はなく、質問者さんの環境でOutOfMemoryが発生するとしたら別の原因でしょう。(もしくはchartコントロールのバージョンの違い?), ※その前に、私自身が.NETにそれほど詳しくなくて結局2度調べることになったのでw. this->chart1->Series["i" + i.ToString()] が1000 * ( 3 + 100 ) = 103,000回実行されています。グラフとは無関係なC++言語としてのオブジェクト参照、これだけでも遅くなりそうに感じませんか?, ところでSeriesが1000あるのはどんなグラフなんだろう…コンピューターのモニターは1000px程度しかありませんよ?, series_count = 100のとき、13037msec #以下の例では5秒間BIOS画面を表示させる いつの間にか出ていたVirtualBox最新版のVer.5、Ver.4と比べてどのくらい速くなったのか検証。また最近ちまたで噂のVirtualBoxがVMWareより5倍遅い件の検証を僕もやってみました。VirtualBox5の目玉機能、準仮想化(Paravirtualization)の効果も調べてみましたよ [VIM] VMWare Toolをインストールしても、Remote Desktop上でVMWareを動作させた場合には、マウスの動きが滑らかにならなかった。 そこで、以下の設定を行うと無事マウスが滑らかに動くようになった。 以下その手順。 1.Windowsの「画面のプロパティ」を起動(「コントロールパネル」の「画面」から起 … MemAllowAutoScaleDown = “FALSE”