C#, C♯, C#相談室 Part55

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/02/08(月) 09:14:16
性能の良いエディットコントロールはそれだけで売り物になるってことでFA
953デフォルトの名無しさん:2010/02/08(月) 09:29:42
自前で描画しないとなー
954デフォルトの名無しさん:2010/02/08(月) 10:01:31
マジで軽くて大容量も使えるエディタとなるとC#の仕事じゃないだろ。
955デフォルトの名無しさん:2010/02/08(月) 20:14:14
VS2010のテキストエディタはWPFだよ
軽くはないけどそんなに遅くもない
956デフォルトの名無しさん:2010/02/08(月) 20:20:07
糞重いせいでリリースを延期しているのだが
957デフォルトの名無しさん:2010/02/08(月) 20:21:41
別にWPFじゃなくても根本的に描画を書き直したりしたらそりゃチューニングに時間かかるだろ
958デフォルトの名無しさん:2010/02/08(月) 23:34:53
どう屁理屈こねようと糞重いことには変わらない現実
959デフォルトの名無しさん:2010/02/08(月) 23:58:40
ロースペック自慢は他でやってくれ
960デフォルトの名無しさん:2010/02/09(火) 00:39:01
熟成10年
961デフォルトの名無しさん:2010/02/09(火) 09:34:10
何かの処理結果を ArrayList に保持する場合
処理するたびに new して代入するのと
最初に一回だけ new しておいて Clear() してから結果を代入するのと
どちらが望ましいんでしょうか?
結果の件数は数十万件になることもあります
962デフォルトの名無しさん:2010/02/09(火) 09:42:03
clearして代入したらArrayListには同じものしか
入らないジャン
963デフォルトの名無しさん:2010/02/09(火) 09:43:18
どんなの作ろうとしてるんだ
なんかの処理っていうのは別メソッドで実装してるんだよな?
Clearする必要あるの?戻り値を保持じゃなくてメソッド中で大量データを処理したいの?
つーか何を望んでるの?パフォーマンス?
964961:2010/02/09(火) 10:06:02
>>962-963
済みません 説明が不十分でした
処理メソッドは処理の度に new した ArrayList に結果を設定して返し
主メソッドはいくつかの処理メソッドが返却したリストをマージ・ソートして保持します

例えば今20万件保持しているとして、次の処理で30万件返却されたとしますと
主メソッドで都度 new する場合、前の20万件のデータは GC されるまで
メモリを圧迫するのではと気になります。
Clear() すればメモリの無駄は少なくなると考えましたが、よく考えたらこれも
結局は GC 頼みになって同じなのかも・・・ Clear() の処理もコストが掛かることですし
毎回 new で問題ないですかね?
965デフォルトの名無しさん:2010/02/09(火) 10:44:28
>>964の文章を理解する気力もなくなってしまった。
これが老いるというやつなのか・・・とほほ
966デフォルトの名無しさん:2010/02/09(火) 10:49:24
>>965
俺も(ヽ´ω`)
五回読見返したけど、ギブアップ。
967デフォルトの名無しさん:2010/02/09(火) 10:56:11
親のListをnew?子のListをnew?
親子とも最初の一度だけでいいと思うが…
ArrayListなんだし追加していくだけでいいんじゃない?

親←NULL
子←NULL

子呼び出し
子←南下1
子終了
親←親+子
(親←南下1)

子呼び出し
子←南下2
子終了
親←親+子
(親==南下1南下2)
968デフォルトの名無しさん:2010/02/09(火) 10:58:07
素でボケてるか

親←NULL

子呼び出し
子←NULL
子←南下1
子終了
親←親+子
(親==南下1)

子呼び出し
子←NULL
子←南下2
子終了
親←親+子
(親==南下1南下2)
969デフォルトの名無しさん:2010/02/09(火) 11:04:25
Clearしても.Capacityは変わらないだろうし、
.Capacityを減らしても内部のバッファを小さいのに切り替えるだけで
メモリの回収は結局GCなんじゃないかと思う。
970デフォルトの名無しさん:2010/02/09(火) 11:07:41
親ArrayList:子で処理したArrayListをまとめる
子ArrayList:100k超のデータ数を処理する?

子のほうは保持し続ける処理がない限り処理が終わったら勝手に消える
親をnewするのは意味不明

よって何もするな
971デフォルトの名無しさん:2010/02/09(火) 11:12:06
できるかできないかは別にして、数十万のオブジェクトを作成してArrayListにいれるっていうのは、このクラスの守備範囲を離れている。
972デフォルトの名無しさん:2010/02/09(火) 11:18:39
数十万件を一気にメモリに載せる必要があんのか、と問いたい。
973デフォルトの名無しさん:2010/02/09(火) 11:19:49
DB物故抜きしたいんじゃないの?
アホみたいに時間かかると思うけど
974デフォルトの名無しさん:2010/02/09(火) 11:19:49
気になりますじゃなくて、調べれば良いじゃないか。
両方試して。
俺らには何万件のデータがどんな容量か分からんのだよ。
975デフォルトの名無しさん:2010/02/09(火) 11:30:29
>例えば今20万件保持しているとして、次の処理で30万件返却されたとしますと
>主メソッドで都度 new する場合、前の20万件のデータは GC されるまで
>メモリを圧迫するのではと気になります
この部分が怖いんだが

親で保持してたListを毎回破棄するのか
何の意味があるんだかわからん
自分でArrayListとかマージするとかって書いてるのに…
976デフォルトの名無しさん:2010/02/09(火) 11:33:34
保持と一旦受けでしょ。
977デフォルトの名無しさん:2010/02/09(火) 11:37:40
tempなんて必要か?
978デフォルトの名無しさん:2010/02/09(火) 11:38:01
しらんがなw
979デフォルトの名無しさん:2010/02/09(火) 11:52:39
>>964
>今20万件保持している
親の保持List

>次の処理で30万件返却
子の返却値(=親の一時List?)

>主メソッドで都度 new する
親の一時List

>前の20万件のデータは GC されるまで
>メモリを圧迫するのではと気になります。
親の保持Listに突っ込んだ後の親の一時List

子の返却時点で上書きされないか?
add使って追加してるだけってオチ…
980デフォルトの名無しさん:2010/02/09(火) 11:54:33
データベースを使うべき課題だな。
981デフォルトの名無しさん:2010/02/09(火) 11:54:59
一つ言えることは、このスレはパフォーマンスに関しては結構あてにならないから
実測してみた方が良いと思うよ。
982961:2010/02/09(火) 11:56:54
私の説明と能力の不足のせいで、皆様に御迷惑をお掛けしました。
申し訳ありませんでした。
真意をお伝えできなかったので混乱してしまったと思いますが
要点は>>969,971,974であると理解しました。
もうちょっといろいろやってみます。

983デフォルトの名無しさん:2010/02/09(火) 11:58:17
>>981
今回に限らず「自分で測定しろよ」ってスタンスのレスがほとんどだったと思うが…
984デフォルトの名無しさん:2010/02/09(火) 12:01:13
C#, C♯, C#相談室 Part55
http://pc12.2ch.net/test/read.cgi/tech/1265283175/

ふらっとC#,C♯,C#(初心者用) Part55
http://pc12.2ch.net/test/read.cgi/tech/1265288563/
985デフォルトの名無しさん:2010/02/09(火) 12:04:13
で次スレは>>984上を乗っ取るの?
986デフォルトの名無しさん:2010/02/09(火) 12:08:38
ふらっとは立て直されてるし乗っ取りにもならないな
987デフォルトの名無しさん:2010/02/09(火) 12:14:07
>>1-5の内容を張ってくるか。次は実質57でいいんだよね?
988デフォルトの名無しさん:2010/02/09(火) 12:27:22
流石に1が違うのは混乱しないか
989デフォルトの名無しさん:2010/02/09(火) 12:29:21
いや〜、みんな1見ないでC++の質問してくるくらいだから気がつかないよ。
990デフォルトの名無しさん:2010/02/09(火) 13:00:34
次スレ

C#, C♯, C#相談室 Part55  (実質Part57)
http://pc12.2ch.net/test/read.cgi/tech/1265283175/58-
991デフォルトの名無しさん:2010/02/09(火) 14:53:56
>>989
しらんがなw
992デフォルトの名無しさん:2010/02/09(火) 20:52:42
javaでFileWriterクラスのwrite(int)メソッドで書き込んだファイルをC#でそのまま開けるようなメソッドはあるでしょうか?
javaで作ったファイルをバイナリエディタで見てみると、int型で値4232を書き込んだ所がE1 82 88 E1となっていて、
C#でBinaryReaderのReadInt32()メソッドで読み込むと-511147295になってしまう、といった次第で困ってます
993デフォルトの名無しさん:2010/02/09(火) 21:03:12
public void write(int c)
単一の文字を書き込みます。

文字として書き込んでるらしいけど本当にそれでいいの?
994デフォルトの名無しさん:2010/02/09(火) 21:05:31
>>992
javaの方で正しく書き込めたらまたおいで
995992:2010/02/09(火) 21:10:46
>994
今調べたら少し勘違いしていたようですが、javaの方では入出力は問題なく行えてます。
int型の下位16ビットだけを記録しているようで、上位16ビットを使用していなかったので。
同じ変換を行うメソッドはC#には無いんでしょうか?
996デフォルトの名無しさん:2010/02/09(火) 21:15:22
Javaはしらんけど

int型で値4232を書き込んだ所がE1 82 88 E1

あまりまじめに調べる気もないけど16bitだけ書いてるにしても連想ができない

8288だけを数字に直しても4232とは程遠いし
997992:2010/02/09(火) 21:20:38
やっぱり一般的な変換が行われてるわけではないんですね
Javaの方のファイル作成部分を見直します
失礼しました
998デフォルトの名無しさん:2010/02/09(火) 21:20:47
だから引数の型はintだけど意味的にはcharだってば>write(int)
999デフォルトの名無しさん:2010/02/09(火) 21:24:54
Java屋じゃないのでJavaが独自にやってるフォーマットの読み書きできますか
といわれてもわかるわけないし

第一その16進数のエンディアンは何とか細かい情報わからねーし
1000デフォルトの名無しさん:2010/02/09(火) 21:26:01
ちゃんと計算してないけど、おそらくU+1088(4232)はUTF-8でE1 82 88
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。