C#
System.Dynamic.DynamicObjectについて メンバ GetDynamicMemberNames : デバッグ用。メンバ名を列挙する。 GetMetaObject : DynamicMetaObjectを取り出す。DynamicMetaObjectがdynamicのもろもろの動作をしてくれるようだ。 DynamicObjectの場合はそのもろ…
Entity Frameworkの理解できなさがすごいな。積みゲーになっているすばせか並みに意味が分からない。こんなに意味がわからないのはロマサガ3のトレード以来だ。LINQ to SQLでいいじゃねえか。
GetEnumeratorを二つ実装しなきゃいけなくなるという、かなり破綻した仕組みだ。まあinterfaceはほっとけば必ず破綻するものだから仕方が無い。
よし、10KBを超えたら書き出そう。さらに10KB追加されたらAppendしよう。これを繰り返して、クラスのサイズになったら次に以降する。 1IDごとにメモリを10KBまで消費することがある。100MB消費するのに10000か。厳しいな。まあしょうがないだろう。 世の中の…
どれもこれも大きさに限界があってめんどくさいのだが、1プロジェクト=1ファイル=1クラス、これをおよそ65000行に収めることにする。プロジェクトは必然的にフォルダになるが、この中のファイル数が問題だ。いくつまでなら許容できるのか。100万オブジェクト…
まあ最終出力がファイルなんだからファイルに入れとくのがいいのだろうけど、方法としては「メソッドを書き出し、後で読み出してクラスに統合してまた書き出す」「メソッドをパーシャルクラスにして一つ一つファイルに書き出す」「クラスをオンメモリで持っ…
多分処理中にG2のGCが入った時点でメモリ管理は失敗、大失敗といえるんだろう。そんなのは処理が終わった後の空き時間でやればいいんだ。 小さいオブジェクトを作ってすぐ捨ててG0,G1にとどめる。大きいマネージオブジェクトは出来てしまった時点で失敗。大…
プロジェクトを生成するようにしないと使いにくいんじゃないかと思うのだが、1プロジェクトにソースを溜め込むとコンパイルが通らなくなる。謎のエラーメッセージが延々出てきたりする。 論理的に考えるなら、ソリューションを作るしかない。今までの1ファイ…
今日は1日眠かったのだが寝ようとすると眠れない。なんなんだ。プログラムに精神を奪われてしまっている。 まあいいや。とりあえず100万件を目指そう。ngenさえ安定して効けば100万件だって楽勝でいけるはずなんだ。とりあえず100万件のソースコードが馬鹿で…
いやマジでよくわかんねえけど一瞬で終わるときは終わるなあ。ngenが効いてるんだろうけど効く時と効かない時の差がわかんねえ。
とりあえず置いとく。 http://pmoky.ame-zaiku.com/csharp.html 通常の使用では破綻はしなくなったと思うがパフォーマンスの問題は結局解決しなかった。現実的に使えるのは10万オブジェクトぐらいだろうか。
オブジェクト100万個のコードをコンパイルすると「メタデータを入れる記憶域がありません」みたいなことを言われてコンパイルできない。 50万個だとngenしてもデシリアライズに4分かかる。うーむ。どうもこの100MBのpdbが怪しいんだよなあ。デバッグなしで直…
クラスを7万個作ったらコンパイルしただけでハングしたぞ。うーむ。
1クラスに書けるのが65000行程度のようだなあ。本当か? Controlクラスって65000行しかないのか? 中身はほとんどinternalクラスなのかな。 クラス分割しかないか。くそ。まあたいして可読性は変わらないだろうけど。
クラスの継承は危険そのものなのでなくてもいいように思うが、型引数が長くなりすぎて可読性もへったくれもなくなったジェネリッククラスに名前をつけるのに今のところ必要だ。delegateもFunc<T1,T2,TR>とかでいいじゃんと思うかもしれないが、名前をつけ…
interfaceってなくせないものかな。 C++みたいなconceptというのを考えた。ソースの置き換えみたいな過激なことをせず、かといってinterfaceのように「このメソッドとこのメソッドとこのメソッドが無いとダメ」というのを統一的に設計させるという無理なこと…
LINQの登場により、C#ではコレクションを書き換える場合、列挙すると書き換えた結果をその場で作るIEnumerableを返すのが標準になったと理解している。それは元のコレクションを書き換えない、副作用の無い処理だ。 IEnumerableといっても実際にコレクション…
関数の実行結果をキャッシュすると言うか、keyに対応したvalueが自動生成されるディクショナリ。 class LazyDictionary<TKey, TValue> { Dictionary<TKey, TValue> dic; Func<Tkey, TValue> valueCreator; public LazyDictionary(Dictionary<TKey, TValue> dic, Func<TKey, TValue> valueCreator){ this.dic = dic; this.valueCreato</tkey,></tkey,></tkey,></tkey,></tkey,>…
Hoge[] GetCollection3132() { var a = new Hoge[32598]; a[0] = GetHoge51458(); a[1] = ... ... a[9999] = ... _10000から20000(a); _20000から30000(a); _30000から32598(a); return a; } こんな感じだな。1関数に2万行書けるかわからないけど、とりあえ…
本当はこんなことしてる場合じゃないのだが、ちょっと進めた。 new[]{ ... } この配列の中の値を手打ちしていくと、65000を越えたあたりで「型が読み込めない」という例外が飛ぶ。intでもobjectでもなんでもそうだ。それとは別に45000を超えたあたりでdecima…
参照型かどうかのチェックは(type.IsValueType == false)だと思うのだけど、これが正しいのかどうか良く知らない。けど正しいものとして、とりあえず.NET Frameworkがバージョンアップして、値型でも参照型でもない第三の型が現われた時に、この指定は正しく…
昨日の続き。 そういや自分で言っといて忘れてたけど言語内言語の文法定義に使える。同じオブジェクトにさまざまなinterfaceを実装して遷移させ、インデントはラムダ式を使うとシンプルに書ける。 interfaceをユーザーに実装させるために提供するという道は…
クロージャを一々渡してられないようなものもある。GetEnumerator, Count, インデクサ、Dispose辺りはいちいち自分で「Disposeのメソッドはこれです」なんて指定していたら発狂してしまうかもしれない。そういうものにはinterfaceは必要だろう。あとフレーム…
インテリセンスはアルファベット順でそこに入れられるものを全て表示している。でもほとんどは要らないクラスだ。要るクラスを抽出する方法が必要だと思う。 とりあえず自作クラスにはプリフィックスにzとつけている。zはデフォルトだと名前がかぶるクラスが…
SingleLinkedListにIListを実装するとEnumerable.Reverseで大変なことになると思ったのでソースを見てみたが、ぶっちゃけ配列にコピーしてから後ろから順に辿ってるだけなのでまるで関係ない。せめてReverseArrayIteratorとかReverseListIteratorとか作った…
識別子なんか数字でいいか。情報はコメントにのせればいいしな。クラス作りまくってるけどそれもどうかと思うし。1クラスに数字のメソッド名、オブジェクトの情報はコメントに書けばいいんじゃないか。全オブジェクトをそれぞれ関数にしても数字10文字あれば…
よし、20万行のソースも関数分割で無事デシリアライズできた。 しかしこれはまだコレクションの中身を関数に分割してるだけで、コレクション自体が100万個とかあったら多分壊れる。あとまれなケースで理論上バグるからそこをどうするかだな。識別子が長くな…
anonymous これでいいじゃないか。
C#大好きharuyutakaさんとしてはプログラミング言語の序列に興味がある。そういえば「C#大好きharuyutakaさんの歌」というのはシャ乱Qの「ラーメン大好き小池さんの唄」にインスパイアされていて、haruyutakaというのはラーメンがおいしくできる小麦粉の名前…
子が親への参照を持っているとき、親がdeleteされる時に子が生存し続けるべき状況は存在しない これ自体は間違いなさそうだな。しかしクロージャを入れるのは他人だから、その他人が子だけを参照して親を参照することをやめてしまえば破綻する。よく分からん…