ふらっと C#,C♯,C#(初心者用) Part130at TECH
ふらっと C#,C♯,C#(初心者用) Part130 - 暇つぶし2ch950:デフォルトの名無しさん
17/09/07 12:18:14.16 CjGXGOTyM.net
>>938
作り直しレヴェルだろw

951:デフォルトの名無しさん
17/09/07 12:23:19.06 tK2euLNeM.net
>>938
レビューしないの?

952:デフォルトの名無しさん
17/09/07 12:30:07.79 j5w9yEfWM.net
>>939
よく考えよう
それ結合テストで起きる問題を先送りにしてるだけだろ?
むしろ単体テストレベルで見つかったほうが範囲が絞られてる分原因を特定しやすいよね

953:デフォルトの名無しさん
17/09/07 12:42:10.15 SGJxgazo0.net
ワッチョイ b769-ZN1Y)
ワッチョイ 236e-nkYL)
ブーイモ MM26-nkYL)


954:デフォルトの名無しさん
17/09/07 12:47:41.77 lOf9v6000.net
>>938
わかる
汎用機型のプログラミングから抜け出せなかった企業はこれからどんどん終わってくよね

955:デフォルトの名無しさん
17/09/07 12:52:28.11 /528PZB30.net
>>926
それしないとユニットテストってできないの?
無駄なことやってない?
使い方知らないの?

956:デフォルトの名無しさん
17/09/07 12:58:50.81 vdmBVUrpa.net
質問者そっちのけで盛り上がってるねw
>>915が読んだ記事の著者のいう依存性の排除っていうのは恐らく、
Enineのコードが修正されてもCar側のコードがその影響を受けないようにする、
っていう程度の意味。(CarとEngineは別の人やチームが書いてると考えて)
そのための手段として、Carのコードでは具体的なクラスEngineではなく、
Car側のコードを書いている人、または第三者が定義したIインターフェイスEngineを使い、
EngineにはIEngineの実装を強制する。
そうすればEngineを書いている人はIEngineによって拘束され、
Car側(Engineを使う側)のコードが動かなくなるような変更はできなくなる。
まあたぶんこんな感じ。
だけど、下位の側のコード(この場合はEngine)を拘束するために
わざわざインターフェイスを使って抽象度を上げる(つまり可読性は下がる)必要が
本当にあるのかは、個人的にはかなり疑問。鶏を割くのに牛刀を使う感がある。
まあ質問者に確実に言えるのは、上にも書いたけど
依存性云々なんて理解しなくても問題ないから安心して読み飛ばしていいよってことw

957:デフォルトの名無しさん
17/09/07 13:03:19.68 NBIMX30y0.net
依存性をどっかで断ち切らないと、変更の影響が波及し過ぎるからだよ
その例で言うなら、Carの実装内容がEngineに直接依存してると
Engineを修正した時に、Carも修正しなくちゃならなくなるので、それを断ち切りたい訳だ
実際には、その2クラス間にしか依存関係が発生しないなら纏めて修正でもそこまで困らないんだけど
クラスAにクラスBが依存、クラスBにクラスCが依存、クラスCにクラスDが依存……って連鎖してく様な形になってると最悪で
クラスAを修正した結果、クラスB~Dも全部修正とかになる可能性がある

958:デフォルトの名無しさん
17/09/07 13:04:43.74 vyrcxkNNM.net
>>944
汎用機は

959:948
17/09/07 13:06:37.62 vyrcxkNNM.net
すまん
汎用機は細かくプロセス分けて作るから単体テストはわりと容易だよ
そのノリでVBやJavaモノリシックなアプリを作ろうとしたところでおかしくなった

960:デフォルトの名無しさん
17/09/07 13:39:50.81 /528PZB30.net
>>947
設計変わってねぇのに
テスト数が増える話してんの?
ないとは言い切れないないけど考慮に入れるには頭悪くね?

961:デフォルトの名無しさん
17/09/07 15:14:35.43 EkI2HYTy0.net
ここにはまともな人ほとんどいないのな

962:デフォルトの名無しさん
17/09/07 15:21:06.66 MHVyagna0.net
まともな人は質の低いところには集まらないからな

963:デフォルトの名無しさん
17/09/07 15:27:09.98 /528PZB30.net
>>951
まともじゃない人って
何年もビジネスでやってるのに
金にならないプログラム組む人?

964:デフォルトの名無しさん
17/09/07 15:34:12.42 QW6AKtGa0.net
ID:/528PZB30 (6回)

965:デフォルトの名無しさん
17/09/07 15:38:11.33 QvUFBIyZ0.net
未だにVB5の保守案件を手放せていない俺は、きっとまともじゃないです

966:デフォルトの名無しさん
17/09/07 15:44:45.27 /528PZB30.net
>>954
単発に言われてもねw

967:デフォルトの名無しさん
17/09/07 16:48:04.48 CjGXGOTyM.net
1秒毎にボーリング処理するなかであるクラスのメソッドを呼び出す場合、毎回newするのは悪手ですか?staticが基本でしょうか?

968:デフォルトの名無しさん
17/09/07 17:29:06.04 wvM1rF390.net
自分で分かってるくせに
中身をしらん俺には答えは分からんがな

969:デフォルトの名無しさん
17/09/07 17:37:51.97 hyVDvgFsa.net
>>957
staticってのは意味不明だけど(フィールドじゃないの?)
基本的にどっちでも書きやすい方でOK
もちろん高価な共有リソースを使う場合は別

970:デフォルトの名無しさん
17/09/07 17:42:49.39 1h1pdgP4M.net
>>957
重いリソース抱えてないなら毎回インスタンス作って良いよ

971:デフォルトの名無しさん
17/09/07 19:00:31.87 eu6mSuii0.net
>>957
new のコストが重いならこんな手も
方法: ConcurrentBag を使用してオブジェクト プールを作成する
URLリンク(msdn.microsoft.com)(v=vs.110).aspx

972:デフォルトの名無しさん
17/09/07 19:18:39.04 KSI/qa2l0.net
>>957
そのメソッドをアクセスしやすい場所に置けばいいだけじゃないの?
単純に使うクラスにメソッドをコピーするか必要なメソッドだけ分離してクラスにして今まで使っていたクラスではフィールドで持っておけばいい

973:デフォルトの名無しさん
17/09/07 21:02:39.11 EkI2HYTy0.net
>>957
>>958の言うとおり
1秒毎にポーリングする処理というだけでは
毎回newするのが悪手かどうかstaticメソッドにするのがいいかどうかは誰も分からない
1. どういう選択肢があるのか考える(調べる)
2. それぞれのメリット・デメリット/トレードオフを理解する
3. 状況や目的に最も適している選択肢を選ぶ
こういう選択思考を繰り返すのが設計・コーディング時の考え方の基本
他にも選択肢あるから怠けず1.からやるのがいい
状況や目的をきちんと提示すればいいアドバイスが貰えるかもね

974:デフォルトの名無しさん
17/09/07 21:13:30.58 /528PZB30.net
もう実際にやってパフォーマンスモニタでログでもとってみりゃいーじゃん的な

975:デフォルトの名無しさん
17/09/07 21:29:02.21 EkI2HYTy0.net
パフォーマンス的に問題ないかを確認するのが目的ならね。

976:デフォルトの名無しさん
17/09/07 21:51:07.93 rUDH3LDL0.net
JSON のシリアライズで教えてください。
派生先クラスのインスタンスを、派生元クラスのシリアライザで処理できないでしょうか。
こんなクラスがあるとします。 (書き方については大目に見てください)
class Data;
class ItemData : Data;
これをこんなことは出来ない物でしょうか。
var data = new ItemData();
(new DataContractJsonSerializer( typeof( Data ) )).WriteObject( stream, data );
この場合なら、こんな風に回避できるのですが。
(new DataContractJsonSerializer( data.GetType() )).WriteObject( stream, data );
こんなクラスのインスタンスに (AssemblyDataのインスタンス).data = new ItemData(); でシリアライズしようとすると実行時にエラーになります。
class AssemblyData
{
public Data data {set; get;}
}
ネットで見た範囲では DataContractJsonSerializer は多態に対応していると書かれた記事もあったのですが、どうにもうまくいかず。
方法があるようでしたら教えてください。

977:デフォルトの名無しさん
17/09/07 21:51:39.39 f+yzxXuh0.net
EventArgsとか毎回newしてるし全然問題ないでしょ

978:デフォルトの名無しさん
17/09/08 00:31:12.15 VpThhHIU0.net
>>966
例外メッセージにどうすれば良いか書かれてると想うけど
> DataContractSerializer を使用している場合は DataContractResolver を
> 使用することを検討するか、静的に認知されていないすべての型を既知の型の
> 一覧に追加してください。このためには、たとえば KnownTypeAttribute 属性を
> 使用するか、シリアライザーへ渡される既知の型の一覧にこれらの型を追加します。

979:デフォルトの名無しさん
17/09/08 07:43:59.68 F2F5K69aM.net
newの質問したものです。
newにかかるオーバーヘッドの時間調査して、パフォーマンスを比較するのを怠ってましたが、やはりやってみないとわかりませんね。
やります。皆さん色々アドバイスありがとうございます。

980:デフォルトの名無しさん
17/09/08 10:31:16.74 y+E+UDjYa.net
いやいやいや、それはどっちかというと頓珍漢な言い掛かりの部類でアドバイスじゃないと思うよw
今年は何年よw
コンストラクタ呼び出しが時間的に高コストなんてよっぽど特殊なクラス以外ありえないよwww
µsオーダでもmsオーダーでもなく、たった1回/秒の呼び出しなんだからw
だから最初から言ってるように、普通は書きやすい方法で書いて何も問題ないよ本当。

981:デフォルトの名無しさん
17/09/08 11:43:10.75 b0hnqFHTH.net
いわゆる無駄な最適化の部類だとは思うが
まぁ自分で検証するというのれは良いことなのでどんどんやるといい

982:デフォルトの名無しさん
17/09/08 13:15:47.36 bqhsPJxB0.net
>>970
いや、気にしてるのはnew連発の穴ボコメモリだろ?
そのうちosがうまいことやってくれるのはなんとなくわかるがそのコストって具体的にどうよ?
ってのが本当に知りたいことだろ?
環境次第だしパフォーマンスモニタ動かしてみろよって話
3日も動かすと5秒だけ動作が止まるような動きをするってなったらそれが運用上許容できるのか?バグるのか?
それもやっぱりやって見なきゃわからないんちゃうん?

983:デフォルトの名無しさん
17/09/08 13:55:53.86 y+E+UDjYa.net
>>972
何がいやか分からないけど、だから最初から
高価な共有リソースを使う場合は別だと言ってるでしょ
今頃何を言ってるのかね
そういう例外的なケースを除けば、毎秒数個のオブジェクトを使い捨てにしたって
問題なんか起こらない。
そんなのXPの時代だってそうだから

984:デフォルトの名無しさん
17/09/08 14:00:38.33 0UBMFtit0.net
データベースへのコネクションを using で括ると
コネクションプールが機能しなくなる?

985:デフォルトの名無しさん
17/09/08 14:30:27.51 bqhsPJxB0.net
>>973
問題起こらないってどういう範囲で言ってるの?
何度も確保したnewの領域をosがどう処理するから問題ないって言ってるの?
仕様によっては問題起きるよ
1つはメモリ限界ギリギリまでガベコレしないときは定期タスクの動きを止めてメモリ処理するよ
1分以上止まっちゃってたことあるよ

986:デフォルトの名無しさん
17/09/08 15:23:04.74 Ej7G00WUa.net
>>975
具体的にどうぞ。
君が問題が起こる具体的な一例を挙げればそれで話は終わる。
もちろん、極端な特殊例でなくどこでもありうるような一般的なものでお願いしますよ。
あのねえ、今はPC-98の時代じゃないんですけどw

987:デフォルトの名無しさん
17/09/08 15:38:29.56 bqhsPJxB0.net
>>976
は?
で?何が問題ないって?

988:デフォルトの名無しさん
17/09/08 15:40:34.40 bqhsPJxB0.net
とりあえずガベコレ動くときにプログラムの動作止まっちゃうよって1つあげてるよね

989:デフォルトの名無しさん
17/09/08 16:26:18.98 VL+fdMeQM.net
>>978
すぐに使い捨てるなら確実にGen0GCで回収されるから止まる原因になることはないよ

990:デフォルトの名無しさん
17/09/08 16:45:28.16 Ej7G00WUa.net
こっちは具体例上げるけど、もっと高頻度(例えば10回/秒とか)で
画面を更新する必要があるアプリなんてごく普通にあるわけで、
そういう場合、例えばGDI+なら、ペンとかブラシとかデバイスコンテキスト(普通は作るのはシステム側で
ユーザーコードじゃないけど)とか、描画ごとに使い捨てすることになるけど、
こんなのが問題を引き起こすなら使い物にならないよ。
実際.NET1.1の時代に今じゃ考えられないような貧弱なWin98のマシンで
そういうアプリをテストしたことあるけど、何の問題もなかったよ。
当たり苗だけどw

991:デフォルトの名無しさん
17/09/08 17:11:08.88 bqhsPJxB0.net
>>979
とりあえず解決した方法は
10分に一度程度で強制ガベコレ実行することで解決したよ
溜めるとガベコレの時間は長くなるっぽい
やってみた感じね
パフォーマンスモニタでもメモリリークしてる?ってぐらい増えてく
ガベコレが動くと解消される
でもそのとき10秒タスクなんかは動かない
小刻みに強制ガベコレを実行しておくとそれが解消される
そんな動きをしている
その動きをされると困るときに小刻みに強制ガベコレを実行する必要がある

992:デフォルトの名無しさん
17/09/08 17:14:12.49 bqhsPJxB0.net
これが問題があったときな
これを問題ないって言われちゃうとどう返していいかわからんけどね

993:デフォルトの名無しさん
17/09/08 17:19:26.30 bqhsPJxB0.net
ちなみに趣味でゲームも作ってるけど
頻繁に強制ガベコレを動かさないと
重いガベコレを実行されるときがある
ゲームでは多少重い動作をした程度なので問題にならないが
これを周期的にデータを収集するタスクを動かしてるときにやられると不味いときがある

994:デフォルトの名無しさん
17/09/08 17:23:06.63 dMUjO8jT0.net
だから具体的にどんなサイズのオブジェクトを
どういう頻度でインスタンス化したのか教えてくれないと
そういうどんくさい実装も可能だろうね
でも一般的な話じゃないよねとしか言えないんだよ

995:デフォルトの名無しさん
17/09/08 17:34:00.33 bqhsPJxB0.net
>>984
それがわかったところでだからどうなの?
何がしたいん?

996:デフォルトの名無しさん
17/09/08 17:36:30.75 bqhsPJxB0.net
まあ、今回の件がどうなのかパフォーマンスモニタで測ってやってみんのが一番いいよね
そのアプリが連続実行される要件に合わせてって話だけど

997:デフォルトの名無しさん
17/09/08 18:02:05.09 mcCYyLIS0.net
>>980
描画ごとに使い捨てにするのはデバイスコンテキストのハンドルで
デバイスコンテキスト自体じゃないじゃないんじゃないのかな?
少なくとも一般的には
あとスレ立てヨロ

998:デフォルトの名無しさん
17/09/08 18:15:42.38 Ej7G00WUa.net
>>987
立てたよ
URLリンク(mevius.2ch.net)
少なくともマネージドオブジェクト(Graphics)は毎回使い捨てだと思うよ。

スレ立てのために久しぶりにブラウザで表示したらずいぶんデザイン変わってるんだな。
こんなくだらないことするのなら専用ブラウザなんか使わなくても
もっと使いやすいようにすりゃいいのに...
まあ、もう2ch亡くなっても誰も困らんか

999:デフォルトの名無しさん
17/09/08 19:40:16.45 wFGdJLM3a.net
nmecabに例の辞書入れて動かしてたら時々遅くなって何かと思ったらガベコレだった
サービスにぶっこんでて気付かなかった

1000:デフォルトの名無しさん
17/09/08 19:46:39.40 hqG5pPGU0.net
>>970
これがゆとりかぁ。

1001:デフォルトの名無しさん
17/09/08 19:50:01.67 KtAqYxG/0.net
質問者がいなくなった後の要件のはっきりしない議論とか次に持ち越すなよ
>>988
スレたて乙

1002:デフォルトの名無しさん
17/09/08 20:23:30.10 Ej7G00WUa.net
>>990
いや、君が人間的に幼稚なだけ。
どうでもいいけど、反論するなら事実で反論してよ

1003:デフォルトの名無しさん
17/09/08 20:26:02.00 Ej7G00WUa.net
つーか、今時毎秒オブジェクトを使い捨てしたぐらいで何か問題が起こると
真顔で主張するって、大丈夫かしらん。
普段どんなコード書いてるのかねw

1004:デフォルトの名無しさん
17/09/08 20:32:43.87 bIIt/y+7a.net
そもそもポーリング処理じゃなくて
ボーリング処理だからな
何が行われてるのかさっぱりわからない

1005:デフォルトの名無しさん
17/09/08 20:38:17.46 HXP4jN1T0.net
>>994
これは恥ずかしい
ポーリング(polling)とは、通信やソフトウェアにおいて、
競合を回避したり、送受信の準備状況を判断したり、
処理を同期したりするために、複数の機器やプログラムに対して
順番に定期的に問い合わせを行い、一定の条件を満たした場合に
送受信や処理を行う通信及び処理方式のことである。

1006:デフォルトの名無しさん
17/09/08 20:38:39.24 hqG5pPGU0.net
キミの用途はそうではなくても、常識としてnewやstringは遅いという認識を共有してくれないかな。
今時とか、普段とか、遅くて使い物にならなかった昔のJava屋のセリフそのままじゃないか。
どんな時代でもCPUのリソースは有限なんだよ。

1007:デフォルトの名無しさん
17/09/08 20:39:35.74 HXP4jN1T0.net
>>994
ボーリングってなんだよwww

1008:デフォルトの名無しさん
17/09/08 20:49:45.90 13cy/HVma.net
>>995
>>997
元のレスをよく見ろよ
>>957

1009:デフォルトの名無しさん
17/09/08 21:00:17.89 Ej7G00WUa.net
穴を掘るだけの簡単なお仕事です

1010:デフォルトの名無しさん
17/09/08 21:03:18.12 Ej7G00WUa.net
>>996
上から目線で頓珍漢なことを言ってるお型を見るほど滑稽な物はないなw

1011:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 52日 14時間 22分 33秒

1012:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch