[過去ログ] C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: デフォルトの名無しさん [sage] 2016/06/29(水) 23:45:15.36 ID:EZjVZgG6(1/2) AAS
■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら
外部リンク:www.visualstudio.com
■コードを貼る場合はこちら
外部リンク:ideone.com
■前スレ
C#, C♯, C#相談室 Part88 [転載禁止]©2ch.net
2chスレ:tech
C#, C♯, C#相談室 Part89
2chスレ:tech
C#, C♯, C#相談室 Part90
2chスレ:tech
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
978(1): 803 [sage] 2017/01/29(日) 12:03:54.50 ID:6CKnMYhm(1/3) AAS
>>818>>819819(1): デフォルトの名無しさん [sage] 2017/01/23(月) 21:01:33.61 ID:bI3M8V88(1) AAS
>>816
ビルドターゲットはx64になってる?
AnyCPUだと最近のは32bitを優先がデフォルト設定だから上手く行かないかも。こっちを直しても良いけど。
いずれにせよ、64bit環境は必須。
>>831831(1): デフォルトの名無しさん [sage] 2017/01/24(火) 01:13:39.09 ID:JiOoKhp+(1) AAS
>>816
GetValueなら64bitを指定できはする
64bitなら一応確保できるのかなぁ
だけど、そもそも2GB超の連続領域を安定して確保できるかは不安
メモリマップとかも検討したら?
64bitでコンパイルする
2GB内に配列を分割する
などいろいろやりましたがメモリオーバーになってしまいどうしても実行できませんでした
結局、元のファイルを分割し、最後に結合する方式にしてやっと通りました
使用メモリ見ると10GB位食ってましたが一応全部実行できています
ご協力ありがとうございます
979(1): デフォルトの名無しさん [sage] 2017/01/29(日) 12:28:52.14 ID:NqGwYzj0(1) AAS
>>978
配列に入れて何がしたいのか最後まで聞けなかったけど、FileStreamで読み書きじゃ駄目だったの?
980: デフォルトの名無しさん [sage] 2017/01/29(日) 12:34:03.49 ID:Be2uFNKC(1) AAS
同意見
そんなもん全部メモリに読んだところで
どうせシーケンシャルに処理する以外にやれることがあるとは思えない
981: 803 [sage] 2017/01/29(日) 13:07:42.19 ID:6CKnMYhm(2/3) AAS
>>979
BinaryWriterで挿入操作ができれば使っていたのですが
以下を見るとできないようなので使いませんでした
外部リンク[html]:dobon.net
982(1): デフォルトの名無しさん [sage] 2017/01/29(日) 13:12:51.28 ID:WfZCQfEI(1) AAS
一時ファイルに元のファイルの内容と挿入データを書き込む
→元のファイルを削除する
→作成した一時ファイルの名前を元のファイルの名前に書き換える
でできると思うけど自分の好きな方法でうまくいったのならいいんじゃね
983: 803 [sage] 2017/01/29(日) 13:29:04.76 ID:6CKnMYhm(3/3) AAS
>>982
>一時ファイルに元のファイルの内容と挿入データを書き込む
確かにこのやり方がスマートでした
元のコード流用しようとしたので今のやり方になってしまいました
あらかじめわかっていたら・・・
984: デフォルトの名無しさん [sage] 2017/01/29(日) 17:25:54.20 ID:UOF0Asn0(1) AAS
うめ
985(1): 810 [sage] 2017/01/29(日) 22:35:39.11 ID:F8/CipCU(1/4) AAS
>>810810(2): デフォルトの名無しさん [sage] 2017/01/23(月) 00:41:33.95 ID:ft2qOqRV(1/2) AAS
803じゃないけど、
10〜20個くらいのプロパティを持つクラス(ほとんどstring型)の、数百万個単位のインスタンスを処理したい
(現在百数十万個だがデータは日々増えていて、将来的には500万個以上のデータを扱いたい)
データ追加時を除けば1つのデータのプロパティを書き換えることはあまりない
全データを対象に集計や抽出をバリバリやる
今はこのクラスのジェネリックリストでメモリ上に保持していて、XmlSerializerとStreamReader/Writerでロード/セーブしてるけど、
500MB以上のファイル読み書きに十秒単位で時間が掛かるようになってきてしまい、使用メモリも多いときは1GBに届きそうになってきた
個人のPCでも実現出来る範囲で何か工夫して軽量化するとすれば、どういうやり方があるだろうか
データベースを使うと却って重くなる?
です。反応が遅れてすいません。現在は、
クラスのインスタンスの複数のプロパティの値を比較して等価かどうか判定しているのですが
データをリストに追加する際、2種類の等価比較法(IEqualityComparer)を用いています
つまり追加対象のデータのうち、
まず弱い比較(少なめのプロパティだけが一致するか比較)で
既存のリストにないデータの「候補」をざっくりピックアップして、
候補たちに少々時間のかかる処理をかけてから(一部プロパティが書き換えられる)、
次に強い比較(多めのプロパティを比較)で候補の中から真に「新しい」ものをリストに追加しています
PosgresやLocalDBといったデータベースでは、こういうことって簡単にできるんでしょうか
ネット検索してみたところ複数のプロパティを比較すること自体は
UNIQUE制約(?)というので出来そうに思ったんですが、
現在やっているような2段構えの比較法は実現可能なんでしょうか?
986(1): デフォルトの名無しさん [sage] 2017/01/29(日) 22:51:26.56 ID:M0HgmB1M(1/3) AAS
二段構えにする必要はない
比較に必要な全てのカラムセットにuniqueインデックス張りなさい
987(1): デフォルトの名無しさん [sage] 2017/01/29(日) 22:55:35.08 ID:F8/CipCU(2/4) AAS
>>986
それだと誤判定になりませんか?
追加前のデータと実際に追加するデータでは
一部プロパティ(弱比較ではチェックしないが、強比較ではチェックするプロパティ)の値が異なっているのですが…
988(1): デフォルトの名無しさん [sage] 2017/01/29(日) 23:02:20.70 ID:faIlAfcC(1) AAS
>>987
強比較の値がDB上に固定できるなら、最初から強比較でやっても十分な速度が出ます
取り出してから変化する性質なら、弱比較でDBから取り出し値を生成してからメモリー上で強比較で良いんじゃないの?
989(3): デフォルトの名無しさん [sage] 2017/01/29(日) 23:27:53.21 ID:F8/CipCU(3/4) AAS
>>988
すいません、「DBから取り出す」という表現が何を指しているのかよくわかりません…
いま思案しているのはデータの集計作業時ではなく登録作業時の話です
各データについて、一部のプロパティの値を確定させるには処理時間がかなり必要になっています
追加登録したいデータたちについて、このプロパティ値をあらかじめすべて確定するのは非常に時間がかかるので
まず弱比較でざっくりと追加可能な候補(プロパティ値を確定しなければならないデータたち)を絞っているのです
今はこんな風にしてます(実際のコードでは日本語変数じゃないです)
候補データリスト = 追加したいデータのリスト.Except(全リスト, new MyClass_WeakComparator()).ToList();
↓
候補データリスト について全プロパティ確定作業; //←重い
↓
全リスト = 全リスト.Union(候補データリスト).ToList();
990: デフォルトの名無しさん [sage] 2017/01/29(日) 23:33:19.34 ID:F8/CipCU(4/4) AAS
>989補足
Union()のところで既定の等値比較子として強比較が使われています
991: デフォルトの名無しさん [sage] 2017/01/29(日) 23:37:15.13 ID:M0HgmB1M(2/3) AAS
>>989
insert into 処理対象テーブル
select 追加後の値を得る計算式
from 処理対象テーブル
where 追加対象を得る条件式
これでいいんじゃないの?
弱比較とかよくわからん言葉遣いはやめた方がいい混乱するから
992(1): デフォルトの名無しさん [sage] 2017/01/29(日) 23:50:32.58 ID:M0HgmB1M(3/3) AAS
なんか違うなこうか
insert into 全リスト
select 任意の計算式
from 追加データ
where not exists (
select *
from 全リスト
where 簡易な比較条件式)
and 完全な比較条件式
インデックスは簡易な比較に使うカラムだけでいいよ
993: デフォルトの名無しさん [sage] 2017/01/30(月) 00:02:56.22 ID:kb+lR8OL(1/2) AAS
>>992
やはり、条件式を2種類地道に書くしかないんですか…長くてハゲそう
>インデックスは簡易な比較に使うカラムだけでいいよ
アドバイスありがとうございます
994(2): デフォルトの名無しさん [sage] 2017/01/30(月) 00:07:16.67 ID:YrqXkGEW(1) AAS
>>989
それだと「弱比較」で一致してしまった物は全部捨ててしまっているがいいのか?
>>985の書き方だと、「弱比較」で一致しても「強比較」で一致しない物があり、
それは書き込むと読める。
まあこの辺はそちらがやればいい話だが。
995(2): デフォルトの名無しさん [sage] 2017/01/30(月) 00:14:31.63 ID:GO+RhKVN(1) AAS
数千行のSQLとか当たり前だから!!!
そのためのDBMSでしょ!!!
996(1): デフォルトの名無しさん [sage] 2017/01/30(月) 00:23:01.74 ID:RAZ09caE(1) AAS
1回のクエリで完結させようとせず
1次候補抽出クエリ → ローカルで1次候補のプロパティ書き換え → 最終候補抽出&インサートのクエリ
の3段構えにしてもいいんじゃないかと思うけど
997: デフォルトの名無しさん [sage] 2017/01/30(月) 00:33:18.83 ID:kb+lR8OL(2/2) AAS
>>994
>「弱比較」で一致してしまった物は全部捨ててしまっているがいいのか?
詳しくは書けませんが、やりたい動作としてはその動作でOKです
985の説明はちょっと正確ではありませんでした
>>995
大規模なデータベースを触ろうとするのは初めてだったので…すいません
>>996
どっちみち長い比較条件を書かないといけないのは避けられそうにないので
その方法でもよさそうですね
998: デフォルトの名無しさん [sage] 2017/01/30(月) 01:03:13.10 ID:9w4b/GJp(1) AAS
>>995
SQLが数千行もあって当たり前なの?異常じゃないの?SQLだよ?
999: デフォルトの名無しさん [sage] 2017/01/30(月) 02:19:40.86 ID:ty17mMxy(1) AAS
SQL Serverは問合せ文と制御文を1つのストアドに混在できるので複雑な工夫が容易で、
腕が良ければ数千行の複雑な処理を書くことによって物凄く高速化できることがある
Oracleは混在できないため複雑な処理を書くには手間がかかり、プログラマーがあまり工夫しなくなり、
そのため腕が上がらず、結果としてSQL Serverより遅いシステムが多いらしい
現在のSQL ServerにはOracleと同じスナップショット分離(古い人は「行ロック」って言う)があるが、
2000の頃はなかった(今でもデフォルトでオフになってる)ため、高速な更新処理が必要だったことも腕に関係すると思われる
(スナップショット分離があれば、ダラダラ更新しても他ユーザーの閲覧に迷惑かけない)
1000: デフォルトの名無しさん [sage] 2017/01/30(月) 02:31:32.87 ID:RISpHKLn(1) AAS
次スレ
C#, C♯, C#相談室 Part92 [無断転載禁止]©2ch.net
2chスレ:tech
1001(1): 1001 [] Over 1000 Thread AAS
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 214日 2時間 46分 18秒
1002(1): 1002 [] Over 1000 Thread AAS
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
外部リンク:premium.2ch.net
▼ 浪人ログインはこちら ▼
外部リンク[php]:login.2ch.net
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.169s*