X



ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001ななしぃ♯ 転載ダメ©2ch.net (ワッチョイ 93aa-SrFS)
垢版 |
2017/07/18(火) 06:40:45.47ID:mH9qbH+m0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part129
http://mevius.2ch.net/test/read.cgi/tech/1497000961/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0962デフォルトの名無しさん (ワッチョイ 4e61-xkdj)
垢版 |
2017/09/07(木) 19:18:39.04ID:KSI/qa2l0
>>957
そのメソッドをアクセスしやすい場所に置けばいいだけじゃないの?
単純に使うクラスにメソッドをコピーするか必要なメソッドだけ分離してクラスにして今まで使っていたクラスではフィールドで持っておけばいい
0963デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
垢版 |
2017/09/07(木) 21:02:39.11ID:EkI2HYTy0
>>957

>>958の言うとおり
1秒毎にポーリングする処理というだけでは
毎回newするのが悪手かどうかstaticメソッドにするのがいいかどうかは誰も分からない

1. どういう選択肢があるのか考える(調べる)
2. それぞれのメリット・デメリット/トレードオフを理解する
3. 状況や目的に最も適している選択肢を選ぶ

こういう選択思考を繰り返すのが設計・コーディング時の考え方の基本
他にも選択肢あるから怠けず1.からやるのがいい
状況や目的をきちんと提示すればいいアドバイスが貰えるかもね
0966デフォルトの名無しさん (ワッチョイ 9aea-ShIp)
垢版 |
2017/09/07(木) 21:51:07.93ID:rUDH3LDL0
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 は多態に対応していると書かれた記事もあったのですが、どうにもうまくいかず。
方法があるようでしたら教えてください。
0968デフォルトの名無しさん (ワッチョイ dbaa-gFuG)
垢版 |
2017/09/08(金) 00:31:12.15ID:VpThhHIU0
>>966
例外メッセージにどうすれば良いか書かれてると想うけど
> DataContractSerializer を使用している場合は DataContractResolver を
> 使用することを検討するか、静的に認知されていないすべての型を既知の型の
> 一覧に追加してください。このためには、たとえば KnownTypeAttribute 属性を
> 使用するか、シリアライザーへ渡される既知の型の一覧にこれらの型を追加します。
0969デフォルトの名無しさん (ブーイモ MMff-d5PD)
垢版 |
2017/09/08(金) 07:43:59.68ID:F2F5K69aM
newの質問したものです。
newにかかるオーバーヘッドの時間調査して、パフォーマンスを比較するのを怠ってましたが、やはりやってみないとわかりませんね。
やります。皆さん色々アドバイスありがとうございます。
0970デフォルトの名無しさん (アウアウエー Sa52-tij5)
垢版 |
2017/09/08(金) 10:31:16.74ID:y+E+UDjYa
いやいやいや、それはどっちかというと頓珍漢な言い掛かりの部類でアドバイスじゃないと思うよw
今年は何年よw

コンストラクタ呼び出しが時間的に高コストなんてよっぽど特殊なクラス以外ありえないよwww
µsオーダでもmsオーダーでもなく、たった1回/秒の呼び出しなんだからw

だから最初から言ってるように、普通は書きやすい方法で書いて何も問題ないよ本当。
0972デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
垢版 |
2017/09/08(金) 13:15:47.36ID:bqhsPJxB0
>>970
いや、気にしてるのはnew連発の穴ボコメモリだろ?
そのうちosがうまいことやってくれるのはなんとなくわかるがそのコストって具体的にどうよ?
ってのが本当に知りたいことだろ?
環境次第だしパフォーマンスモニタ動かしてみろよって話

3日も動かすと5秒だけ動作が止まるような動きをするってなったらそれが運用上許容できるのか?バグるのか?
それもやっぱりやって見なきゃわからないんちゃうん?
0973デフォルトの名無しさん (アウアウエー Sa52-tij5)
垢版 |
2017/09/08(金) 13:55:53.86ID:y+E+UDjYa
>>972
何がいやか分からないけど、だから最初から
高価な共有リソースを使う場合は別だと言ってるでしょ
今頃何を言ってるのかね

そういう例外的なケースを除けば、毎秒数個のオブジェクトを使い捨てにしたって
問題なんか起こらない。
そんなのXPの時代だってそうだから
0975デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
垢版 |
2017/09/08(金) 14:30:27.51ID:bqhsPJxB0
>>973
問題起こらないってどういう範囲で言ってるの?
何度も確保したnewの領域をosがどう処理するから問題ないって言ってるの?
仕様によっては問題起きるよ
1つはメモリ限界ギリギリまでガベコレしないときは定期タスクの動きを止めてメモリ処理するよ
1分以上止まっちゃってたことあるよ
0976デフォルトの名無しさん (アウアウエー Sa52-tij5)
垢版 |
2017/09/08(金) 15:23:04.74ID:Ej7G00WUa
>>975
具体的にどうぞ。
君が問題が起こる具体的な一例を挙げればそれで話は終わる。
もちろん、極端な特殊例でなくどこでもありうるような一般的なものでお願いしますよ。

あのねえ、今はPC-98の時代じゃないんですけどw
0980デフォルトの名無しさん (アウアウエー Sa52-tij5)
垢版 |
2017/09/08(金) 16:45:28.16ID:Ej7G00WUa
こっちは具体例上げるけど、もっと高頻度(例えば10回/秒とか)で
画面を更新する必要があるアプリなんてごく普通にあるわけで、
そういう場合、例えばGDI+なら、ペンとかブラシとかデバイスコンテキスト(普通は作るのはシステム側で
ユーザーコードじゃないけど)とか、描画ごとに使い捨てすることになるけど、
こんなのが問題を引き起こすなら使い物にならないよ。

実際.NET1.1の時代に今じゃ考えられないような貧弱なWin98のマシンで
そういうアプリをテストしたことあるけど、何の問題もなかったよ。
当たり苗だけどw
0981デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
垢版 |
2017/09/08(金) 17:11:08.88ID:bqhsPJxB0
>>979
とりあえず解決した方法は
10分に一度程度で強制ガベコレ実行することで解決したよ
溜めるとガベコレの時間は長くなるっぽい
やってみた感じね
パフォーマンスモニタでもメモリリークしてる?ってぐらい増えてく
ガベコレが動くと解消される
でもそのとき10秒タスクなんかは動かない
小刻みに強制ガベコレを実行しておくとそれが解消される
そんな動きをしている

その動きをされると困るときに小刻みに強制ガベコレを実行する必要がある
0983デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
垢版 |
2017/09/08(金) 17:19:26.30ID:bqhsPJxB0
ちなみに趣味でゲームも作ってるけど
頻繁に強制ガベコレを動かさないと
重いガベコレを実行されるときがある

ゲームでは多少重い動作をした程度なので問題にならないが
これを周期的にデータを収集するタスクを動かしてるときにやられると不味いときがある
0984デフォルトの名無しさん (ワッチョイ 9ac8-xkdj)
垢版 |
2017/09/08(金) 17:23:06.63ID:dMUjO8jT0
だから具体的にどんなサイズのオブジェクトを
どういう頻度でインスタンス化したのか教えてくれないと
そういうどんくさい実装も可能だろうね
でも一般的な話じゃないよねとしか言えないんだよ
0987デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
垢版 |
2017/09/08(金) 18:02:05.09ID:mcCYyLIS0
>>980
描画ごとに使い捨てにするのはデバイスコンテキストのハンドルで
デバイスコンテキスト自体じゃないじゃないんじゃないのかな?
少なくとも一般的には

あとスレ立てヨロ
0988デフォルトの名無しさん (アウアウエー Sa52-tij5)
垢版 |
2017/09/08(金) 18:15:42.38ID:Ej7G00WUa
>>987
立てたよ
https://mevius.2ch.net/test/read.cgi/tech/1504861931/l50

少なくともマネージドオブジェクト(Graphics)は毎回使い捨てだと思うよ。


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

まあ、もう2ch亡くなっても誰も困らんか
0995デフォルトの名無しさん (ワッチョイ 23e6-d5PD)
垢版 |
2017/09/08(金) 20:38:17.46ID:HXP4jN1T0
>>994
これは恥ずかしい
ポーリング(polling)とは、通信やソフトウェアにおいて、
競合を回避したり、送受信の準備状況を判断したり、
処理を同期したりするために、複数の機器やプログラムに対して
順番に定期的に問い合わせを行い、一定の条件を満たした場合に
送受信や処理を行う通信及び処理方式のことである。
0996デフォルトの名無しさん (ワッチョイ 174d-x/0H)
垢版 |
2017/09/08(金) 20:38:39.24ID:hqG5pPGU0
キミの用途はそうではなくても、常識としてnewやstringは遅いという認識を共有してくれないかな。
今時とか、普段とか、遅くて使い物にならなかった昔のJava屋のセリフそのままじゃないか。
どんな時代でもCPUのリソースは有限なんだよ。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 52日 14時間 22分 33秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況