
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
試しにtest クラスを作って、Dictionary<int,test> で10億個作ってみましたが、別にエラーにはなりませんね。
ま、クラスが肥大化すれば別なんでしょうが。Windows7 64bit corei7-3770 32GB です。
過去の経験から申しますと、原因不明のエラーがメモリーの破損に起因するという事がありました。
普段はエラーはでませんが、そういう大容量メモリーを使うプログラムでのみ発症しました。
最終的にはメモリテストをPCショップでやってもらって初めて確定でき、メモリー交換をしてもらう事で解消しました。メモリーの保証書はとっておくものですね。
この回答への補足
もしかすると私が勘違いしているかもしれませんが、小さなクラスtest class を作成し、
Dictionary<long, test> t = new Dictionary<long, test>
test te = new test();
for (long i = 0; i < 1000000000; i ++)
{
t.Add(i, te);
}
上記のコードではメモリ不足になります。
for (long i = 0; i < 1000000000; i ++)
{
Dictionary<long, test> t = new Dictionary<long, test>
}
上記のコードでは確かにエラーにはなりませんが Dictionary
を作成して要素を10億個追加することにはならないと思います。
No.5
- 回答日時:
#4です。
>仮想メモリはどう設定するのでしょうか。
これは単なるWindowsの設定です。
検索すればいろいろ出てきますが、Windows7なら、このあたりでしょうか?
http://121ware.com/qasearch/1007/app/servlet/rel …
>プログラムを64ビットで動かすにはどこを設定すればよろしいでしょうか。
any cpuになっているなら大丈夫だと思います。
32bitで動いているとしたら、だいたい1.5GbyteほどメモリをつかったところでOutOfMemoryになると思いますし。
No.4
- 回答日時:
仮想メモリは十分(100G~5T程度?)確保されていますでしょうか。
あと、C#の構成はx64、あるいはany cpuが選択されていますでしょうか。
プログラムが64bitで動いていれば、メモリ空間は足りているはずなので、仮想メモリが期待通りに動作してくれれば、動きそうな気はします。
実際に試したことはないので、憶測ですけど・・・。
まあ、仮に動いたとしても、仮想メモリ頼りでは効率が悪そうなので、#1さんのおっしゃるようにdatabaseの使用を検討したほうがよさそうですけどね。
この回答への補足
>仮想メモリは十分(100G~5T程度?)確保されていますで>しょうか
仮想メモリはどう設定するのでしょうか。C#の構成は any cpu が選択されています。
プログラムを64ビットで動かすにはどこを設定すればよろしいでしょうか。
No.2
- 回答日時:
明らかにメモリ不足です。
50 個のメンバ変数がすべて int だとして、1000 ≒ 1024 = 2^10 ですから 4000万個 ≒ 40M個になり、
4 (int 型のサイズ) * 50個 * 4000万個 ≒ 8G バイト
という計算になります。
というか、なんでそんなにいっぺんに1億個ものデータが必要な処理を行う羽目になったのでしょうか。
その辺を具体的に補足いただければ代替案が出せるかもしれません。
この回答への補足
メンバ変数は long です。ので16Gバイトのようですが、なぜこんなにデータが必要なのかということに関しては以下の通りです。
一つのクラスがある事象を表現するのに long値 で50ぐらいを使用します。そのクラスが初期値としてたとえば100万個作成しておきます。
それらの事象を時間の経過とともに計算して、その結果、自分自身(クラス)を増減します。最低は0になり、最高に増加した場合はたとえば1000倍の10億個といった感じです。
計算は属性値のメンバ変数を必ず参照して行いますので大量のクラスをHDDに保存しておくと計算に時間がかかりますのでメモリ上に保存しておきたかったのです。
言ってみれば個数の増減シミュレーションです。
No.1
- 回答日時:
メンバひとつで4byteとして要素ひとつに50x4 = 200byte、
それが4000万個だと 200 x 4000 x 10000 = 8Gbyte
そりゃエラーが起こるでしょうねぇ。
データを減らすか、それができなきゃ Database 使うかな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トランザクションの開始
-
ヤフーショッピングでPayPay支...
-
更新不要はどういう意味なので...
-
行ロックをかけたい
-
リコーimagioneo630 エラーs...
-
階層型データベースとVSAM...
-
ACCESSのフォームだけを起動す...
-
pg_dumpの文字化け
-
Access2010でリボン等を非表示...
-
CSVファイルをBULK INSERTでSQL...
-
クラスタと冗長化の違いって何...
-
ディスク上のサイズの乖離が大...
-
PostgreSQLについて教えてくだ...
-
SQLサーバのジョブにてVisualBa...
-
エクセルVBAでcommit,rollback
-
AS400でのライブラリ配下の全て...
-
pg_restoreでエラー
-
ファイルに記述されている複数...
-
createdbでいきなりつまづいて...
-
DB2の共有ロックについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ヤフーショッピングでPayPay支...
-
リコーimagioneo630 エラーs...
-
マインクラフトエラー
-
C#で大量のデータを扱うソフト...
-
ソケットの異常終了について
-
関数引数に対する制限値チェッ...
-
トランザクションの開始
-
更新不要はどういう意味なので...
-
SQLServerへの接続子による違い...
-
MPI
-
socket のエラー
-
fortranで文字列と数値が混在し...
-
CloseHandleのエラーについて
-
エクセルVBA_ADO「ファイアホー...
-
unityのstrixについてです
-
BASP21送信エラーVB.NET
-
Windows10更新アシスタントでエ...
-
VB.NET Webアプリケーションの...
-
ディスク上のサイズの乖離が大...
-
Windows版 pg_dumpの結果をログ...
おすすめ情報