「どんなにくだらない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
ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
1ななしぃ♯ 転載ダメ©2ch.net (ワッチョイ 93aa-SrFS)
2017/07/18(火) 06:40:45.47ID:mH9qbH+m0913デフォルトの名無しさん (ワッチョイ 6311-ygYq)
2017/09/06(水) 18:48:35.84ID:yZhXwa1n0 @ 記憶媒体からデータを読み込む。読み込んだ順番を保ちつつリストを作成する
A ゲーム開始→終了
B @のリストの先頭から見て行き、新しい記録より大きい要素の1つ前に挿入する。(挿入した位置が順位)
C 表示処理
D リストデータを記憶媒体へ書き込む
ソートは不要。
DBを使う要件がないのであれば記憶媒体はtxtファイルで十分。
A ゲーム開始→終了
B @のリストの先頭から見て行き、新しい記録より大きい要素の1つ前に挿入する。(挿入した位置が順位)
C 表示処理
D リストデータを記憶媒体へ書き込む
ソートは不要。
DBを使う要件がないのであれば記憶媒体はtxtファイルで十分。
914デフォルトの名無しさん (アウアウイー Sac7-b8Mh)
2017/09/06(水) 19:04:59.84ID:s9ZfYQxla >>906
テキストファイル名に名前秒数を適当な区切りを入れて保存
山田,60,田中,75,伊藤,81.scr
エクスプローラーからF2で編集可能
エディタもいらない
もちろんファイル名に使えない文字はあらかじめ除外だ
テキストファイル名に名前秒数を適当な区切りを入れて保存
山田,60,田中,75,伊藤,81.scr
エクスプローラーからF2で編集可能
エディタもいらない
もちろんファイル名に使えない文字はあらかじめ除外だ
915デフォルトの名無しさん (ワッチョイ 6f6d-bdum)
2017/09/06(水) 23:29:32.24ID:kZeUfc0W0 ネットを見ていたら、インターフェースで依存性を排除するコードが
例として出ていたのですが「コンストラクタでengineに実装を注入する」とある部分は、どのように書けるのでしょうか?
インターフェースには実装が書けず、コンストラクタでメソッドを書くこともできないので見当がつきません
よろしくお願いします
public interface Engine
{
void start();
}
public class Car
{
public Engine engine;
public Car()
{
// コンストラクタでengineに実装を注入する
}
public void go()
{
engine.start(); // <- Engineはインターフェースなので依存性がなくなった
}
}
例として出ていたのですが「コンストラクタでengineに実装を注入する」とある部分は、どのように書けるのでしょうか?
インターフェースには実装が書けず、コンストラクタでメソッドを書くこともできないので見当がつきません
よろしくお願いします
public interface Engine
{
void start();
}
public class Car
{
public Engine engine;
public Car()
{
// コンストラクタでengineに実装を注入する
}
public void go()
{
engine.start(); // <- Engineはインターフェースなので依存性がなくなった
}
}
916デフォルトの名無しさん (ワッチョイ e303-3JEm)
2017/09/06(水) 23:38:07.92ID:ygscOEFy0 Engineインターフェースを実装したエンジンのインスタンスを
何らかの手段で手に入れてengineに代入しろってことだな
つまり、君の買った車にはエンジンが付いてないので
買ってくるか、自分で作るか、好きにしてもらったらよいが
エンジン作る部分までは説明しないよ、ってことだな
何らかの手段で手に入れてengineに代入しろってことだな
つまり、君の買った車にはエンジンが付いてないので
買ってくるか、自分で作るか、好きにしてもらったらよいが
エンジン作る部分までは説明しないよ、ってことだな
917デフォルトの名無しさん (ワッチョイ ff11-BPzU)
2017/09/06(水) 23:53:04.33ID:tZ2T0w/m0 >>915
CarはEngineに依存してるよ
インターフェース使えばEngineの実装には依存しないようにできるけど
インターフェースなので依存性がなくなったというのは認識として間違ってると思う
んで実装を注入する方法はいくつかあって、例えばコンストラクタ・インジェクションなら
Carインスタンスを生成するときにEngine実装のインスタンスを渡してあげるイメージ
public Car(Engine engine)
CarはEngineに依存してるよ
インターフェース使えばEngineの実装には依存しないようにできるけど
インターフェースなので依存性がなくなったというのは認識として間違ってると思う
んで実装を注入する方法はいくつかあって、例えばコンストラクタ・インジェクションなら
Carインスタンスを生成するときにEngine実装のインスタンスを渡してあげるイメージ
public Car(Engine engine)
918デフォルトの名無しさん (ワッチョイ 2312-935K)
2017/09/07(木) 00:04:50.83ID:25clT2YI0919デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/07(木) 00:30:22.69ID:jomVuFMWa >>915
依存性云々はとりあえず今は聞き流して、インターフェイスの使い方を覚えるのがいいねw
依存性云々はとりあえず今は聞き流して、インターフェイスの使い方を覚えるのがいいねw
920デフォルトの名無しさん (ワッチョイ 9aea-kA1u)
2017/09/07(木) 00:35:28.14ID:n13wzRyY0921デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 01:19:40.93ID:/528PZB30922デフォルトの名無しさん (ワッチョイ 0b11-FoH9)
2017/09/07(木) 06:29:42.71ID:yYQdIYqd0923デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 06:52:28.02ID:/528PZB30 初心者スレだし
意味のないことをやってる人間を止めるのも優しさだろ
明らかに意味がない
意味のないことをやってる人間を止めるのも優しさだろ
明らかに意味がない
924デフォルトの名無しさん (バットンキン MMdf-o7Wx)
2017/09/07(木) 07:06:09.22ID:jEqK5EjrM925デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 07:21:08.70ID:/528PZB30 >>924
実際、機能10個作って10年で内3つしか変更が入らないときって
残りの7つに費やした依存性解消の時間って無駄じゃね?
いつ精算できんの?
変更することになってからゆっくり金貰って変更すればいいよ
予めやっておく必要も金も時間も欠片もない
実際、機能10個作って10年で内3つしか変更が入らないときって
残りの7つに費やした依存性解消の時間って無駄じゃね?
いつ精算できんの?
変更することになってからゆっくり金貰って変更すればいいよ
予めやっておく必要も金も時間も欠片もない
926デフォルトの名無しさん (ワントンキン MM8a-q4XS)
2017/09/07(木) 07:32:44.67ID:oeWMtJN8M927デフォルトの名無しさん (ワッチョイ 8343-3TYr)
2017/09/07(木) 07:33:51.36ID:j+BNBbb90 >>915 を書き直すとこういう感じだろうか
public class Car
{
private Engine engine;
public Car(Engine engine)
{
// engineのインスタンス生成は外部で行い、
// その参照をEngineインターフェースの変数として保持する
// (渡されたクラスにEngineインターフェースが実装されているか
// どうかしか感知しない)
this.engine = engine;
}
public void go()
{
// コンストラクタで渡されたEngineを使うので、
// インスタンスの実装には依存しない
// (実際に渡されるクラスで変更があっても、
// それがEngineインターフェースに関わらない部分なら影響がない)
engine.start();
}
}
あと、↓に従ってくれると、他の人からも読みやすい
インターフェイスの名前付けのガイドライン
https://msdn.microsoft.com/ja-jp/library/cc433279(v=vs.71).aspx
"インターフェイス名には、この型がインターフェイスであることを示すために、プリフィックス I を付けます。"
メソッドの名前付けのガイドライン
https://msdn.microsoft.com/ja-jp/library/cc433282(v=vs.71).aspx
"Pascal 形式を使用します。"
public class Car
{
private Engine engine;
public Car(Engine engine)
{
// engineのインスタンス生成は外部で行い、
// その参照をEngineインターフェースの変数として保持する
// (渡されたクラスにEngineインターフェースが実装されているか
// どうかしか感知しない)
this.engine = engine;
}
public void go()
{
// コンストラクタで渡されたEngineを使うので、
// インスタンスの実装には依存しない
// (実際に渡されるクラスで変更があっても、
// それがEngineインターフェースに関わらない部分なら影響がない)
engine.start();
}
}
あと、↓に従ってくれると、他の人からも読みやすい
インターフェイスの名前付けのガイドライン
https://msdn.microsoft.com/ja-jp/library/cc433279(v=vs.71).aspx
"インターフェイス名には、この型がインターフェイスであることを示すために、プリフィックス I を付けます。"
メソッドの名前付けのガイドライン
https://msdn.microsoft.com/ja-jp/library/cc433282(v=vs.71).aspx
"Pascal 形式を使用します。"
928デフォルトの名無しさん (スッップ Sdba-kA1u)
2017/09/07(木) 07:41:56.97ID:KHq0qyGqd >>921
いつの時代の話だよ
いつの時代の話だよ
929デフォルトの名無しさん (スッップ Sdba-kA1u)
2017/09/07(木) 07:43:59.67ID:KHq0qyGqd930デフォルトの名無しさん (ワッチョイ 236e-nkYL)
2017/09/07(木) 07:46:39.37ID:NVMcPyFE0931デフォルトの名無しさん (ワントンキン MM8a-SdQ8)
2017/09/07(木) 08:00:06.40ID:oeWMtJN8M >>930
それ結合テスト
それ結合テスト
932デフォルトの名無しさん (ブーイモ MM26-nkYL)
2017/09/07(木) 08:02:41.36ID:j5w9yEfWM 下位のモジュールを結合した状態で単体テストするのはおかしなことではないでしょ
MSだって普通にクラスの中でnewしてるよ
見境なくDIすると結合したときとのギャップが大きくなりすぎる
○○サービスと呼べるような粒度の低いクラスだけにとどめるのがいいと思ってる
MSだって普通にクラスの中でnewしてるよ
見境なくDIすると結合したときとのギャップが大きくなりすぎる
○○サービスと呼べるような粒度の低いクラスだけにとどめるのがいいと思ってる
933デフォルトの名無しさん (ワントンキン MM8a-SdQ8)
2017/09/07(木) 08:10:18.52ID:oeWMtJN8M >>932
対象を選ぶのは当たり前
対象を選ぶのは当たり前
934デフォルトの名無しさん (スッップ Sdba-kA1u)
2017/09/07(木) 08:13:41.08ID:KHq0qyGqd >>930
こいつUnitTestしたことないだろ
こいつUnitTestしたことないだろ
935デフォルトの名無しさん (ワントンキン MM8a-SdQ8)
2017/09/07(木) 08:17:23.55ID:oeWMtJN8M 粒度も基準としてはあるが
自前のコードで完全に制御できないものはどこかで注入したほうがいいな
注入は別にインターフェースでなくてもいい
単にoverrideでもdelegateでも用途(今の文脈だとユニットテストか)に合えば良い
古い言語だとテスト用のモジュールをリンクしたり
マクロやインクルードで注入することもある
自前のコードで完全に制御できないものはどこかで注入したほうがいいな
注入は別にインターフェースでなくてもいい
単にoverrideでもdelegateでも用途(今の文脈だとユニットテストか)に合えば良い
古い言語だとテスト用のモジュールをリンクしたり
マクロやインクルードで注入することもある
936デフォルトの名無しさん (ブーイモ MM26-nkYL)
2017/09/07(木) 08:50:12.82ID:j5w9yEfWM >>934
単体テストと結合テストの違いはテストケース
単体でも通るテストか、結合してないと通らないはずのテストか、それだけのこと
開発順序の都合とかネットワークに依存しててクソ遅いとか意図的に発生させるのが難しいエラーがあるといった特別な理由がない限り、
単体でも通るテストを結合して動かすことはなんら単体テストの意義を損なうものではないよ
単体テストと結合テストの違いはテストケース
単体でも通るテストか、結合してないと通らないはずのテストか、それだけのこと
開発順序の都合とかネットワークに依存しててクソ遅いとか意図的に発生させるのが難しいエラーがあるといった特別な理由がない限り、
単体でも通るテストを結合して動かすことはなんら単体テストの意義を損なうものではないよ
937デフォルトの名無しさん (スッップ Sdba-kA1u)
2017/09/07(木) 10:51:28.81ID:KHq0qyGqd >>936
素人おつ
素人おつ
938デフォルトの名無しさん (ワッチョイ 23c0-xkdj)
2017/09/07(木) 10:57:46.90ID:eu6mSuii0 職場はユニットテスト何それ?だから1メソッドが数百行どころか千行超えるコードざらに見かけます・・・
939デフォルトの名無しさん (ワントンキン MM8a-SdQ8)
2017/09/07(木) 12:10:02.38ID:tK2euLNeM940デフォルトの名無しさん (ブーイモ MMba-d5PD)
2017/09/07(木) 12:18:14.16ID:CjGXGOTyM >>938
作り直しレヴェルだろw
作り直しレヴェルだろw
941デフォルトの名無しさん (ワントンキン MM8a-SdQ8)
2017/09/07(木) 12:23:19.06ID:tK2euLNeM >>938
レビューしないの?
レビューしないの?
942デフォルトの名無しさん (ブーイモ MM26-nkYL)
2017/09/07(木) 12:30:07.79ID:j5w9yEfWM943デフォルトの名無しさん (ワッチョイ 1a91-/OaE)
2017/09/07(木) 12:42:10.15ID:SGJxgazo0 ワッチョイ b769-ZN1Y)
ワッチョイ 236e-nkYL)
ブーイモ MM26-nkYL)
w
ワッチョイ 236e-nkYL)
ブーイモ MM26-nkYL)
w
944デフォルトの名無しさん (ワッチョイ 4e00-/59e)
2017/09/07(木) 12:47:41.77ID:lOf9v6000945デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 12:52:28.11ID:/528PZB30946デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/07(木) 12:58:50.81ID:vdmBVUrpa 質問者そっちのけで盛り上がってるねw
>>915が読んだ記事の著者のいう依存性の排除っていうのは恐らく、
Enineのコードが修正されてもCar側のコードがその影響を受けないようにする、
っていう程度の意味。(CarとEngineは別の人やチームが書いてると考えて)
そのための手段として、Carのコードでは具体的なクラスEngineではなく、
Car側のコードを書いている人、または第三者が定義したIインターフェイスEngineを使い、
EngineにはIEngineの実装を強制する。
そうすればEngineを書いている人はIEngineによって拘束され、
Car側(Engineを使う側)のコードが動かなくなるような変更はできなくなる。
まあたぶんこんな感じ。
だけど、下位の側のコード(この場合はEngine)を拘束するために
わざわざインターフェイスを使って抽象度を上げる(つまり可読性は下がる)必要が
本当にあるのかは、個人的にはかなり疑問。鶏を割くのに牛刀を使う感がある。
まあ質問者に確実に言えるのは、上にも書いたけど
依存性云々なんて理解しなくても問題ないから安心して読み飛ばしていいよってことw
>>915が読んだ記事の著者のいう依存性の排除っていうのは恐らく、
Enineのコードが修正されてもCar側のコードがその影響を受けないようにする、
っていう程度の意味。(CarとEngineは別の人やチームが書いてると考えて)
そのための手段として、Carのコードでは具体的なクラスEngineではなく、
Car側のコードを書いている人、または第三者が定義したIインターフェイスEngineを使い、
EngineにはIEngineの実装を強制する。
そうすればEngineを書いている人はIEngineによって拘束され、
Car側(Engineを使う側)のコードが動かなくなるような変更はできなくなる。
まあたぶんこんな感じ。
だけど、下位の側のコード(この場合はEngine)を拘束するために
わざわざインターフェイスを使って抽象度を上げる(つまり可読性は下がる)必要が
本当にあるのかは、個人的にはかなり疑問。鶏を割くのに牛刀を使う感がある。
まあ質問者に確実に言えるのは、上にも書いたけど
依存性云々なんて理解しなくても問題ないから安心して読み飛ばしていいよってことw
947デフォルトの名無しさん (ワッチョイ 0b11-zjjG)
2017/09/07(木) 13:03:19.68ID:NBIMX30y0 依存性をどっかで断ち切らないと、変更の影響が波及し過ぎるからだよ
その例で言うなら、Carの実装内容がEngineに直接依存してると
Engineを修正した時に、Carも修正しなくちゃならなくなるので、それを断ち切りたい訳だ
実際には、その2クラス間にしか依存関係が発生しないなら纏めて修正でもそこまで困らないんだけど
クラスAにクラスBが依存、クラスBにクラスCが依存、クラスCにクラスDが依存……って連鎖してく様な形になってると最悪で
クラスAを修正した結果、クラスB〜Dも全部修正とかになる可能性がある
その例で言うなら、Carの実装内容がEngineに直接依存してると
Engineを修正した時に、Carも修正しなくちゃならなくなるので、それを断ち切りたい訳だ
実際には、その2クラス間にしか依存関係が発生しないなら纏めて修正でもそこまで困らないんだけど
クラスAにクラスBが依存、クラスBにクラスCが依存、クラスCにクラスDが依存……って連鎖してく様な形になってると最悪で
クラスAを修正した結果、クラスB〜Dも全部修正とかになる可能性がある
948デフォルトの名無しさん (ブーイモ MMff-nkYL)
2017/09/07(木) 13:04:43.74ID:vyrcxkNNM >>944
汎用機は
汎用機は
949948 (ブーイモ MMff-nkYL)
2017/09/07(木) 13:06:37.62ID:vyrcxkNNM すまん
汎用機は細かくプロセス分けて作るから単体テストはわりと容易だよ
そのノリでVBやJavaモノリシックなアプリを作ろうとしたところでおかしくなった
汎用機は細かくプロセス分けて作るから単体テストはわりと容易だよ
そのノリでVBやJavaモノリシックなアプリを作ろうとしたところでおかしくなった
950デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 13:39:50.81ID:/528PZB30951デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
2017/09/07(木) 15:14:35.43ID:EkI2HYTy0 ここにはまともな人ほとんどいないのな
952デフォルトの名無しさん (ワッチョイ 5a11-w0Wv)
2017/09/07(木) 15:21:06.66ID:MHVyagna0 まともな人は質の低いところには集まらないからな
953デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 15:27:09.98ID:/528PZB30954デフォルトの名無しさん (ワッチョイ b3e2-VqnV)
2017/09/07(木) 15:34:12.42ID:QW6AKtGa0 ID:/528PZB30 (6回)
955デフォルトの名無しさん (ワッチョイ 8a91-x/0H)
2017/09/07(木) 15:38:11.33ID:QvUFBIyZ0 未だにVB5の保守案件を手放せていない俺は、きっとまともじゃないです
956デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 15:44:45.27ID:/528PZB30 >>954
単発に言われてもねw
単発に言われてもねw
957デフォルトの名無しさん (ブーイモ MMba-d5PD)
2017/09/07(木) 16:48:04.48ID:CjGXGOTyM 1秒毎にボーリング処理するなかであるクラスのメソッドを呼び出す場合、毎回newするのは悪手ですか?staticが基本でしょうか?
958デフォルトの名無しさん (ワッチョイ 47c2-x/0H)
2017/09/07(木) 17:29:06.04ID:wvM1rF390 自分で分かってるくせに
中身をしらん俺には答えは分からんがな
中身をしらん俺には答えは分からんがな
959デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/07(木) 17:37:51.97ID:hyVDvgFsa960デフォルトの名無しさん (ワンミングク MM8a-SdQ8)
2017/09/07(木) 17:42:49.39ID:1h1pdgP4M >>957
重いリソース抱えてないなら毎回インスタンス作って良いよ
重いリソース抱えてないなら毎回インスタンス作って良いよ
961デフォルトの名無しさん (ワッチョイ 23c0-xkdj)
2017/09/07(木) 19:00:31.87ID:eu6mSuii0 >>957
new のコストが重いならこんな手も
方法: ConcurrentBag を使用してオブジェクト プールを作成する
https://msdn.microsoft.com/ja-jp/library/ff458671(v=vs.110).aspx
new のコストが重いならこんな手も
方法: ConcurrentBag を使用してオブジェクト プールを作成する
https://msdn.microsoft.com/ja-jp/library/ff458671(v=vs.110).aspx
962デフォルトの名無しさん (ワッチョイ 4e61-xkdj)
2017/09/07(木) 19:18:39.04ID:KSI/qa2l0 >>957
そのメソッドをアクセスしやすい場所に置けばいいだけじゃないの?
単純に使うクラスにメソッドをコピーするか必要なメソッドだけ分離してクラスにして今まで使っていたクラスではフィールドで持っておけばいい
そのメソッドをアクセスしやすい場所に置けばいいだけじゃないの?
単純に使うクラスにメソッドをコピーするか必要なメソッドだけ分離してクラスにして今まで使っていたクラスではフィールドで持っておけばいい
963デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
2017/09/07(木) 21:02:39.11ID:EkI2HYTy0964デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/07(木) 21:13:30.58ID:/528PZB30 もう実際にやってパフォーマンスモニタでログでもとってみりゃいーじゃん的な
965デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
2017/09/07(木) 21:29:02.21ID:EkI2HYTy0 パフォーマンス的に問題ないかを確認するのが目的ならね。
966デフォルトの名無しさん (ワッチョイ 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 は多態に対応していると書かれた記事もあったのですが、どうにもうまくいかず。
方法があるようでしたら教えてください。
派生先クラスのインスタンスを、派生元クラスのシリアライザで処理できないでしょうか。
こんなクラスがあるとします。 (書き方については大目に見てください)
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 は多態に対応していると書かれた記事もあったのですが、どうにもうまくいかず。
方法があるようでしたら教えてください。
967デフォルトの名無しさん (ワッチョイ e74b-x/0H)
2017/09/07(木) 21:51:39.39ID:f+yzxXuh0 EventArgsとか毎回newしてるし全然問題ないでしょ
968デフォルトの名無しさん (ワッチョイ dbaa-gFuG)
2017/09/08(金) 00:31:12.15ID:VpThhHIU0 >>966
例外メッセージにどうすれば良いか書かれてると想うけど
> DataContractSerializer を使用している場合は DataContractResolver を
> 使用することを検討するか、静的に認知されていないすべての型を既知の型の
> 一覧に追加してください。このためには、たとえば KnownTypeAttribute 属性を
> 使用するか、シリアライザーへ渡される既知の型の一覧にこれらの型を追加します。
例外メッセージにどうすれば良いか書かれてると想うけど
> DataContractSerializer を使用している場合は DataContractResolver を
> 使用することを検討するか、静的に認知されていないすべての型を既知の型の
> 一覧に追加してください。このためには、たとえば KnownTypeAttribute 属性を
> 使用するか、シリアライザーへ渡される既知の型の一覧にこれらの型を追加します。
969デフォルトの名無しさん (ブーイモ MMff-d5PD)
2017/09/08(金) 07:43:59.68ID:F2F5K69aM newの質問したものです。
newにかかるオーバーヘッドの時間調査して、パフォーマンスを比較するのを怠ってましたが、やはりやってみないとわかりませんね。
やります。皆さん色々アドバイスありがとうございます。
newにかかるオーバーヘッドの時間調査して、パフォーマンスを比較するのを怠ってましたが、やはりやってみないとわかりませんね。
やります。皆さん色々アドバイスありがとうございます。
970デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 10:31:16.74ID:y+E+UDjYa いやいやいや、それはどっちかというと頓珍漢な言い掛かりの部類でアドバイスじゃないと思うよw
今年は何年よw
コンストラクタ呼び出しが時間的に高コストなんてよっぽど特殊なクラス以外ありえないよwww
µsオーダでもmsオーダーでもなく、たった1回/秒の呼び出しなんだからw
だから最初から言ってるように、普通は書きやすい方法で書いて何も問題ないよ本当。
今年は何年よw
コンストラクタ呼び出しが時間的に高コストなんてよっぽど特殊なクラス以外ありえないよwww
µsオーダでもmsオーダーでもなく、たった1回/秒の呼び出しなんだからw
だから最初から言ってるように、普通は書きやすい方法で書いて何も問題ないよ本当。
971デフォルトの名無しさん (JP 0H4b-xkdj)
2017/09/08(金) 11:43:10.75ID:b0hnqFHTH いわゆる無駄な最適化の部類だとは思うが
まぁ自分で検証するというのれは良いことなのでどんどんやるといい
まぁ自分で検証するというのれは良いことなのでどんどんやるといい
972デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 13:15:47.36ID:bqhsPJxB0 >>970
いや、気にしてるのはnew連発の穴ボコメモリだろ?
そのうちosがうまいことやってくれるのはなんとなくわかるがそのコストって具体的にどうよ?
ってのが本当に知りたいことだろ?
環境次第だしパフォーマンスモニタ動かしてみろよって話
3日も動かすと5秒だけ動作が止まるような動きをするってなったらそれが運用上許容できるのか?バグるのか?
それもやっぱりやって見なきゃわからないんちゃうん?
いや、気にしてるのはnew連発の穴ボコメモリだろ?
そのうちosがうまいことやってくれるのはなんとなくわかるがそのコストって具体的にどうよ?
ってのが本当に知りたいことだろ?
環境次第だしパフォーマンスモニタ動かしてみろよって話
3日も動かすと5秒だけ動作が止まるような動きをするってなったらそれが運用上許容できるのか?バグるのか?
それもやっぱりやって見なきゃわからないんちゃうん?
973デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 13:55:53.86ID:y+E+UDjYa >>972
何がいやか分からないけど、だから最初から
高価な共有リソースを使う場合は別だと言ってるでしょ
今頃何を言ってるのかね
そういう例外的なケースを除けば、毎秒数個のオブジェクトを使い捨てにしたって
問題なんか起こらない。
そんなのXPの時代だってそうだから
何がいやか分からないけど、だから最初から
高価な共有リソースを使う場合は別だと言ってるでしょ
今頃何を言ってるのかね
そういう例外的なケースを除けば、毎秒数個のオブジェクトを使い捨てにしたって
問題なんか起こらない。
そんなのXPの時代だってそうだから
974デフォルトの名無しさん (ワッチョイ 8a91-x/0H)
2017/09/08(金) 14:00:38.33ID:0UBMFtit0 データベースへのコネクションを using で括ると
コネクションプールが機能しなくなる?
コネクションプールが機能しなくなる?
975デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 14:30:27.51ID:bqhsPJxB0 >>973
問題起こらないってどういう範囲で言ってるの?
何度も確保したnewの領域をosがどう処理するから問題ないって言ってるの?
仕様によっては問題起きるよ
1つはメモリ限界ギリギリまでガベコレしないときは定期タスクの動きを止めてメモリ処理するよ
1分以上止まっちゃってたことあるよ
問題起こらないってどういう範囲で言ってるの?
何度も確保したnewの領域をosがどう処理するから問題ないって言ってるの?
仕様によっては問題起きるよ
1つはメモリ限界ギリギリまでガベコレしないときは定期タスクの動きを止めてメモリ処理するよ
1分以上止まっちゃってたことあるよ
976デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 15:23:04.74ID:Ej7G00WUa >>975
具体的にどうぞ。
君が問題が起こる具体的な一例を挙げればそれで話は終わる。
もちろん、極端な特殊例でなくどこでもありうるような一般的なものでお願いしますよ。
あのねえ、今はPC-98の時代じゃないんですけどw
具体的にどうぞ。
君が問題が起こる具体的な一例を挙げればそれで話は終わる。
もちろん、極端な特殊例でなくどこでもありうるような一般的なものでお願いしますよ。
あのねえ、今はPC-98の時代じゃないんですけどw
977デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 15:38:29.56ID:bqhsPJxB0978デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 15:40:34.40ID:bqhsPJxB0 とりあえずガベコレ動くときにプログラムの動作止まっちゃうよって1つあげてるよね
979デフォルトの名無しさん (ブーイモ MMba-nkYL)
2017/09/08(金) 16:26:18.98ID:VL+fdMeQM >>978
すぐに使い捨てるなら確実にGen0GCで回収されるから止まる原因になることはないよ
すぐに使い捨てるなら確実にGen0GCで回収されるから止まる原因になることはないよ
980デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 16:45:28.16ID:Ej7G00WUa こっちは具体例上げるけど、もっと高頻度(例えば10回/秒とか)で
画面を更新する必要があるアプリなんてごく普通にあるわけで、
そういう場合、例えばGDI+なら、ペンとかブラシとかデバイスコンテキスト(普通は作るのはシステム側で
ユーザーコードじゃないけど)とか、描画ごとに使い捨てすることになるけど、
こんなのが問題を引き起こすなら使い物にならないよ。
実際.NET1.1の時代に今じゃ考えられないような貧弱なWin98のマシンで
そういうアプリをテストしたことあるけど、何の問題もなかったよ。
当たり苗だけどw
画面を更新する必要があるアプリなんてごく普通にあるわけで、
そういう場合、例えばGDI+なら、ペンとかブラシとかデバイスコンテキスト(普通は作るのはシステム側で
ユーザーコードじゃないけど)とか、描画ごとに使い捨てすることになるけど、
こんなのが問題を引き起こすなら使い物にならないよ。
実際.NET1.1の時代に今じゃ考えられないような貧弱なWin98のマシンで
そういうアプリをテストしたことあるけど、何の問題もなかったよ。
当たり苗だけどw
981デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 17:11:08.88ID:bqhsPJxB0 >>979
とりあえず解決した方法は
10分に一度程度で強制ガベコレ実行することで解決したよ
溜めるとガベコレの時間は長くなるっぽい
やってみた感じね
パフォーマンスモニタでもメモリリークしてる?ってぐらい増えてく
ガベコレが動くと解消される
でもそのとき10秒タスクなんかは動かない
小刻みに強制ガベコレを実行しておくとそれが解消される
そんな動きをしている
その動きをされると困るときに小刻みに強制ガベコレを実行する必要がある
とりあえず解決した方法は
10分に一度程度で強制ガベコレ実行することで解決したよ
溜めるとガベコレの時間は長くなるっぽい
やってみた感じね
パフォーマンスモニタでもメモリリークしてる?ってぐらい増えてく
ガベコレが動くと解消される
でもそのとき10秒タスクなんかは動かない
小刻みに強制ガベコレを実行しておくとそれが解消される
そんな動きをしている
その動きをされると困るときに小刻みに強制ガベコレを実行する必要がある
982デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 17:14:12.49ID:bqhsPJxB0 これが問題があったときな
これを問題ないって言われちゃうとどう返していいかわからんけどね
これを問題ないって言われちゃうとどう返していいかわからんけどね
983デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 17:19:26.30ID:bqhsPJxB0 ちなみに趣味でゲームも作ってるけど
頻繁に強制ガベコレを動かさないと
重いガベコレを実行されるときがある
ゲームでは多少重い動作をした程度なので問題にならないが
これを周期的にデータを収集するタスクを動かしてるときにやられると不味いときがある
頻繁に強制ガベコレを動かさないと
重いガベコレを実行されるときがある
ゲームでは多少重い動作をした程度なので問題にならないが
これを周期的にデータを収集するタスクを動かしてるときにやられると不味いときがある
984デフォルトの名無しさん (ワッチョイ 9ac8-xkdj)
2017/09/08(金) 17:23:06.63ID:dMUjO8jT0 だから具体的にどんなサイズのオブジェクトを
どういう頻度でインスタンス化したのか教えてくれないと
そういうどんくさい実装も可能だろうね
でも一般的な話じゃないよねとしか言えないんだよ
どういう頻度でインスタンス化したのか教えてくれないと
そういうどんくさい実装も可能だろうね
でも一般的な話じゃないよねとしか言えないんだよ
985デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 17:34:00.33ID:bqhsPJxB0986デフォルトの名無しさん (ワッチョイ b769-ZN1Y)
2017/09/08(金) 17:36:30.75ID:bqhsPJxB0 まあ、今回の件がどうなのかパフォーマンスモニタで測ってやってみんのが一番いいよね
そのアプリが連続実行される要件に合わせてって話だけど
そのアプリが連続実行される要件に合わせてって話だけど
987デフォルトの名無しさん (ワッチョイ 5a11-oWo5)
2017/09/08(金) 18:02:05.09ID:mcCYyLIS0988デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 18:15:42.38ID:Ej7G00WUa >>987
立てたよ
https://mevius.2ch.net/test/read.cgi/tech/1504861931/l50
少なくともマネージドオブジェクト(Graphics)は毎回使い捨てだと思うよ。
スレ立てのために久しぶりにブラウザで表示したらずいぶんデザイン変わってるんだな。
こんなくだらないことするのなら専用ブラウザなんか使わなくても
もっと使いやすいようにすりゃいいのに...
まあ、もう2ch亡くなっても誰も困らんか
立てたよ
https://mevius.2ch.net/test/read.cgi/tech/1504861931/l50
少なくともマネージドオブジェクト(Graphics)は毎回使い捨てだと思うよ。
スレ立てのために久しぶりにブラウザで表示したらずいぶんデザイン変わってるんだな。
こんなくだらないことするのなら専用ブラウザなんか使わなくても
もっと使いやすいようにすりゃいいのに...
まあ、もう2ch亡くなっても誰も困らんか
989デフォルトの名無しさん (アウアウイー Sa7b-QyhX)
2017/09/08(金) 19:40:16.45ID:wFGdJLM3a nmecabに例の辞書入れて動かしてたら時々遅くなって何かと思ったらガベコレだった
サービスにぶっこんでて気付かなかった
サービスにぶっこんでて気付かなかった
990デフォルトの名無しさん (ワッチョイ 174d-x/0H)
2017/09/08(金) 19:46:39.40ID:hqG5pPGU0 >>970
これがゆとりかぁ。
これがゆとりかぁ。
991デフォルトの名無しさん (ワッチョイ 4e61-xkdj)
2017/09/08(金) 19:50:01.67ID:KtAqYxG/0992デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 20:23:30.10ID:Ej7G00WUa993デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 20:26:02.00ID:Ej7G00WUa つーか、今時毎秒オブジェクトを使い捨てしたぐらいで何か問題が起こると
真顔で主張するって、大丈夫かしらん。
普段どんなコード書いてるのかねw
真顔で主張するって、大丈夫かしらん。
普段どんなコード書いてるのかねw
994デフォルトの名無しさん (アウアウイー Sa7b-QyhX)
2017/09/08(金) 20:32:43.87ID:bIIt/y+7a そもそもポーリング処理じゃなくて
ボーリング処理だからな
何が行われてるのかさっぱりわからない
ボーリング処理だからな
何が行われてるのかさっぱりわからない
995デフォルトの名無しさん (ワッチョイ 23e6-d5PD)
2017/09/08(金) 20:38:17.46ID:HXP4jN1T0 >>994
これは恥ずかしい
ポーリング(polling)とは、通信やソフトウェアにおいて、
競合を回避したり、送受信の準備状況を判断したり、
処理を同期したりするために、複数の機器やプログラムに対して
順番に定期的に問い合わせを行い、一定の条件を満たした場合に
送受信や処理を行う通信及び処理方式のことである。
これは恥ずかしい
ポーリング(polling)とは、通信やソフトウェアにおいて、
競合を回避したり、送受信の準備状況を判断したり、
処理を同期したりするために、複数の機器やプログラムに対して
順番に定期的に問い合わせを行い、一定の条件を満たした場合に
送受信や処理を行う通信及び処理方式のことである。
996デフォルトの名無しさん (ワッチョイ 174d-x/0H)
2017/09/08(金) 20:38:39.24ID:hqG5pPGU0 キミの用途はそうではなくても、常識としてnewやstringは遅いという認識を共有してくれないかな。
今時とか、普段とか、遅くて使い物にならなかった昔のJava屋のセリフそのままじゃないか。
どんな時代でもCPUのリソースは有限なんだよ。
今時とか、普段とか、遅くて使い物にならなかった昔のJava屋のセリフそのままじゃないか。
どんな時代でもCPUのリソースは有限なんだよ。
997デフォルトの名無しさん (ワッチョイ 23e6-d5PD)
2017/09/08(金) 20:39:35.74ID:HXP4jN1T0 >>994
ボーリングってなんだよwww
ボーリングってなんだよwww
998デフォルトの名無しさん (アウアウイー Sa7b-QyhX)
2017/09/08(金) 20:49:45.90ID:13cy/HVma999デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 21:00:17.89ID:Ej7G00WUa 穴を掘るだけの簡単なお仕事です
1000デフォルトの名無しさん (アウアウエー Sa52-tij5)
2017/09/08(金) 21:03:18.12ID:Ej7G00WUa >>996
上から目線で頓珍漢なことを言ってるお型を見るほど滑稽な物はないなw
上から目線で頓珍漢なことを言ってるお型を見るほど滑稽な物はないなw
10011001
Over 1000Thread このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 52日 14時間 22分 33秒
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 52日 14時間 22分 33秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 「“なり得る”って言っただけだから…」高市早苗“存立危機”答弁後に漏らした本音 ★2 [Hitzeschleier★]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で ★4 [お断り★]
- 【テレビ】佐野岳 TBS『最強スポーツ男子頂上決戦』収録で重傷… 右膝半月板損傷と靭帯断裂 全治8カ月~9カ月間 [冬月記者★]
- 高市首相「台湾有事」発言引き出した「立憲・岡田克也氏」に聞いた質問の真意「これはマズイ発言だと」少しずらしてみたが焼け石に水 ★2 [ぐれ★]
- 中国が水産物の輸入停止、首相答弁撤回を要求…中国共産党機関紙「輸入停止は一つのシグナルにすぎない」 [ぐれ★]
- アンガ山根、太れない…必死に飲むのは『溶かしたアイス』 「女性に太ってる言っちゃダメ空気感だが男のガリは言っていい空気感が」 [おっさん友の会★]
- 急速な円安進行。原因は市場の誤解 [237216734]
- 俺「アベノミクスをやれば国債金利の上昇を招くでしょう」主人公「貴様!なぜ未来が分かる。未来が読めたらどうすることもできない!」 [805596214]
- 田崎史郎「日本側は切るカードがないから我慢するしかない」 [445522505]
- 【悲報】男が40超えると始めることがこれwwwwwwwww [394133584]
- 🏡PUNCHマッチ💥🥊😅🥊💥超重量級決戦🏡
- X民「WeChatで中国語でメールするか」隣に座ったハゲウヨ「帰れよ、日本に来んな」ブツブツ [165981677]
