15/08/22 18:27:46.34 yRr1oZWk.net
msdn.microsoft.comのAPIリファレンスとリフレクタ(今はILSpy)だけで
すべてやりくりしてきた俺、ドボンを知らず低見の見物
568:デフォルトの名無しさん
15/08/22 18:34:01.47 /al9OGnB.net
>>557
後半
あるあるある
569:デフォルトの名無しさん
15/08/22 20:23:16.96 JpeLxAWc.net
>>557
いや、当人がどんな人物であったかとは関係なく、
あのコードを垂れ流しているというのは犯罪に近いよ。
分かってる人にはいいけど、初心者にはあまりいい影響を与えない。
何かを公開して流布している責任というものがある
570:デフォルトの名無しさん
15/08/22 20:41:11.99 9JN1kuOn.net
言論の自由があるので仕方ない
571:デフォルトの名無しさん
15/08/22 21:22:44.29 /dRiP8l8.net
そもそもネットの記事を鵜呑みにするヤツの方に問題があるんでわ。
572:デフォルトの名無しさん
15/08/22 21:28:50.69 Z73ESiAy.net
>>561
わかる
でもそれは仕方ない
「にわかな奴ほど語りたがる」の法則は今だ根強い
糞かどうかの判断がつかないから顔面に糞つけて糞頬張りながら糞うpするんだよ
573:デフォルトの名無しさん
15/08/22 21:35:41.70 3HC4qH6u.net
>>561
具体的にどれよ
url 教えてくれ
574:デフォルトの名無しさん
15/08/22 22:46:49.90 FpzfkEmP.net
>>559
.NETのソースならよく読むけど、逆コンパイルするほど気になるソフトってなんかある?
575:デフォルトの名無しさん
15/08/23 01:33:58.42 kX8AQ+CF.net
>>561
犯罪的なコードって何でしょう?
576:デフォルトの名無しさん
15/08/23 03:28:16.91 AQ6+ZwTX.net
>>554
あそこはVB.NETがメインで、Usingが使えるようになる前からのコードがあるからだよ
Disposeしろって注意書きは時々みかけるし、そもそもあそこ初心者のためのサイトじゃないと思うが
577:デフォルトの名無しさん
15/08/23 10:55:36.67 BEYfXVp0.net
Dispose厨のレベルの低さに泣ける
何でもかんでも明示的に破棄するのはアホのやる事だぞ
マネージドって言葉の意味少しは考えろよ
578:デフォルトの名無しさん
15/08/23 11:11:07.80 U8H/JFYc.net
Dispose厨ってのは
MSDNも読まずにマネージドリソースの解放にDisposeを使っちゃう
アホなクラス設計者のことですよね?
579:デフォルトの名無しさん
15/08/23 11:15:15.60 QlQ/u5s/.net
人を非難する前にマネージドリソースとは何か明確に定義せよ
580:デフォルトの名無しさん
15/08/23 11:15:48.70 CLEYS0FF.net
>>569
どゆこと?
>>570
>マネージドリソースの解放に
それはGCがやるもんだが
581:デフォルトの名無しさん
15/08/23 11:49:28.77 BEYfXVp0.net
クリティカルなリソースはusingを使うべきだ
パフォーマンス問題になるならusingを使っても良い
しかしそれ以外ではusingを使うな
CLRに全てを委ねてプログラマをリソース管理の責務から解き放つのだ
582:デフォルトの名無しさん
15/08/23 12:05:44.69 9aqT3FI6.net
メモリ以外のリソースはすべて・・・・
583:デフォルトの名無しさん
15/08/23 12:17:42.22 CLEYS0FF.net
>>573
全く分からん
584:デフォルトの名無しさん
15/08/23 13:15:02.38 JQjk+2hP.net
マネージドリソース
それは(ライブラリの中のコード含めて)ネイティブを使わずに記述できるもの
ファイルやTCPソケットはこれに該当しない
クリティカルとか言ってる馬鹿は放置
585:デフォルトの名無しさん
15/08/23 13:20:50.40 9aqT3FI6.net
メインメモリ以外のリソースはすべてアンマネージドだ
586:デフォルトの名無しさん
15/08/23 13:22:15.46 prCrabVF.net
usingを使えるってことはIDisposableなわけで、つまりそのオブジェクトがアンマネージドオブジェクトを含んでいたりラップしているのが普通だ
IDisposableをやたら使うなならともかく、usingを使うなってのは意味がわからんな
587:デフォルトの名無しさん
15/08/23 13:33:23.13 /F5UpcuB.net
ファイルやTCPがマネージドとか言い切ってる奴大丈夫かよ
588:デフォルトの名無しさん
15/08/23 13:36:39.19 bbkyb+Wi.net
8月以降このスレで大丈夫そうな書き込みは見てませんよ
ここまで無脳と馬鹿のコラボばっか
589:デフォルトの名無しさん
15/08/23 13:43:35.74 zGFxmPuI.net
ちょっと上にあった「ニワカほど語る」法則が炸裂してんだろ。
確かにDisposeだのマネージドだのニワカくせー話題だわ。
590:デフォルトの名無しさん
15/08/23 15:33:29.02 JLY6V2Uz.net
無脳なのは573と579と581ぐらいじゃないか
591:デフォルトの名無しさん
15/08/23 15:44:14.12 1KB/gLgO.net
ファイルみたいな共有リソース掴んでない限りGCされるまでメモリを消費するだけだし、Disposeする必要のない場面もあったりする
呼んで損はないから、明らか不要なとき以外は呼ぶが吉だけどね
WPF版のドボンみたいなサイトがほしい
592:デフォルトの名無しさん
15/08/23 15:54:39.63 Rmxdvxky.net
>Disposeする必要のない場面もあったりする
へー、どんな場合だよ
ただしawaitのTask以外で
593:デフォルトの名無しさん
15/08/23 15:58:35.35 cYtxjCYh.net
WPF(笑)
存在そのものが意味不明なフレームワークは隔離スレで大人しくしてなよ
お呼びじゃないから
594:デフォルトの名無しさん
15/08/23 16:04:54.83 UzzkwRGD.net
>>584
GDI+関係はかなりあるよ。
Win9x時代はOSの制約上確実に呼ぶ必要があったが今は必ずしも必要ないもの
595:デフォルトの名無しさん
15/08/23 16:19:52.74 bbkyb+Wi.net
頭がとろけたような具体性のかけらもない会話
596:デフォルトの名無しさん
15/08/23 16:24:59.06 hc4Y2Ev5.net
無脳だと認めたら終わってしまうくらい他に何かが無いのに、これ以外にできることが無い奴なんだろうな
暴れすぎやで
> 573,579,581
597:デフォルトの名無しさん
15/08/23 17:28:44.31 MIhiF6BJ.net
リソースクラスにはDisposeパターンを適切に実装する
実際にDisposeする時期はCLRに任せて人間は管理しない
これ.NETの世界じゃ基本中の基本だよ
管理不要でパフォーマンスへの影響もないリソースを工数かけて人間の手で管理したがる
救いようのない馬鹿としか言いようがない
598:デフォルトの名無しさん
15/08/23 17:37:04.51 CLEYS0FF.net
はぁ??
599:デフォルトの名無しさん
15/08/23 17:43:43.11 MIhiF6BJ.net
>>590
やれやれ
論理的な反論ならまだ救いようがあるが、
無学が原因で理解が及ばない、ってだけでケチを付けるなよ
それもう敗北宣言に等しいぞ
600:デフォルトの名無しさん
15/08/23 17:48:20.40 0gT6iToJ.net
>>586
kwsk
StringFormatとかIDisposableだから律儀にusingしてるけど
601:デフォルトの名無しさん
15/08/23 17:50:34.03 0gT6iToJ.net
起動してすぐ終了するようなツールしか作らないならファイナライザ任せでもいいかもね
602:デフォルトの名無しさん
15/08/23 17:54:13.26 hc4Y2Ev5.net
リソースの意味が微妙な感じの流れだから、それは置いとくとして
ファイルなどを取り扱う場合はちゃんとDisposeしないとファイルが開きっぱなしになって、他所からアクセス不能になって困る事がある
必ずクローズすれば良いが、例外などで予想外の進行をした場合に備えて using で確実なDisposeをしておいた方が良いだろう
面倒だがDisposeがあるなら必ずDisposeするべきでしょう
C++などの場合と比べてファイナライザ(デストラクタ)の実行順序が当てにならないので、あてになる順序をきちんと作る必要がある場合も利用されるでしょうから
603:デフォルトの名無しさん
15/08/23 17:57:04.83 bbkyb+Wi.net
あの、ふらっとでやってくれる?
そういうの
604:デフォルトの名無しさん
15/08/23 18:01:14.22 hrfhzpqC.net
ニワカなやつほど(略
605:デフォルトの名無しさん
15/08/23 18:04:40.51 MIhiF6BJ.net
>>594
当然
適切な終了処理が必要なものは、そう書く必要がある
しかし、そういった処理が不要で、CLRに任せておけば良いように作られたリソースクラスでは必要がない
むしろ不必要な記述でコードを汚染するだけなので、書いてはいけない
すでに自動化されているものは、機械に任せるのが正解なのである
606:デフォルトの名無しさん
15/08/23 18:04:49.28 hc4Y2Ev5.net
595,596
煽りたいだけなら、今すぐネット切って死んでしまえば良い
607:デフォルトの名無しさん
15/08/23 18:09:32.22 hc4Y2Ev5.net
>>597
Disposeを書くという事は、今後そのライブラリを作った人が
そのように使う必要があるよう変更するかもしれないという余地が残っているのです
みんなで作業するときトラブルなどが発生しないように取り決めた事ですから、可能な限り従う事がよろしいでしょう
608:デフォルトの名無しさん
15/08/23 18:13:39.60 bbkyb+Wi.net
煽りたくないけど低レベル過ぎて邪魔だよ
どっから湧いてるの?
609:デフォルトの名無しさん
15/08/23 18:17:14.27 idej2sB9.net
>>600
お前も煽ってるだけで何も貢献してないけどな
610:デフォルトの名無しさん
15/08/23 18:17:59.99 GkEjDFKz.net
俺のDisposable講義は始まったばかりだぜ
聞きたくない奴は帰りな
611:デフォルトの名無しさん
15/08/23 18:21:04.69 GkEjDFKz.net
MSDNやそこらのブログに散々書いてあるようなことしか言わないぜ
耳タコだと思うが勘弁な
俺は喋りたいんだ
昨日今日知ったばかりなんでな
だから聞いてくれ
612:デフォルトの名無しさん
15/08/23 18:23:20.43 MIhiF6BJ.net
>>599
そんな糞みたいな仕様変更をする破壊工作員は処刑が必要
ぶっちゃけコード直してる場合じゃない
最初のバージョンから、Disposeが必須であると、明記されているなら使うべきだし
明記されてい無いなら、Disposeを必須にするような変更は行ってはならない
馬鹿でもわかる話だが知らなかった?
613:デフォルトの名無しさん
15/08/23 18:27:38.13 NRN2Fhep.net
お前の頭から修正しとけよ
もうリカバリ不能かも知れんがな
614:デフォルトの名無しさん
15/08/23 18:34:31.35 MIhiF6BJ.net
ふぅ~
まいったね
反論すらできないところまで追い詰めちゃったか
論理的な、とまでは言わないから、せめて安い暴言じゃなくて反論を頼むよ
615:デフォルトの名無しさん
15/08/23 18:36:25.70 UiYX5d8M.net
そもそもリソースクラスって何だよ
616:デフォルトの名無しさん
15/08/23 18:36:31.29 nxY8tWuM.net
ちょっとこのスレDisposeしてくる
617:デフォルトの名無しさん
15/08/23 18:41:24.76 bbkyb+Wi.net
Disposeの実装が糞で駄目なパターンだな
618:デフォルトの名無しさん
15/08/23 18:41:34.58 UiYX5d8M.net
それに呼ばないのが基本中の基本としつつもIDisposableの代表例
619:であるFileStreamを例外にするってどういう事だよ 長々と書いているが結局呼ばなくていい場合があると言いたいだけか?
620:デフォルトの名無しさん
15/08/23 18:44:40.15 JbH8lT1Q.net
MSDN確認してその通りにやればいいだけでは?
> 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。
> Dispose のメソッドを明示的に呼び出す必要があるため Dispose のメソッドを呼び出してオブジェクトのコンシューマーがに失敗したため、
> アンマネージ リソースが解放されないこと危険性が常にあります。 これを回避するには、次の 2 とおりの方法があります。
> ・System.Runtime.InteropServices.SafeHandle から派生されるオブジェクトのマネージ リソースをラップしてください。
> ・Dispose が呼び出されないときにリソースを解放するようにファイナライザーを実装してください。
> StreamWriter などのアンマネージ リソースにアクセスするオブジェクトを使用するときは、using ステートメントでインスタンスを作成することをお勧めします。
> using ステートメントは、使用しているコードが完了すると、ストリームを自動的に閉じ、オブジェクトの Dispose を呼び出します。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
621:デフォルトの名無しさん
15/08/23 18:50:22.66 53h6zSH3.net
CLR再起動
622:デフォルトの名無しさん
15/08/23 18:50:45.39 hc4Y2Ev5.net
>>604
それでは共同作業になりませんね、そこまで自我を通したいなら自分一人で作業するしかないでしょう
取り決めは大事
623:デフォルトの名無しさん
15/08/23 18:53:42.93 MIhiF6BJ.net
>>613
共同作業を円滑にするために、常にDispose必須、とかいうオレオレルールを排除しなければならない
理由はもう説明したな
624:デフォルトの名無しさん
15/08/23 18:59:05.24 53h6zSH3.net
今度は共同作業のマナー論ですか
君らはまず場を弁えることを学ぶのが先決では…
625:デフォルトの名無しさん
15/08/23 19:02:58.05 8rh7GHk2.net
>>592
Font, Brush, Penなんかは自分で作った物(システムリソースじゃない)であっても
今のWindowsではいちいちDisposeしなくてもまず何の問題もない。
そうは言っても習慣で書いちゃうけどね。
626:デフォルトの名無しさん
15/08/23 19:09:30.05 2AMvri3n.net
>>616
そうなんだ
でも呼ばないと高コストなファイナライザでの解放になっちゃうしね
627:デフォルトの名無しさん
15/08/23 19:24:52.17 qzhEyH2V.net
今unityでゲームを作っているのですが、累計の記録ってどう書けばいいのでしょうか?
今まで対象のオブジェクトが何回タップされたか記録したいです。
playerprefsを使えばできますか?
628:デフォルトの名無しさん
15/08/23 19:25:54.56 idej2sB9.net
unityスレで質問しなよ
629:デフォルトの名無しさん
15/08/23 19:36:46.47 hc4Y2Ev5.net
Disposeがどうしても嫌なら、勝手に俺ルールを作り出さず素直にファイナライザに書けばいいんだよ
そういうルールで作ろうという事になっているんだから
それで問題なければそれで上手くいく、そうでないものは決められた極力ルールに従う事
そうしてファイナライザのみにすると具合が悪い話が必ず出てくると気付くはず
例えば、ファイルオブジェクトのように、ロック握っている奴とか
例えば、アンマネージ側の参照カウンタがカウントダウンされなくて予想外のメモリーリークしたとか
例えば、C++のつもりでデストラクトの順序を考えていたら予定外の順序でファイナライザが起動してクラッシュしたとか
630:デフォルトの名無しさん
15/08/23 19:44:15.23 0gT6iToJ.net
>>616
システムリソースじゃないってほんとかい? GDIオブジェクトとしてタスクマネージャに表示されるんじゃないの?
でも大概描画=なんども呼ばれるシナリオだから
そのたびに破棄しておいたほうがメモリ的にも安心じゃね?
631:デフォルトの名無しさん
15/08/23 19:45:43.68 MIhiF6BJ.net
>>620
何回言えばいいのかな
呼び出しが必要な必要と使用に明記する
明記されない以上は明記しなくても問題ないように実装する
それが社会のルールだ
呼ばないとダメになる場合があるのにそれを仕様に明記しないでDisposeが呼ばれるオレオレルール(出典不明)を前提に作るな
クズが死ね
632:デフォルトの名無しさん
15/08/23 19:53:17.04 JbH8lT1Q.net
>>616
今更ながらPenがDisposeを実装していると知った。(もちろんDisposeしたことはない)
何でこれまで気づかなかったのかと探せば、
PenのサンプルコードではDisposeしているが、DrawLinesのではしていないからだ。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
なお、これまで特に問題を感じたことはなかった。
>>617
Finalize自体はDisposeと大して変わらないよね?
GC自体のコストと、メモリ撹拌の問題はあるにしても。
Disposeした方がもちろんお行儀がいいとして。
てか、gcnew って delete しなくていいためのものじゃなかったんかー!
ファイルはクローズしてるけど、他は全部放置してたわw
(なおVC++使い)
633:デフォルトの名無しさん
15/08/23 19:58:35.53 nxY8tWuM.net
このスレを読んだら初心者の私もウルトラスーパーハイパーミラクルアルティメットDispose名人になれました!
634:デフォルトの名無しさん
15/08/23 20:01:04.88 MIhiF6BJ.net
>>623
deleteしなくても良いであってるよ
自動化したのに手作業が必要なんて馬鹿みたいだろ
635:デフォルトの名無しさん
15/08/23 20:08:50.19 9aqT3FI6.net
でも、ファイナライザは論理アドレスが圧迫されてGCが発動しないと呼ばれないよ
メモリとシステムリソースは別物だから、
開放のトリガーを論理アドレスの枯渇に頼るのは良くない作法なのでは
636:デフォルトの名無しさん
15/08/23 20:09:16.04 hc4Y2Ev5.net
初心者の頃 Disposeし忘れて、ライブラリの書き直しが大変な事になったのでは GetEnumerator() で取ってきたIEnumerableのDisposeのし忘れかな
ファイルオブシェクトをこっそり握っていて、ファイルがロックされたままだったのを
色々システムを結合した後に気づいて、泣きそうになった
C++から移行した後、嵌ったのは
class A
{
~A() {}
}
class B
{
A a;
~B() {}
}
var tmp = new B();
こういったケースかな、C++であれば必ず a のデストラクタが後だが C# だとどちらが先になるか分からなくなる
C++と違いデストラクタではメンバは迂闊に触れないという事実を思い知らされた
637:デフォルトの名無しさん
15/08/23 20:18:42.77 hc4Y2Ev5.net
おっと、GetEnumerator() で取って来れるのは IEnumerable ではなくて IEnumerator でした
Disposeがリソースと関係なく必要になるケースはC++と違いデストラクタがまともに使えないという事情から来ることも多々あります
638:デフォルトの名無しさん
15/08/23 20:20:23.58 ZkLCFLWu.net
まだやってやがる
死ねよマジで
それともあれか、手伝って欲しいのか?
殺してやるから住所教えろや
639:デフォルトの名無しさん
15/08/23 20:26:42.76 0gT6iToJ.net
>>629
おまえの住所先に書けやバカヤロウ
640:デフォルトの名無しさん
15/08/23 20:27:29.87 bbkyb+Wi.net
見なかったことにしてやるからさっさと執行してくれや
641:デフォルトの名無しさん
15/08/23 20:31:02.28 MIhiF6BJ.net
おうかかってこいやチキン野郎
642:デフォルトの名無しさん
15/08/23 20:50:07.75 JbH8lT1Q.net
>>625
コンセプトとしてはその通りだけど、ID:hc4Y2Ev5が言っているのもまた然りだと思うよ。
本来は、全部GCに任せた上で、理由がある場合のみ手動でDisposeという仕様を目指しているのだと思う。
現実的にはこれはほぼ完成しており、通常の範囲で問題になることはない。(少なくとも俺は命中していない)
ただ、MSDNで
> 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。(611)
と言っている以上、Finalizerだけでは駄目なケースがあって、それに命中する可能性も残っているのだと思う。
とはいえ、普通に実装すればFinalizeはまずDisposeをコールするだろうから、
問題が発生�
643:キるとしたらタイミングだけのはずだけど。 確認してみたけど、C#のデストラクタは起動を予約してGCから起動するという仕様のように見える。 > http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_011/csharp_abc03.html 確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。 だから>>627-628の言うことはあっている。620の3つのケースもあり得ると思う。 理由は指摘の通り、C#ではデストラクタの起動順/タイミングが規定できないからだね。
644:デフォルトの名無しさん
15/08/23 20:50:20.22 1KB/gLgO.net
>>584
特定の方法でインスタンス作った時にだけ意味があるというのは割りとある
例えば、FormをShowした時とかは自動でDisposeされるから不要
645:デフォルトの名無しさん
15/08/23 21:31:38.21 hc4Y2Ev5.net
>確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。
ファイルオブジェクト的な物を使う側ではなく作る側で、実際にいろいろやってみて面倒な事になってるなと思ったのは
フィールド上に確保していたバッファがデストラクタ中のクローズ処理よりも先に解放されてしまうなどですかね
アンマネージの場合はこの辺は実にすっきり記述できるんですが、マネージでは厄介です
初心者の時
~Class() { Dispose(); }
なんて事をあまり深く考えずにやってました、そして謎の異常終了を発生させてましたね
Disposeが呼び出されずにデストラクタが呼び出されたら、できることはもはや安全停止だけです
まともな終了処理は最早できません
646:デフォルトの名無しさん
15/08/23 21:35:34.12 OpHxID+X.net
C++のノリでデストラクターを間違った使い方して
GCの洗礼を受けたのはわかった
647:デフォルトの名無しさん
15/08/23 21:37:58.50 aJXfAZiV.net
もうskypeで議論して最終的に友情をめばえさせたら?
C#である必要もないし
648: ◆QZaw55cn4c
15/08/23 21:38:38.49 GHcBJPT0.net
C++ でも delete this は普通やらない‥
649:デフォルトの名無しさん
15/08/23 21:40:51.66 hc4Y2Ev5.net
デストラクタ的な機能が欲しければC#ではDisposeしか手段が無いんです
ファイナライザは使えません、その処理はシステムに任せることはできないのです
それが分かっていないと安易にDispose不要という考えが出てしまいます
650:デフォルトの名無しさん
15/08/23 22:03:58.87 pgaNpm//.net
はいはいちごいねー
死ね
651:デフォルトの名無しさん
15/08/23 22:09:13.04 oScCmTRi.net
おい待てよ
Dispose不要派は
1.ファイナライザーでやればいいんだぜ
だけじゃなくて
2.解放など軟弱もののやること だってボクの環境で問題になったことないんだもん
の方が多数派だろ
652:デフォルトの名無しさん
15/08/23 22:11:48.27 rrCWAeC5.net
>>641
うるせえ喋んなカス死ね
653:デフォルトの名無しさん
15/08/23 22:13:14.66 nxY8tWuM.net
ここまで全部俺の自演
654:デフォルトの名無しさん
15/08/23 22:16:59.42 1KB/gLgO.net
>>633
IDisposableを実装している場合は、明らかに不要な場合以外は使い終わった後にすぐDisposeすべき
PenもBrushも中にGDIのハンドルを抱えてるわけで、アンマネージドのシステムリソースやメモリを必要以上に使ってしまう
ファイナライザは残っていると仕様上開放が先延ばしになって長時間メモリを占拠するから、想定よりコストは高い
>てか、gcnew って delete しなくていいためのものじゃなかったんかー!
WindowsがすべてGCの管理上で動くようになればな。GC管理外のデータはプログラマが責任を持たざるをえない
655:デフォルトの名無しさん
15/08/23 22:21:09.75 hc4Y2Ev5.net
コストに関しては、昨今はシビアなノーパソでもない限りは自分はあんまり気にしなくなってたりしますw
ロジック的にDisposeが必要不可欠な物の方を意識したいところです
656:デフォルトの名無しさん
15/08/23 22:24:17.01 prCrabVF.net
そういやVS2015から、IDisposable選択して右クリック→クイックアクションで、
Disposeのひな形吐き出してくれるんだよな。便利になったものだわ
657:デフォルトの名無しさん
15/08/23 22:29:32.06 MIhiF6BJ.net
最初から何度も言ってるがこれが正解な
1. Disposeしないと機能的にアウト→Disposeする
2. 機能的に問題ないがボトルネックになる→Disposeを許す
3. 機能的に問題ないうえに負荷も軽微→自動化しろ手で書くな
クライアントは殆どが3なんだわ
Disposeなんか要らないんだよ
これが今日のまとめね
658:デフォルトの名無しさん
15/08/23 22:33:20.72 hc4Y2Ev5.net
3. 機能的に問題ないうえに負荷も軽微→元クラスのIDisposeを除去せよ
これが正解です
659:デフォルトの名無しさん
15/08/23 22:37:13.05 YS/VElDC.net
1日かけて成果物3行って舐めてるのか貴様ら
660:デフォルトの名無しさん
15/08/23 22:37:24.13 JbH8lT1Q.net
>>639
仰るとおり、C++→C#へのポーティングではC#のデストラクタには期待できないから、
いちいち手動で順番も考慮してDispose()しかなさそうだ。
ただこれはだいぶ手間だから、何らかの上手い解決策が既にありそうだけどね。
仕様から言って、C#ではデストラクタの起動順を期待するコーディングをしてはいけない。
ただ、
> フィールド上に確保していたバッファがデストラクタ中のクローズ処理よりも先に解放されてしまうなどですかね (635)
これはよく分からない。(これが発生する可能性がシステム的にあることは分かる)
とはいえ、C#って多重継承できないし、アンマネージドとマネージドを混ぜてぐちゃぐちゃにしたりすることがなければ、
これって無いよね?
(逆に言えば、マネージドコードだけならこういったことは発生しない、と思っている。
そして本来はアンマネージドを大量に使うことこそが問題。ポーティングならある程度致し方ないにしても。)
661:デフォルトの名無しさん
15/08/23 22:37:59.91 hc4Y2Ev5.net
ここにはゲーム等、ハイパフォーマンスが必要になる人もいるでしょう
その時Disposeしなくても問題ないと開発元に確認できた、Disposeしない方が高速である事が確認された
そして、それをする事でソフトの商品価値が向上する、この条件でDisposeしないを選択するのが正しいと思う
それ以外は必ずやらなければ駄目です
662:デフォルトの名無しさん
15/08/23 22:38:00.89 HkRU0Alf.net
機能的に問題ないがDispose使わないとボトルネックになるなんて
どんな状況だよ
663:デフォルトの名無しさん
15/08/23 22:38:38.88 MIhiF6BJ.net
>>649
行数にこだわるのは老害の証
現代のプログラマは中身を見ないと
664:デフォルトの名無しさん
15/08/23 22:39:55.83 +kgkAxfw.net
>>647-648
「だから何」レベルのまとめはQiitaにでも書いといて
あと死ね
665:デフォルトの名無しさん
15/08/23 22:41:15.09 prCrabVF.net
なんかしらんが、このレベルの話題が一番盛り上がるよな
上でも下でもこうはならん
666:デフォルトの名無しさん
15/08/23 22:42:20.89 bbkyb+Wi.net
毛の壁を笑えんよこれは
667:デフォルトの名無しさん
15/08/23 22:45:56.71 hc4Y2Ev5.net
>>650
マークスイープでは順序を決めることができないんですよ
循環した参照がある場合どこから削除すべきかという判断材料がなくなる、ならば最初から順番は無視という判断なのだと思います
実際ガベコレ毎に順序は出鱈目です、気を付けてください
C++の場合、例えば循環参照があったらメモリーリークですが、プログラマのレベル高いから平気だよねってコンセプトではない訳です
それにしてもC++の芋ずる式デストラクタは気持ちいいです・・・
668:デフォルトの名無しさん
15/08/23 22:53:59.24 MIhiF6BJ.net
>>650
マネージドだけでも普通に発生する
バッファが回収可能になるのと所有者インスタンスがFRQにぶち込まれるタイミングはほぼ同時
どっちが先に処理されるかは誰にもわからない
669:デフォルトの名無しさん
15/08/23 22:58:36.70 MIhiF6BJ.net
というのは嘘だ
670:デフォルトの名無しさん
15/08/23 22:59:24.15 rRq+bYgY.net
>>659
そうかい
では死ね
671:デフォルトの名無しさん
15/08/23 23:01:02.88 MIhiF6BJ.net
>>660
しゃぶれよ
672:デフォルトの名無しさん
15/08/23 23:02:56.73 5fcokCbE.net
バカには難しかったかな
クラスAのオブジェクトaはクラスBのオブジェクトbを参照しているとする
A a = new A();
a = null;
ここでaとbが同時に解放対象になって、aとbの解放順序が非決定的
673:デフォルトの名無しさん
15/08/23 23:04:45.05 9aqT3FI6.net
何でそんなサンプルコードが必要だと思ったの?
674:デフォルトの名無しさん
15/08/23 23:06:20.29 JbH8lT1Q.net
>>657
見た目はマークスイープだけど、中身は参照カウント方式だったはず。(だからそれなりに順を追ってGCされる)
というのを中の人が書いたドキュメントがあったはずだが、検索しても今はでてこない。
ブクマによると多分以下なのだが、アーカイブになっていてどれなのか分かりませんorz
Microsoft .NET Framework の自動メモリ管理 Part I
URLリンク(msdn.microsoft.com)
675:デフォルトの名無しさん
15/08/23 23:07:02.82 hc4Y2Ev5.net
C++の人は、ここをミスしやすいと思うし、見ている印象結構C++からやってきた人多そうだから
悪くないサンプルだと思うのですが・・・
676:デフォルトの名無しさん
15/08/23 23:10:23.32 MIhiF6BJ.net
>>662
と思うじゃん?
677:デフォルトの名無しさん
15/08/24 00:08:47.57 genYk8wg.net
さてまとめるか。
「不必要にDisposeを量産するバカが多いため
usingを怠る悪習が蔓延した」
678:デフォルトの名無しさん
15/08/24 00:31:00.45 e5Jihg5N.net
IDisposeを持つオブジェクトを握るオブジェクトはIDisposeを持つしかない
不用意でなくても普通に増えるしかないよ
IDisposeを持つ物は Stream や Task があるがどれも基本的なクラスばかりで避けては通れない
679:デフォルトの名無しさん
15/08/24 00:35:53.34 4CFfNfbx.net
>>662
さすがにそのケースでのリークはないよね?
Array等の中身として参照を持っているだけなら、
そもそもデストラクタがどちらから呼ばれても問題ない。
継承関係なら自動でやってくれるはず。
自作クラスで継承以外で引っ張ってきている場合、必要ならデストラクタにその順通り書けばよく、
デストラクタがいつ呼ばれるかは問題ではない。
(自作クラスの一つのデストラクタだけで済むように構成する。
ただしリソース解放が必要ならDisposeを実装しないとタイミングが読めない。)
菱形継承で先に基底クラスが解放されたりするのは問題になるけど、C#にこれはない。
だから問題になるのは、一度しか呼ばれないアンマネージド側で
マネージドのデストラクタが呼び出し済みなのを期待している時で、多分これだけだよね?
マネージド側は放置しててもなんだかんだでいつかはGCされるはず。
それが嫌ならDisposeしろって事で。
だから、アンマネージドを先に全部解放するようにすれば、問題は発生しないと見た。
680:デフォルトの名無しさん
15/08/24 00:36:24.75 4CFfNfbx.net
なお、MSDNのデストラクターにまんま書いてある。
> デストラクターがいつ呼び出されるかはガベージ コレクターによって決定されるため、プログラマは制御できません。
> 一般に C# では、ガベージ コレクションを使用しない言語で開発する場合ほど、メモリ管理を必要としません。
> .NET Framework のガベージ コレクターが、オブジェクトに対するメモリの割り当てと解放を暗黙的に管理します。
> ただし、ウィンドウ、ファイル、ネットワーク接続などのアンマネージ リソースをアプリケーションでカプセル化するときは、
> デストラクターを使ってこれらのリソースを解放する必要があります。
> アプリケーションで貴重な外部リソースを使用している場合は、
> ガベージ コレクターがオブジェクトを解放する前にリソースを明示的に解放する手段を用意することをお勧めします。
> この処理を行うには、オブジェクトに対して必要なクリーンアップを実行する Dispose メソッドを IDisposable インターフェイスから実装します。
> これによって、アプリケーションのパフォーマンスを大幅に向上させることができます。
> このようにリソースを明示的に制御する場合でも、
> デストラクターは、Dispose メソッドの呼び出しが失敗したときにリソースをクリーンアップするための安全装置になります。
> URLリンク(msdn.microsoft.com)
681:デフォルトの名無しさん
15/08/24 00:42:37.88 e5Jihg5N.net
C#の場合デストラクタでやっていいことは、static関数の呼び出しくらいだろうな
class型フィールドの内容に触ることはできない、触ってよいのは int や enum といった値のフィールドだけ
それ以外の操作をしたければDisposeを使うしかない
順序良く呼び出されたとしてもこれでは何もできない
682:デフォルトの名無しさん
15/08/24 00:51:10.64 OjRQ25eS.net
ID:4CFfNfbx
この人は何言ってるかわからなくて、頭くらくらしますよね
そもそも話が通じてないし
683:デフォルトの名無しさん
15/08/24 01:04:15.56 e5Jihg5N.net
C++からのポーティングが引き返せないところまで来ているのかもw
笑っちゃいけないか、ご愁傷様かな(ナムナム
684:デフォルトの名無しさん
15/08/24 07:38:39.63 FEQDPFGC.net
なんか、マネージド/アンマネージドコードとマネージド/アンマネージドリソースがごっちゃになってる人がいるように見えるのは気のせいだろうか。
685:デフォルトの名無しさん
15/08/24 07:41:36.51 xNseMvgF.net
蒸し返すなゴミクズ
686:デフォルトの名無しさん
15/08/24 09:19:55.49 h+mHYijt.net
まだ続けるの?
687:デフォルトの名無しさん
15/08/24 09:50:06.14 xNseMvgF.net
もうウンザリ
688:デフォルトの名無しさん
15/08/24 10:58:39.56 /7MwCGkP.net
嫌なら見るな
689:デフォルトの名無しさん
15/08/24 11:48:38.94 Q0ZjIosN.net
いや、低レベルな話がしたいならふらっと行けよ
だからテメエは無脳なんだ
690:デフォルトの名無しさん
15/08/24 12:27:15.22 e5Jihg5N.net
一番低レベルなヤツ -> 679
691:デフォルトの名無しさん
15/08/24 13:03:00.83 kR1o4QUh.net
ここが隔離スレだ
692:デフォルトの名無しさん
15/08/24 15:21:00.93 /7MwCGkP.net
なんでいつも単発IDなんですかね
693:デフォルトの名無しさん
15/08/24 15:48:52.90 CmRZDEoS.net
単発が嫌なら見るなよ
694:デフォルトの名無しさん
15/08/24 15:52:52.92 mvfSohk+.net
>>682
IDがきちんと出るようにするだけの技術力がないから…
695:デフォルトの名無しさん
15/08/24 20:40:58.44 UIihvy++.net
C#って内部実装変えただけでも依存するアセンブリビルドしなきゃなの?
696:デフォルトの名無しさん
15/08/24 20:45:58.83 xp4qRvA3.net
必要なし
697:デフォルトの名無しさん
15/08/24 21:02:14.07 aDhIIP+g.net
ザマリン標準化まだ時間かかりそうですか
698:デフォルトの名無しさん
15/08/24 21:25:54.27 vU2SL/AS.net
Xamarinは目先の金儲けしか頭にないから期待しても無駄
699:デフォルトの名無しさん
15/08/24 21:46:54.78 8rH+FULH.net
>自作クラスで継承以外で引っ張ってきている場合、必要ならデストラクタにその順通り書けばよく、
これ正しいの?
700:デフォルトの名無しさん
15/08/24 22:31:14.60 vU2SL/AS.net
そのファイナライザ内だけで完結するんならそりゃそうだろ
・
701:AとBが両方ともアンマネージリソースを抱えている ・AがBを参照している ・ネイティブライブラリの仕様でBはAより先に解放しなければならないと決まっている こういう状況では当然単純にAとBのファイナライザに頼るわけにはいかない Bにはファイナライザを実装しないでAのファイナライザ内でBのリソースを解放し、 その後にAのリソースを解放するといった工夫が必要になる
702:デフォルトの名無しさん
15/08/24 23:17:12.96 4CFfNfbx.net
>>674
すまん、その通りだ。C#ではアンマネージドコードは禁止とは知らなかった。
解放しているのはunsafeで生ポインタだけか。
インラインアセンブラが出来るというのを見た覚えがあるのだが、気のせいだったようだ。
デストラクタも継承/オーバーロード禁止だから、>>671の言うとおり、staticにしか使えない。
C++からポーティングするなら、
デストラクタ内のは全部Disposeに移動し、そこで手動で親を呼んでおけばいい気がする。
これだとクラス内だけで留まる。
リソース解放タイミングを規定したいのなら手動でDisposeを呼ぶか、usingだね。
ただ、呼ばなくてもセグフォにはならないはず。
MSDNには
> C++ 経験者が C# で開発する場合
> デストラクタ : C# は、アンマネージ リソースを確定的に解放する場合の構文が異なります。
> デストラクタ
> using ステートメント (C# リファレンス)
> URLリンク(msdn.microsoft.com)(v=VS.90).aspx
だけだから、推奨はusingのようだ。
マネージドコードだけしか使えないのなら、本質的なリークはどうやっても発生しないように思える。
一時的なリソース枯渇はあり得るけど、例えばGDIなら描画しまくるアプリ(ゲーム等)でなければあまり気にしなくてもいいのでは。
703:デフォルトの名無しさん
15/08/24 23:21:14.35 agiYVVps.net
>リークはどうやっても発生しないように思える
こういう馬鹿がプログラミングの真似事をするとロクなことがない
704:デフォルトの名無しさん
15/08/24 23:23:09.51 163KCsEM.net
簡潔に一度だけ言うね
ID:4CFfNfbxはあと三年ROMってから
それからカキコしようね
705:デフォルトの名無しさん
15/08/24 23:26:49.44 OjRQ25eS.net
これさー
メモリ以外のリソース、たとえばウィンドウハンドルやGDIオブジェクトetcがさー
枯渇とまでいかなくても、使いすぎと感知したタイミングでGCが発動する仕組みが.Net側にあれば、
usingとか、ファイルなんかの特殊な事例以外では、要らなくなるのでは?
GC発動のトリガーがメモリだけに依存しているから、いろいろ心配になるわけで
706:デフォルトの名無しさん
15/08/24 23:27:45.15 vU2SL/AS.net
ファイナライザ内で別のオブジェクトにアクセスするのは基本的には問題ないぞ
その別のオブジェクトがファイナライザを持ってる場合には
既にファイナライザが呼び出されて無効になっている可能性があるからダメというだけ
ファイナライザを持ってるオブジェクトから参照で辿れるオブジェクトはどのみち全部一度復活して
GCを妨害してしまうから、アクセスすることが特にGCの妨げになるということもない
一番悪いのは「ファイナライザを実装すること」自体な
707:デフォルトの名無しさん
15/08/24 23:57:38.17 e5Jihg5N.net
ファイナライザに実装すべきなのは、安全装置だけだろう
例えばアンマネージドのハンドルを握っている場合
ハンドルはIntPtrだから、別のクラスに入れるといったことをせず直接フィールドに配置しているなら
アクセス可能だから、ここでリ参照カウンタをダウンすれば一応解放は可能
fopenみたいなものを相互運用している場合もハンドルとstatic関数をdllから呼び出せるなら
バッファのフラッシュは諦めるとしてもファイルを閉じることくらいはできる
いずれも最終手段レベルだね
708:デフォルトの名無しさん
15/08/25 00:04:34.64 uHUYRmLo.net
>>691
リーク問題については、あまり期待しないほうが良い
Excelの相互運用なんかをすると、当マイクロソフト製なのに結構厄介だし、洩れまくるし
自作でやってもなかなか糞な事になる
709:デフォルトの名無しさん
15/08/25 00:42:16.41 FzRJlm7d.net
すいません言い直します。
・C#では、正しく構成されたクラスを使用している限り、本質的なリークは発生しない。
(明示的にDisposeしなくてもいつか回収される《=Finalize時にDisposeが呼ばれる》)
じゃないかな?
もちろん.NET謹製のはリークしない。
自作クラスでアンマネージリソースを使う場合、MSDNによると、
・Disposeを実装し、SafeHandleでアンマネージリソースをラップする。←こっちがオススメ
・Finalizeを実装する。
のどちらかをやっておけばいいはず。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
だからリークしてるのであれば、自作クラスの構成がまずいのだと思うのだが。
もちろんクラスの構成はC++流(デストラクタ)ではなくC#流(上記)にしないといけない。
710:デフォルトの名無しさん
15/08/25 00:50:30.42 wg5Da8me.net
ListAとListBの中身を1つずつ比較して、ListBの内1つがListAに無かったらそのオブジェクトを追加し
同じものがあれば追加しないと言う機能を作りたいのですが、foreachだと例外が出て、
for文だと無限ループになってしまいどうやっても上手く実装できませんでした。
一体どうすればListの中身を1つずつ比較して問題なく追加する事が出来るのか教えていただけないでしょうか
711:デフォルトの名無しさん
15/08/25 00:57:16.45 bwlYR2I5.net
問題が起こる、最小のコードをアップしなさい
712:デフォルトの名無しさん
15/08/25 01:11:01.00 wg5Da8me.net
色々書き換え続けて最終的にコンパイルすら通らなくなったんですが多分こんな感じです。
if (ListA.Count == 0) foreach (var li in ListA.a) ListB.Add(li);
else for(int i=0; i < ListB.Count; i++){
for (int x = 0; x < ListA.Count; x++){
if (ListA.a[x] != ListB.a[i]) ListB.Add(ListA.a[x]);
}}
713:デフォルトの名無しさん
15/08/25 02:03:56.13 bwlYR2I5.net
for( a: A )
for( b: B )
{
714:デフォルトの名無しさん
15/08/25 02:07:01.06 bwlYR2I5.net
擬似コードですが、これでどうでしょう
for( a: A )
{
bool found = false;
for( b: B )
{
if( a == b ){ found = true; break; }
}
if( !found ){ B.push_back( a ); }
}
715:デフォルトの名無しさん
15/08/25 02:56:24.98 wg5Da8me.net
よく考えてみたら1つずつ比較してる最中、違った瞬間に追加するってコードになってました。
それで調べたら配列の中を比較するIndexofという機能をついさっき知って実装したところ、上手く動きました。
716:デフォルトの名無しさん
15/08/25 04:17:23.94 ljTVrax0.net
ListB = ListB.Union(ListA).ToList();
717:デフォルトの名無しさん
15/08/25 07:28:11.84 uHUYRmLo.net
>>698
shared_ptr weak_ptr の使い分けのように仕組みを意識して使わないと
システム任せだと無理があるんだよ、SafeHandleを使えば万事解決という訳にはいかない
そろそろ諦めなはれ、アンマネージと相互運用したければ覚悟決めるしかねーですw
718:デフォルトの名無しさん
15/08/25 10:56:12.32 y1FTBoUo.net
アンマネージドとかどういう場面で使うんですか?
C言語とかの領域ですよね?
本見てもどういう場面で使うのか乗ってないんですが
719:デフォルトの名無しさん
15/08/25 11:03:08.95 aUx99M6r.net
アンセーフ?
720:デフォルトの名無しさん
15/08/25 11:33:21.01 Wpti2W5K.net
SafeHandleってサーバーで複数のドメインが1プロセスに同居するような特殊なシステムでない限り何の意味もないんだけどな
使いたがる連中のなかでそれを正しく理解してるのは少ない
721:デフォルトの名無しさん
15/08/25 11:43:43.66 lyj94kL0.net
まあ、C#は元々トロイからね、別に頑張って速くしたりするのは無駄だよね?(´・ω・`)
722:デフォルトの名無しさん
15/08/25 12:20:15.95 ya7qPQ7D.net
トロイ?ゆうちゃん?
723:デフォルトの名無しさん
15/08/25 12:57:13.30 UmUy/CWK.net
>>707
普段コンビニとか外食でメシを食ってるひとが
まな板と包丁買ってきて自分で魚をさばくような話
君はずっとグルメガイドを見てればいい
724:デフォルトの名無しさん
15/08/25 13:09:56.76 uHUYRmLo.net
Dispose不要なんて自分ルールを広めようとしてもそうはいかないから
早めにルールに従ってDisposeをキチット実行するよう修正しましょう
そうしないと後の修正で口から泡を吹く羽目になりますよって話ですw
725:デフォルトの名無しさん
15/08/25 13:33:31.83 yb6n8Wdy.net
死ね単芝
726:デフォルトの名無しさん
15/08/25 21:54:59.46 evM6WMfUm
>>710
要所要所をアンセーフにするとかngen使うとかすれば、かなり高速化出来る場合もある。
GCの問題があるから、本当に高速なリアルタイム処理は苦手だけど。
727:デフォルトの名無しさん
15/08/25 18:38:02.96 cRNFEmJ6.net
頭の中がVB6で止まっているのでしょう
728:デフォルトの名無しさん
15/08/25 18:40:19.98 cRNFEmJ6.net
VB6に対して失礼でした
729:デフォルトの名無しさん
15/08/25 21:16:04.98 11iB37Vu.net
>>698
FromHandleとか逆にハンドルを取得する系はIntPtrしか受け付けてくれないから、不要になった時にうまく解放しないといけないのが割と面倒
理解不足も含めて、メモリリークさせてるサンプルはよく見かける
あとは、メインフォームとか静的なイベントに参照にぎられてるとかもちゃんと意識しないと危険
730:デフォルトの名無しさん
15/08/25 22:00:39.66 FzRJlm7d.net
>>706,717
個人的にはDisposeを使う方がお行儀がいいのは認める。
ただ、C#の思想としては、「タイミングは規定できないが、解放はシステム側で保証するから、
面倒なことを考えずに具だけに集中しろ」ということなのだと思う。
だから、クラスをきっちり書けば出来そうな気もするし、それに向けて整備していっているはず。
とはいえ、俺はGUI(描画)に使っている程度で、そんなに本格的に使っていない。
だから命中していないだけで、言われているケースがありそうだというのはなんとなく感じる。
731:デフォルトの名無しさん
15/08/25 22:03:49.42 bwlYR2I5.net
>解放はシステム側で保証するから
メモリに関してだけはそのとおりですね
732:デフォルトの名無しさん
15/08/25 22:07:38.08 FzRJlm7d.net
>>707
アンセーフはこれ。見にくくなるが速くなる。
URLリンク(www.atmarkit.co.jp)
アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。
733:デフォルトの名無しさん
15/08/25 22:13:15.62 Y9IbSqw2.net
>>720
バカはリソース解放の必要性が理解できないので説明するだけ無駄
734:デフォルトの名無しさん
15/08/25 22:17:53.09 JrnVqkd7.net
>アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。
はぁ……
何言ってんのこいつ
C++から来てなんでも知ってるつもりのバカヤロウじゃん
735:デフォルトの名無しさん
15/08/25 22:41:07.48 bwlYR2I5.net
たぶん句読点の位置がおかしい
アンマネージドは、VC++でSEEとか使いたいときに、使う
が正解なのかしら
知らんが
736:デフォルトの名無しさん
15/08/25 22:41:34.05 bwlYR2I5.net
SEE → SSE
ごめんね
737:デフォルトの名無しさん
15/08/25 23:06:00.33 Wpti2W5K.net
>>721
これはアンマネージコードではなくアンセーフコード
アンセーフコードもマネージコードには違いない
ちなみにこのリンク先の例はunsafeだから速いのではなく、GetPixel/SetPixelのAPIがクソ遅いだけ
.NET2.0以降ならLockBitsがあるから一旦配列に丸ごとコピーして処理後に書き戻せばunsafeなんか使わなくても十分に速い
738:デフォルトの名無しさん
15/08/25 23:08:27.34 rPHzO56e.net
C++君って先月くらいからいるけど、いつ死ぬの?
739:デフォルトの名無しさん
15/08/25 23:29:15.56 uHUYRmLo.net
>>727 が死ねばいいんだよ、お前が一番屑だから
というかC++の上がり人はどう考えても一人じゃないだろ
見た感じ多くはゲーム系の人かな
740:デフォルトの名無しさん
15/08/25 23:35:33.69 uHUYRmLo.net
GetPixel/SetPixelが遅いというよりも、プロセス間通信が仕組み的に粒度が小さい処理に向いてないという感じかな
741:デフォルトの名無しさん
15/08/25 23:42:25.80 87HoKT0r.net
>>721
これはひでえな
LockBits使えば十分だろ
742:デフォルトの名無しさん
15/08/25 23:44:06.08 IDnYKic2.net
いつの時代の何を解説するためのサンプルかぐらい読めよ...
743:デフォルトの名無しさん
15/08/25 23:57:53.14 FzRJlm7d.net
これな。十分速いが、それでも倍違うけどね。
URLリンク(daisy64.blogspot.jp)
マネージドコードの例は不要だと思って省略した。
実際は#pragma unmanagedと#pragma managedでソース上で関数単位で切り替える。
744:デフォルトの名無しさん
15/08/26 00:16:40.27 LkVTB1JB.net
>>732
お前は何を言っているのか
そのリンク先の例はunsafeも含めて全部れっきとしたマネージコードだ
C++/CLIの#pragma unmanaged (これは本当にネイティブコードになる)とは全く違う
745:デフォルトの名無しさん
15/08/26 00:22:51.89 LkVTB1JB.net
>>732
よく見たらこのサンプル意味不明だな
r, g, bの値を使ってないから、最適化で消えてると思われる
実質的にはunsafe全く関係なくてMarshalCopyの時間を測ってるだけだね
746:731
15/08/26 02:05:24.84 N7Jdy9nG.net
731内、
× マネージドコード
○ アンマネージドコード
最適化がかかって全部抜けるのならGetPixelのコードが最速になる。
そうなってないんだから、抜けてはいない。
747:デフォルトの名無しさん
15/08/26 02:09:45.86 KP8nmGdk.net
メソッド呼び出しが、最適化で勝手に削除されるわけねーだろ
何の副作用が有るか、わかりゃしないのに
748:デフォルトの名無しさん
15/08/26 02:13:08.08 KP8nmGdk.net
分かっていると思うけど、
逆に言えば、メソッド呼び出しが無いのなら、
無駄な計算は最適化で削除されうるってことだぞ
749:デフォルトの名無しさん
15/08/26 08:04:18.96 0fCLXGvh.net
相変わらずレベルの低い話
750:デフォルトの名無しさん
15/08/26 08:27:19.17 pUWj3Ef8.net
ああ、思い出した
レベル連呼クンって前にもいたよね
751:デフォルトの名無しさん
15/08/26 08:29:29.18 gbsTgmpf.net
VB6スレと同じ人達が話してるのかい
752:デフォルトの名無しさん
15/08/26 08:59:00.05 DnnAf/8j.net
VB6スレなんてあったっけ
753:デフォルトの名無しさん
15/08/26 09:15:42.60 ElP7lUPJ.net
C#精神病院 Part88
754:デフォルトの名無しさん
15/08/26 11:18:16.79 dP9T8Aj9.net
>>719
そこまで崇高な理想を持って開発されてるとは思えないが
タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし
あと、マネージリソースだけじゃなくて、固定したGCHandleを持ってればGCのパフォーマンスへの影響もでかい
755:デフォルトの名無しさん
15/08/26 17:11:34.36 qrjLQtVJ.net
DataGridViewでユーザーが列幅を変更する場合列の境界をドラッグ
しますが、横スクロールバーが表示される程列数や個々の幅がある
場合に最後の列幅が変更できません。
どのようにマウスで変更するのでしょうか。
756:デフォルトの名無しさん
15/08/26 20:08:44.10 N7Jdy9nG.net
>>736,736
メソッドの部分は必ず実行され、その後の部分は最適化されているかも、ということで了解した。
LockBits/unsafeの比較は当てにならないね。
異常に速度差があるし、メソッド以外は全部抜けているかも。
757:デフォルトの名無しさん
15/08/26 20:16:21.46 N7Jdy9nG.net
>>743
> GCHandle 構造体
> [SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)]
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
なるほど、C#でもdllと接続するとUnmanagedCodeを意識しないと駄目なんだな。
> タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし
GC.Collectで起動は出来るみたいだぞ。
GC.SuppressFinalizeというやばそうなものもあるが、GCを止めることは出来ないね。
上記GCHandle例のようにブロックスコープで囲える範囲なら、GC.KeepAliveの方が軽そうだ。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
システムリソースと言っても所詮はメモリだし、
x64みたいにアドレス空間が広ければ、OSが動的確保すれば収まる話ではある。
だからいずれは気にしなくてよくなると思うよ。
(ただそのときでもDisposeしたほうがいいのは事実だが)
758:デフォルトの名無しさん
15/08/26 20:56:01.03 LkVTB1JB.net
>>746
ファイナライザでKeepAliveするのは意味がない
KeepAliveしたところで参照している他のオブジェクトのファイナライザが先に呼び出される可能性は防げないし、
ファイナライザの実行が終わる前にthisやその他参照しているオブジェクトがGCに回収されてしまうようなことは無いからね
759:デフォルトの名無しさん
15/08/26 21:39:21.41 pUWj3Ef8.net
>>746
もう来んなよ
760:デフォルトの名無しさん
15/08/27 08:03:55.06 Sd5tuK/H.net
お前が来るなよw
761:デフォルトの名無しさん
15/08/27 17:01:34.76 H9Zj5Bn1.net
internalなインターフェースでも、internalで実装出来ないのね。
なんでだろ。
明示的実装だとeventは自動実装してくれないのね。
ちょっと不便。
762:デフォルトの名無しさん
15/08/27 18:33:33.61 4ooez7+r.net
以下のようなことをしたいのですが、
メソッド名が重複するため上手くいきません。
ある変数のスーパークラスを上書くようなことはできないのでしょうか?
public abstract class A{
public abstract MyClass instance {get;}
}
public abstract class B<T> : A where T ; MyClass{
public T MyClass instance {get;}
}
763:デフォルトの名無しさん
15/08/27 18:40:58.45 3m4FcQPk.net
>>751
全部捨てろ
そんなことをしようとせずに済んだ世界を想像し
可能ならば来た道を戻って設計しなおすといい
764:デフォルトの名無しさん
15/08/27 18:44:49.92 CaKJnHAU.net
>>752だけ読むと凄くカッコイイ
765:デフォルトの名無しさん
15/08/27 18:45:04.56 0465F1pc.net
つーかMyClassとわかってるならTにする意味ないでしょ
766:デフォルトの名無しさん
15/08/27 19:34:06.84 M7ObSeqi.net
何がしたいんだかよくわからん
MyClass はなんだかの形で定義?
class B<T> は、もはや修正してエラーもなくせない
メソッド名が重複するという問題にたどり着けんw
767:デフォルトの名無しさん
15/08/27 21:05:28.92 4ooez7+r.net
TはMyClassの継承関係です。
AとかBじゃ分かりにくいですね。
public abstract class 田中{
public abstract 行動 instance {get;}
}
public abstract class 修行した田中<料理> : 田中 where T ; 行動 {
public 料理 instance {get;}
}
はじめからTつければいいじゃんとか思うかもしんないけど、
ジェネリックの共変性とかの問題があったりしてこんな実装になってます。
768:デフォルトの名無しさん
15/08/27 21:16:20.73 dljCNrWS.net
まず用語とやりたいことと質問を整理してくれる?
お前の示したコードにメソッドも変数もないし、空想上の文法を示して以下のようなこと、で伝わると思うの?
769:デフォルトの名無しさん
15/08/27 21:19:19.33 crZaWZ5K.net
いや…これはシンプルに無視案件だろ
こいつに関わってもなんの実りも無い
770:デフォルトの名無しさん
15/08/27 21:27:08.41 hme97lr4.net
>>756
public interface I田中{
行動 instance {get;}
}
public abstract class 修行した田中<料理> : I田中 where 料理 ; 行動 {
override 行動 I田中.instance { get { return this.instance; } }
public 料理 instance {get;}
}
何がしたいのかさっぱり分からんがこういうことか?
771:デフォルトの名無しさん
15/08/27 21:35:49.89 lF/OrL4X.net
山田かもしれん
772:デフォルトの名無しさん
15/08/27 21:46:52.77 4ooez7+r.net
public abstract 行動 strategy {get;} を
public override 料理 strategy {get;} に上書きしたいです。
まとめるとこうです。
1.オブジェクトの行動を戦略ポリモーフィズムで実現したい
2.継承クラスから戦略をジェネリックに呼び出したい
3.基底クラスの戦略呼び出しは継承クラスの戦略を呼び出す(abstract)
4.ジェネリックの共変性(.net3.5を利用)の問題で3を基底<T>およびメンバTとするのは、
その他のオブジェクトでキャストが膨大に発生するため、ジェネリックを持たない基底クラスを用意した
773:デフォルトの名無しさん
15/08/27 21:56:46.79 4ooez7+r.net
>>759
そういうことです!
たぶんできました!ありがとうございます
774:デフォルトの名無しさん
15/08/27 22:22:03.15 pO3unHFi.net
エスパー乙
775:デフォルトの名無しさん
15/08/27 23:39:03.06 sO/8ZJev.net
ようわからんから寝るわ
明日は定時にあがって彼女とデートだ
776:デフォルトの名無しさん
15/08/28 00:22:50.64 DVJpBS2x.net
ここ数年定時で上がった事無いや。
せめて残業30時間未満希望。
777:デフォルトの名無しさん
15/08/28 06:40:20.71 Sz74PPpb.net
とりあえず "料理 ; " の ';' は何だよって感じの所の修正をして欲しかったな
エラーが「メソッド名が重複」になるようなコードにしてから、問い合わせろよって感じ
わけわかんねーよw
778:デフォルトの名無しさん
15/08/28 06:55:57.02 Sz74PPpb.net
>>761
どうしてもそのようにしたければ、二段階に分けてやればいいんじゃねかな
インターフェイスが正解だが
public class 行動 { }
public abstract class A
{
public abstract 行動 instance { get; }
}
public abstract class BBase<T> : A where T : 行動
{
public override 行動 instance { get; }
}
public abstract class B<T> : BBase<T> where T : 行動
{
public new T instance { get; }
}
public class 料理 : 行動 { }
public class 所望の利用方法 : B<料理>
{
}
リフレクション関係の.Net Frameworkのソースを読んでいたらこういうのに出会ったよ
以前のバージョンで公開してしまったが、互換性を維持しつつ改めて中身隠して継承したいという感じの部分で
779:デフォルトの名無しさん
15/08/28 10:09:33.73 bO0aCwDR.net
>>767
それだと基底クラスにキャストされているときに呼ばれると基底のメソッドが呼ばれてしまうので今回の要件ではまずいです。
780:デフォルトの名無しさん
15/08/28 11:43:18.34 Sz74PPpb.net
>>768
基底クラスの変更はBBaseの方でやるの、二段階に分けるという事
781:デフォルトの名無しさん
15/08/28 15:45:12.11 O/DjZ5xn.net
BBase<T>からその上位のBのinstanceを呼べないのでまずいです。
782:デフォルトの名無しさん
15/08/28 15:48:24.22 Sz74PPpb.net
なんでそこが問題やねんwww
まぁ、互換性がうんぬんとかクリティアルな問題がある訳じゃなさそうだし interface 版でいいと思う
それでやれば良かろう
783:デフォルトの名無しさん
15/08/28 17:04:25.71 bO0aCwDR.net
>>771
784: そこがクリティカルだと何度も申し上げていますが。 解決したのでもういいです。
785:デフォルトの名無しさん
15/08/28 17:05:03.05 ZmO5l3R/.net
へーすごいじゃん
786:デフォルトの名無しさん
15/08/28 19:26:06.38 jkdHSky5.net
式木が全然わかんねぇ
動的に検索条件変えるのにつかいたいが
787:デフォルトの名無しさん
15/08/28 19:27:16.67 GiTthi+A.net
bbaseってのはババアのSE(システンエンジニア)のことですよね?
788:デフォルトの名無しさん
15/08/28 19:58:34.57 Lygpatgh.net
リソースの解放順序をコントロールするクラスを1回作ってしまえばDisposeの明示的呼び出しは完全に不要になるね
789:デフォルトの名無しさん
15/08/28 20:01:28.39 LXLt4eax.net
またDispose君か
フランスパン目に突き刺して死ね
790:デフォルトの名無しさん
15/08/28 20:05:55.57 CjkSJ7ex.net
>>774
アホなことは考えるな
普通にクエリビルダ使え
791:デフォルトの名無しさん
15/08/28 20:49:33.85 Sz74PPpb.net
>>776
いや、そこは普通にDispose使えよ、得体のしれないことするなw
792:デフォルトの名無しさん
15/08/28 20:55:43.87 ls1PRuKg.net
アンマネージドなリソースをIDisposableなオブジェクトでラップするのは基本だろ
え?
>756はそういうことを言いたいんじゃないの?
793:デフォルトの名無しさん
15/08/28 21:38:47.88 8lfDGDPP.net
Disposeを明示的に呼びだしている時点でおかしい
794:デフォルトの名無しさん
15/08/28 21:38:51.18 cLOGe/lp.net
>>776
意味がわからない
FormのDisposeはどうやったら不要になるの?
795:デフォルトの名無しさん
15/08/28 21:43:04.20 Lygpatgh.net
リソース全部にいちいちDispose呼ぶ派って最近C言語からC#に移ってきた人?
796:デフォルトの名無しさん
15/08/28 21:53:36.50 IPCW/fdR.net
using使ってもDisposeは呼びたくなる
797:デフォルトの名無しさん
15/08/28 21:55:20.42 ls1PRuKg.net
ツマンネ
798:デフォルトの名無しさん
15/08/28 22:19:38.38 jMAaefta.net
むしろc#やり込んで分かって来てからの方がIDispose使う頻度上がったけどな。
Disposeパターンちゃんと分かって無さそうだし、GC.SuppressFinalize()も使ったことないんだろうな。
799:デフォルトの名無しさん
15/08/28 22:21:47.32 La0rg2tq.net
Dispose漫談
800:デフォルトの名無しさん
15/08/28 22:36:10.25 k07is2fO.net
IDisposableを継承したオブジェクトを、
自分のクラスにコンポジションすると、
自分自身もIDisposableを実装する必要が出てきます
このように、どんどんと、IDisposableは伝染していきます
IDisposableの要らないクラスは、
メモリ以外のリソースを全く含まない、クラスだけです
終いには、IDisposableだらけになります
インテリジェントなクラスほど、IDisposableになります
これがGCの現実です
801:デフォルトの名無しさん
15/08/28 22:38:35.26 ls1PRuKg.net
それで?
802:デフォルトの名無しさん
15/08/28 22:41:22.64 La0rg2tq.net
へーすごいじゃん
803:デフォルトの名無しさん
15/09/02 11:45:01.96 QWgZ6B7l.net
荒れてる時に失礼します
2ヶ月くらいの初心者ですが
URLリンク(lab.tricorn.co.jp)
ここにStateとStrategyの違いが書いてますが、構造上の違いは無いため
見分けるにはクラス名で見分けるしかないと書かれていますが、そうなのですか?
別にこの記事を批判してるわけじゃなく、私自身StateとStrategyの違いが
イマイチよく分からないだけです
804:デフォルトの名無しさん
15/09/02 15:37:43.17 MYIvkVg2.net
以下を実装しようと思っていますがフォーム外の
マウスの座標をどうすれば補足し、メインフォーム上にレンダリングすれば
良いかわかりません。どの様に実装すればよいでしょうか?
1.フォームを起動する。
2.[座標調査]ボタンをクリック
3.マウスをフォームの外に移動したら
「1.」の中央に配置されたラベルにX座標・Y座標を表示する。
805:デフォルトの名無しさん
15/09/02 15:43:14.58 rdkBQaJ6.net
Cursor.Positionでスクリーン座標でのマウスカーソル位置が取れる。
タイマで定期的に取るようにすればいいんじゃない?
806:デフォルトの名無しさん
15/09/02 16:16:36.49 MYIvkVg2.net
>>793
サンキュー
807:デフォルトの名無しさん
15/09/02 21:43:47.52 +Iu6xlmH.net
Stateは離散的な状態によって、振る舞いを大きく変えるオブジェクトを実装するためのパターン
Strategyは動的に処理を切り替える為のパターンで、ぶっちゃけただの多態性の事だ
Strategyは基本的すぎてパターンと呼ぶほどのものではない
他の殆どのパターンでも漏れなくStrategyを使っている
808:デフォルトの名無しさん
15/09/02 22:24:38.83 2IVkMjjH.net
stateなんてstrategyを外か内のどっちから差し替えるぐらいの違いしかないし、デザインパターンとか偉そうに呼ぶもんでもない。
むしろ、switchで済むもんをstateパターン!とかドヤ顔でやるやつを生み出すクソパターンのひとつだわな。
809:デフォルトの名無しさん
15/09/02 23:16:57.02 OPX/Zhtw.net
デザパタって、
○○パターンで行こう、みたいなときもあれば
書いたあとに、あれ?これ△△パターンだな……みたいなこともあるし
参考程度でいいんでないかい?
810:デフォルトの名無しさん
15/09/02 23:21:25.69 ZlVQUP4Q.net
デザパタってのは本読んで賢くなったと勘違いしたバカが
ことあるごとにパターン名連呼するだけのもの
811:デフォルトの名無しさん
15/09/02 23:22:34.56 AIAHCYFs.net
>>798
2ch脳全開だなw
よくそういう被害妄想を恥ずかしげもなく開陳できるよなw
812:デフォルトの名無しさん
15/09/02 23:32:33.81 nxxrL6I9.net
しかし、>>798の解釈のほうが少しだけ健全
デザパタを知ったように語る連中にくらべての話なw
813:デフォルトの名無しさん
15/09/03 09:12:04.06 BI1c3JMp.net
デザインパターンは共通言語みたいなもんだろ。
814:デフォルトの名無しさん
15/09/03 09:31:49.44 j51sLT8G.net
俺の周りのやつにはデザインパターンが通じない
815:デフォルトの名無しさん
15/09/03 10:45:14.16 AQrjy02M.net
>>798
デザパタってそういうもんじゃないの
~パターンって言うだけでああ、あれねってなるから
いちいち詳細説明の手間(タイムコスト)が省ける
816:デフォルトの名無しさん
15/09/03 12:50:32.25 UAzBQfVm.net
まず、手間(タイムコスト)とか言い直す無駄な手間かけるのやめろよ
817:デフォルトの名無しさん
15/09/03 12:54:06.21 Z05hlE1P.net
>>804
小学生か。
俺は802じゃないけど、そういうのは無駄でも言い直しでもない。
曖昧さを減らすためのテクニックだ。
ヴァカじゃないのか
818:デフォルトの名無しさん
15/09/03 13:00:22.16 Mtr7VddV.net
そこまでのもんかよw
819:デフォルトの名無しさん
15/09/03 13:02:50.82 NQZSp0fr.net
命令口調君って馬鹿だな
820:デフォルトの名無しさん
15/09/03 13:03:00.42 bflO1psv.net
(言い争いも無駄なのでは?)
821:デフォルトの名無しさん
15/09/03 13:18:47.27 6M6obrOu.net
>>804
クスッときたw
なぜなら俺も同じ感想を抱いていたからw
822:デフォルトの名無しさん
15/09/03 15:37:10.76 dGS6eFW0.net
>>796
逆だろ
むしろ、stateパターンで書けるもんをswitchとかドヤ顔でやるやつを生み出さないためのパターンのひとつ。
823:デフォルトの名無しさん
15/09/03 15:43:23.59 eSbMz5iN.net
stateはあまり使うべきではないパターンの一つだろ
オブジェクトに変化する状態を持たせるのはなるべく避け、どうしても必要なところはなるべく明示的に、ってのが今風
824:デフォルトの名無しさん
15/09/03 16:18:18.81 Z05hlE1P.net
まあどっちにしろ馬鹿の一つ覚えの乱用は良くないね。
ケースバイケースで判断するしかない
825:デフォルトの名無しさん
15/09/03 20:51:50.87 AjZjPQkB.net
質問させてください。
フォームを透明にするとデスクトップが見えると思います。
さらにラベルを半透明にすればデスクトップが透けて見えると思います。
ですが、ラベルを半透明にしてもフォームの透過色になってしまいます。
これの解決策はないでしょうか。
826:デフォルトの名無しさん
15/09/03 20:53:39.88 50OgoD3Z.net
ステートはゲームとパーサー以外に使い道はないね
827:デフォルトの名無しさん
15/09/03 21:26:51.16 4OSMUinY.net
>>814
お前の狭い井戸の中の話はチラシの裏にでも書いとけ
828:デフォルトの名無しさん
15/09/03 21:30:09.14 Mtr7VddV.net
>>813
ふらっと行け
829:デフォルトの名無しさん
15/09/03 21:36:44.84 t0UOlUCH.net
とかくカタログ化のメリットをうたわれるが
それは理想でしかない
デザパタの理解の時点で不備が残るから
パターン名を出して語り合ってもチグハグなまま
断片的な理解で語って延々すれ違うのが関の山
830:デフォルトの名無しさん
15/09/03 21:37:48.99 AjZjPQkB.net
>>816
すみません、初心者なのですが、フラットとはなんでしょうか
831:デフォルトの名無しさん
15/09/03 21:59:03.17 AjZjPQkB.net
>>818 >>816
フラットがなにか分かりました、聴いてきます、ありがとうございます
832:デフォルトの名無しさん
15/09/03 22:30:08.90 oJAsYsjQ.net
>>811
これどういうこと?
むしろifとかswitch推奨ってこと?
833:デフォルトの名無しさん
15/09/03 22:35:31.33 4OSMUinY.net
>>820
まともなソフト組んだことのない奴の戯れ言なのでスルーでいい
834:デフォルトの名無しさん
15/09/03 22:59:38.02 UAzBQfVm.net
10個のケースで処理は単純と
2個のケースで処理が複雑の場合どちらもクラス化するとは限らないし、switchでも関数でもオブジェクトでも見通しがいいのを選べばいい。
なぜなら、テストがあれば容易に修正が可能だからだ。
835:デフォルトの名無しさん
15/09/03 23:07:40.59 8yoLLFnu.net
>>820
最近は関数型からの流れで、クラスはイミュターブルにするべきだという流派が勢いを増しつつある
その考えに従うなら、stateパターンだろうがifだろうが自分自身のstateを勝手に変更するようなクラスは好ましくなくて、
差し替えやすくするにしてもコンストラクタでStrategyを渡しなさい、となるわけ
それからStrategyに比べてStateはその親が持ってる内部情報に強く依存することが多いので、
差し替えのメリットはあまりなくてコードが読みにくくなるだけの場合が多かったりする
836:デフォルトの名無しさん
15/09/04 01:05:37.68 lzz57wGL.net
スイッチけ消せ派の二割ぐらいがコードの見やすさ以外のメリットを挙げられない日本のアイテー産業界の実情
837:デフォルトの名無しさん
15/09/04 09:18:55.15 nWrrDgsE.net
>822
テストは製品の品質を担保するためのものだろ
修正の容易さとは関係ない
838:デフォルトの名無しさん
15/09/04 12:00:23.91 UHAkjTxW.net
>>825
マジで言ってんのか?
839:デフォルトの名無しさん
15/09/04 12:21:37.40 jQreaVPT.net
通りすがりの俺も>>826と同じセリフを吐きたい
840:デフォルトの名無しさん
15/09/04 12:24:18.11 uljmVnmx.net
>>825
リファクタリングは名著だから一回くらい目を通しておいたほうがいいぞ
841:デフォルトの名無しさん
15/09/04 12:26:25.43 /OouKiwm.net
まあ低レベルなジャパニーズドカタとって自動テストを継続的に維持するのは不可能だからね
後々の修正以前に、新規開発を最期までグリーンを維持しながら完遂することすら奇跡
842:デフォルトの名無しさん
15/09/04 12:28:22.50 wAnp+SYa.net
旧石器時代レベルのマだな
843:デフォルトの名無しさん
15/09/04 12:29:33.09 wAnp+SYa.net
テストを検収通すためのエビデンスとしか捉えてないっていうね
844:デフォルトの名無しさん
15/09/05 00:34:41.72 AEZT9dHU.net
テストはあくまで修正の確認だろ
テストがあれば結果が保証される=安全な修正の場が提供される=修正がしやすい場が提供される
けれど、修正元のコードが容易に修正しやすいものかとは別問題でしょ
何だか、根本的に履き違えているみたいだな、俺が
勉強し直してきます。
顔真っ赤なんです。分かってください。
場違いなんでこれで最後にします
845:デフォルトの名無しさん
15/09/05 00:37:38.28 FwcsIAPo.net
>>832
動いてるものを弄ることの恐ろしさを知らないだろ
修正なんて結果の保証ができるかが全てと言っても過言ではない
846:デフォルトの名無しさん
15/09/05 00:45:48.20 AEZT9dHU.net
>833
そういってるんだけど
噛みつき方がおかしい
847:デフォルトの名無しさん
15/09/05 01:21:45.82 +/wEUIWT.net
テストケースが用意してあって、いくら修正しても結果が合わないコードとか遭遇してみたいわ
848:デフォルトの名無しさん
15/09/05 06:31:10.03 Jq+GEKLJ.net
>>803
タイムコスト削減どころか患者扱いされるパターンが一般的
スレリンク(tech板:133-142番)
849:デフォルトの名無しさん
15/09/05 07:44:13.00 FwcsIAPo.net
>>834
修正作業≒影響範囲と結果の確認作業
ということだよ
ソースコードの修正そのものは大した問題ではない
850:デフォルトの名無しさん
15/09/05 10:07:42.28 McuB2/kQ.net
>>832
修正って一言で言うからおかしくなる
1. 修正する箇所の決定
2. コードの修正
3. 修正箇所のテスト
4. リグレッションテスト
1. ~ 2. を修正って言えば >>825
1. ~ 4. なら >>822
が正しい
851:デフォルトの名無しさん
15/09/05 10:29:22.47 yNAOhLZf.net
そんな必死扱いて話続けるなよ
ショックだったのか?
852:デフォルトの名無しさん
15/09/05 11:28:54.82 McuB2/kQ.net
>>839
>>839
粘着してるのはお前だけ
853:デフォルトの名無しさん
15/09/05 11:40:46.30 nF0Xae6t.net
ITドカタには3,4が存在しないから同じ
問題なのは
5.リリース後に修正ミスが見つかるリスク
854:デフォルトの名無しさん
15/09/05 11:43:57.82 yNAOhLZf.net
そうかい
これ以上続けるならDisposeと同じように連投自演で荒らしてやる
分かったらおとなしくしてろ
855:デフォルトの名無しさん
15/09/05 11:49:32.74 yNAOhLZf.net
あるいはC#に関係があって、ふらっとでやるような話でない話をしろ
雑談がしたければ雑談スレかマ板に行け
856:デフォルトの名無しさん
15/09/05 12:04:12.51 d+nPX/+M.net
命令口調指摘厨
↓
857:デフォルトの名無しさん
15/09/05 12:05:53.42 9PP8hJsT.net
┃↑
┗┛
荒らしは去れ
はよ仕事さがせよ
858:デフォルトの名無しさん
15/09/05 12:14:46.00 ZNHlex0/.net
「命令口調君って馬鹿だな」さんは、そろそろこのスレ10年近い大ベテランだぞ。
昨日今日現れたようなぽっと出の若造と一緒にしていい存在ではない。
859:デフォルトの名無しさん
15/09/05 12:41:58.24 d+nPX/+M.net
んじゃ質問おねしゃっす
静的クラスと普通のクラスをstaticに持つのと、
どう使い分けしたらいいでしょうか。
べつにシングルトンにする必要はないオブジェクトですが、
プロセスではひとつしかインスタンス化しません。
860:デフォルトの名無しさん
15/09/05 12:47:44.60 +EPImSa2.net
質問をお願いします、だと?!
861:デフォルトの名無しさん
15/09/05 12:48:22.79 pfZ6OLhC.net
>>847
>普通のクラスをstaticに持つ
ってどういう意味?
862:デフォルトの名無しさん
15/09/05 12:49:23.73 dHzp+WDi.net
一般的には、アプリケーションのルートで普通にnewし、それを必要とするクラスにその都度渡すのが適切
全体で共有するからといってstaticでグローバル変数にしてしまうのは良くない
テストしにくくなるからね
863:デフォルトの名無しさん
15/09/05 13:35:50.94 d+nPX/+M.net
ご説ごもっとも
でも今回はstaticにします。
static class Hoge{}
or
class Hoget{}
...
public static Hoge hoge = new Hoge();
下の方が拡張性があるとかないですか
864:デフォルトの名無しさん
15/09/05 13:41:33.34 5uKQXugM.net
俺にはそれらが比較する物に見えない
865:デフォルトの名無しさん
15/09/05 14:08:16.36 trE2W9oi.net
>>851
毎回直接hogeにアクセスするなら拡張性はない
拡張性をもたせるなら、Hogeにインターフェイスを実装して、他のクラスはそのインターフェイスを通して利用するようにする
実際のHogeのインスタンスは外から渡す
866:デフォルトの名無しさん
15/09/05 15:14:06.63 OLenB+FK.net
849みたいな馬鹿はどうしようもない
クラスの持つ概念が何かを考えずに、
コンパイル通るかしか考えないんだろう
867:デフォルトの名無しさん
15/09/05 15:29:17.88 ygimYbNM.net
でもSingletonがあるとテストしにくいのは事実だよね
まぁきちんとインターフェースを切り出してモック作りゃいいだけなんだけどな
868:デフォルトの名無しさん
15/09/05 15:42:26.30 +/wEUIWT.net
static classの必要性を感じない。
コンストラクタをプライベートにすればいいだけだし。
869:デフォルトの名無しさん
15/09/05 15:53:29.93 MzCBpk1s.net
Javaのstaticクラスとごっちゃになりそう
870:デフォルトの名無しさん
15/09/05 17:53:50.96 trE2W9oi.net
>>854
849だけど、毎回newしろと言ってるんじゃないよ
Applicationオブジェクト(と寿命が一致するオブジェクト)のフィールドとして持つということ
871:デフォルトの名無しさん
15/09/05 18:10:54.10 5uKQXugM.net
DI!DI!
.NETのDIライブラリって何がデファクトなの
872:デフォルトの名無しさん
15/09/05 18:38:14.83 uKtK2YVi.net
拡張メソッドや小物の汎用メソッドはスタティックだな
873:デフォルトの名無しさん
15/09/05 19:12:43.32 LfnRuzOf.net
いまだにVS2010使ってるが何か問題ありますか?
874:デフォルトの名無しさん
15/09/05 19:36:56.63 Ozz2pk1l.net
それで困ってないなら問題ないんじゃ
875:デフォルトの名無しさん
15/09/05 19:40:50.40 unwmwqiG.net
>>861
.NET Framework 4.5使わないならいいんじゃね
876:デフォルトの名無しさん
15/09/06 09:57:58.21 4IVIRjvm.net
expressじゃなきゃいいんじゃない
877:デフォルトの名無しさん
15/09/07 18:59:07.66 8RjKVv09.net
URLリンク(dobon.net)
でフォントの一覧は取得出来たのですが、この中から等幅フォントだけを
取り出す方法を探しているのですが分かりません。
知っている人教えてください。
878:デフォルトの名無しさん
15/09/07 21:00:41.16 xgRymLq/.net
等幅フォントというカテゴリーが実在するかが問題だな
879:デフォルトの名無しさん
15/09/07 21:10:18.07 WzVfDTMU.net
Aとiの文字幅でも比較しろよ
880:デフォルトの名無しさん
15/09/07 21:14:00.57 mOIVmWnr.net
日本語のフォントフェイス名が「MS ゴシック」だったら等幅
この判定が最強
881:デフォルトの名無しさん
15/09/07 21:58:27.85 zUrSP80h.net
>>865
ググってみたが結構面倒臭そうだな...
URLリンク(social.msdn.microsoft.com)
882:デフォルトの名無しさん
15/09/08 12:09:21.14 HZZtDHiw.net
>>869
情報ありがとうございました。ここのやり方で出来ました。感謝です。
883:デフォルトの名無しさん
15/09/10 10:31:35.12 Zqb1tFho.net
linq.jsの質問したいんだが、いいかい??
jsスレよりLINQ好きはこっちのほうが多いと思うんで
884:デフォルトの名無しさん
15/09/10 10:34:40.84 OdK7pfyp.net
スルーされても涙をこらえられるなら、断ってんだし聞いてもいいんじゃね。
885:デフォルトの名無しさん
15/09/10 11:47:11.60 G800rjof.net
LINQスレでいいんじゃね?
886:デフォルトの名無しさん
15/09/10 12:09:30.83 Zqb1tFho.net
LINQスレあったのね
そっちに書いてきます
887:デフォルトの名無しさん
15/09/10 12:17:14.28 XXlgiA9F.net
jsならlodash使ったほうがいいよ
機能が豊富で利用者も多い
888:デフォルトの名無しさん
15/09/15 00:22:45.76 fYJZeKZK.net
文字列の暗号化を行うクラス名おしえてください
.NET Frameworkにあるやつでお願いします!
889:デフォルトの名無しさん
15/09/15 01:02:02.00 8nVq9fpM.net
System.Security.Cryptography.AESとかRSA
890:デフォルトの名無しさん
15/09/15 02:50:53.79 jPIqDLQl.net
charをチャーと発音すると
ダサいですか?
(´・ω・`)
891:デフォルトの名無しさん
15/09/15 02:55:10.80 8L2kzhog.net
外人マはキャレットって発音してた
getcharの発音はカッコよかった
892:デフォルトの名無しさん
15/09/15 07:08:29.36 gJJz7de7.net
キャレットだと意味が変わるような・・・
893:デフォルトの名無しさん
15/09/15 07:16:22.30 fovtyU1w.net
キャラクターの略じゃなかったのか?
894:デフォルトの名無しさん
15/09/15 07:37:34.11 c6kBSd9X.net
>>878
ギター弾く人だろ
895:デフォルトの名無しさん
15/09/15 11:12:05.00 XyyEatel.net
気絶するほど悩ましい
896:743
15/09/15 15:21:22.42 nRNQ5gNy.net
返答頂けないようなのでふらっとの方で聞いてみます。
897:デフォルトの名無しさん
15/09/16 00:01:51.90 Uf++h6JZ.net
シャアでしょ
898:デフォルトの名無しさん
15/09/16 10:40:14.99 7sbTeZHX.net
キャスバル兄さん!
899:デフォルトの名無しさん
15/09/16 12:49:48.36 ayKx8SBE.net
基底クラス(スーパークラス)の参照型に、派生クラス(サブクラス)を渡すことはできないのでしょうか
C++では出来ました
一から作るならこんな設計しませんが、C++で作られたライブラリをラップする際に困ります
900:デフォルトの名無しさん
15/09/16 13:09:05.15 R6jOKYfj.net
>>887
できるよ
901:デフォルトの名無しさん
15/09/16 13:18:16.97 gYRc3sT6.net
この手の質問は何か隠し事をしている気がするんだよ
902:デフォルトの名無しさん
15/09/16 13:21:42.04 807nK7Mg.net
というかよく質問理解できるな
参照型に渡すとか俺には意味不明だ
903:デフォルトの名無しさん
15/09/16 17:35:09.33 koLGUr+e.net
C++のコードを晒してみれば
904:デフォルトの名無しさん
15/09/16 19:16:26.11 +CviF6rc.net
単にout付きで互換の型渡せるかって程度の話じゃないの
それかC++だと値としてオブジェクト渡せるから、
わざわざ参照と付け加えてるかのどちらか
905:デフォルトの名無しさん
15/09/16 20:00:45.32 koLGUr+e.net
void M( ref Base b)
{
MessageBox.Show( b.ToString() );
b= new Base();
}
Base b= new Derived();
M( ref b); // OK
Derived d= = new Derived();
M( ref d ); // コンパイルエラー
こういうことかな?
906:デフォルトの名無しさん
15/09/16 21:03:54.81 gm0njNEv.net
いや、普通に
907:基底クラスのフィールドやプロバティーにサブクラスを突っ込めるかという質問でしょ C#のフィールドは、ヒープメモリーのアドレスが入っているポインタ(ちょっと違うが)だという意味ではC++で言う参照型でしょ
908:886
15/09/16 22:42:14.05 F1cbGVxL.net
分かりにくくてすみません。
こういうクラスがあって、
class Foo1
{
}
class Foo2 : Foo1
{
}
C++でこういうメソッドがあります
void hoge(Foo1 &foo1);
これをCLIでラップしたものが
void hoge(Foo1^% foo1);
C#から利用しようとすると
var foo1 = new Foo1();
var foo2 = new Foo2();
hoge(ref foo1); // OK
hoge(ref foo2); // コンパイルエラー
hogeメソッドでfoo1を書き換えないのであれば、CLIのラップをこうして、
void hoge(Foo1^ foo1);
C#ではこう
var foo2 = new Foo2();
hoge(foo2); // OK
しかし書き換えないという保証ができないと言われて……
909:デフォルトの名無しさん
15/09/16 22:47:50.03 koLGUr+e.net
(C++)
void hoge(Foo1 &foo1);
の相当は
(C#)
void hoge( Foo1 foo1 ){};
だにょ
foo1の参照そのものは上書きされないよ
メンバーはいじれるよ
910:デフォルトの名無しさん
15/09/16 22:53:24.86 gm0njNEv.net
Interface IFoo
{
}
class foo1:IFoo
{
}
class foo2:foo1
{
}
hoge(ref IFoo foo2) でどう?
911:デフォルトの名無しさん
15/09/16 23:04:03.46 FKycpPH3.net
>>896
C#やC++/CLIのハンドル渡し(C#ならFoo foo, C++/CLIならFoo^ foo)に相当するのはC++のFoo* fooだよ
912:デフォルトの名無しさん
15/09/17 00:42:11.48 PQCx+Vd2.net
テキストボックス1~テキストボックス100みたいなのを配列みたいに扱えますか?
913:デフォルトの名無しさん
15/09/17 00:47:54.38 pD0MAiOr.net
PanelやGroupBoxにまとめて入れてControlsでアクセスする
自分で手で配列に入れるのはやめろ
914:デフォルトの名無しさん
15/09/17 04:08:04.20 4HLEYCrX.net
ラーメンクラスを作る場合、
パラメータとメソッドは
どういった具合にしたらいいんですか?
(´・ω・`)
915:デフォルトの名無しさん
15/09/17 04:23:23.59 Q0AcoQbB.net
ラーメンクラスの目的によるとしか
916:デフォルトの名無しさん
15/09/17 04:42:43.98 cshgYIFM.net
3分待つ機能と食べる機能は全ラーメンクラスに継承しろ
917:デフォルトの名無しさん
15/09/17 06:29:30.95 mooKI9/d.net
addトッピングメソッドとトッピングパラメータ(List型?)は基底クラスに持つべき
918:デフォルトの名無しさん
15/09/17 06:53:55.88 WDJU3Zw5.net
>>901
bool Wait(int minit)
919:デフォルトの名無しさん
15/09/17 10:42:31.84 Z358njol.net
ラーメンは全てインスタントラーメンかカップラーメンである
というわけでもないでしょ
920:デフォルトの名無しさん
15/09/17 11:33:26.73 ptLmoXeB.net
ツマンネ
921:デフォルトの名無しさん
15/09/17 11:41:24.96 rrdPtXos.net
>>907
オモシロイヤツヲヒトツタノムヨ
922:デフォルトの名無しさん
15/09/17 20:52:11.24 Gg0L/PBZ.net
旧ADOにあったRecordset.GetStringは廃止されたの?
昔(.NET1.1?)はADO.NETにもあったはず…
923:デフォルトの名無しさん
15/09/17 22:35:12.65 W5SHLev9.net
Hogeデータプロバイダ名前空間の中
HogeDataReader.GetString()
924:デフォルトの名無しさん
15/09/17 22:44:44.40 PQCx+Vd2.net
>>899
これおしえてください!
925:デフォルトの名無しさん
15/09/17 23:10:36.06 CxP5vej7.net
一旦配列に入れてしまえば後は自由でしょ
926:デフォルトの名無しさん
15/09/17 23:36:24.55 4dvMz6Vq.net
>>910
たしかそれだったと思うけど、今のSqlDataReader.GetStringは、列番号必須で区切り文字指定のない全く別物…
>>912
Webページへの高速出力が目的なので、ループ出力より高速じゃないと意味ない…
そのかわり1.1の頃より速くなってるから、なんでもループ処理でOKよってことなのかな
当時は圧倒的に速度が違ったけど
927:デフォルトの名無しさん
15/09/17 23:37:32.60 4dvMz6Vq.net
>>912
ん?>>911へのレスかw
失礼しました
928:デフォルトの名無しさん
15/09/18 01:22:36.27 aVZSqO61.net
>>912
object型の配列に部品を格納する感じですか?
929:デフォルトの名無しさん
15/09/18 02:29:27.98 YsR93Rd4.net
c# コンポーネント 配列 でググりなさい
930:デフォルトの名無しさん
15/09/18 07:18:13.22 fS8raEaD.net
>>911
>>900で答え出てるだろ
プログラミングの基本的な指針として、地道な手作業は可能な限り避けるのがよい
931:デフォルトの名無しさん
15/09/18 13:12:04.38 aVZSqO61.net
>>916
>>917
ありがとうございます。
932:デフォルトの名無しさん
15/09/18 22:22:58.29 cJiNMIaZ.net
多次元配列をコピーするのって、一つずつforループでやるしかないのでしょうか?
933:デフォルトの名無しさん
15/09/18 22:28:49.66 fS8raEaD.net
Cloneするだけ
まあその前に初心者なら多次元配列は捨てた方がいい
934:デフォルトの名無しさん
15/09/19 00:27:37.44 ImfPowRm.net
>>919
LINQを使え!
935:デフォルトの名無しさん
15/09/19 01:27:07.29 2AI6YCMk.net
逆引き系の本を一冊買うとしたら、何かお勧めありますか?
主にUnityで使うつもりなのでVisualC#に偏っている必要は全くないのですが
936:デフォルトの名無しさん
15/09/19 03:14:00.13 Zufot1+5.net
そういうのはもう書籍の時代じゃとっくにないよ。
web検索禁止の職場(そんなのあるの?)ぐらいしか需要ないし。
937:デフォルトの名無しさん
15/09/19 05:23:44.41 2AI6YCMk.net
もしかして、Webで逆引き書籍に近いものがあるんですか?
938:デフォルトの名無しさん
15/09/19 06:36:09.44 nNq1xWLG.net
C# hogehogeする方法
でぐぐれば大抵はみつかるでしょ
939:デフォルトの名無しさん
15/09/19 18:39:56.56 ONkilyrE.net
同じ品質の情報をまとめて仕入れるには本が一番手っ取り早いだろ
940:デフォルトの名無しさん
15/09/20 02:02:40.73 rYu6JiJC.net
>>919
職場のバカがDeepCopyとかいうメソッドを作ったのでどんなバカなコード書いてるのかと覗いてみたら
シリアライズして逆シリアライズしていた。
このバカはきっと「俺天才?」とか思ってるんだろうと思った
941:デフォルトの名無しさん
15/09/20 04:57:39.45 GwThY85s.net
>>922
職場にVS2005時代の秀和システムの逆引き本があって
毎年新人がそれ参考にするんだよ。それどころか、読めと薦める奴すらいる。
それはゴミだ、捨てろと言っても誰も聞かない。
942:253
15/09/20 07:15:00.84 O6Xw3ijC.net
>>928
お前が捨てればいいし
そもそももっとまともな本買えばそんな本誰も見向きしなくなるだろ
まともな本があるかどうかは知らんけど
943:デフォルトの名無しさん
15/09/20 12:53:26.70 b8irudVx.net
>>919
ジャグ配列をコピーするプログラムをLINQで組んでみた
URLリンク(ideone.com)
a2をあらかじめnewしとかないといけないのが問題だけど
これもLINQに入れれればいいな
944:デフォルトの名無しさん
15/09/20 14:36:59.39 GwThY85s.net
>>929
共用図書として管理されてて、棚卸しがあるから勝手に捨てられん。
会社は本を買ってくれない。業務や自己研鑚に必要な本も自腹購入。
945:デフォルトの名無しさん
15/09/20 14:43:13.35 PY77Iv4D.net
>>927
何か問題あるの?
Webで探せばすぐ出てくるコードだが。
946:デフォルトの名無しさん
15/09/20 15:07:04.60 O6Xw3ijC.net
>>931
そんなアホ会社に勤めてる自分を恨めよ
947:デフォルトの名無しさん
15/09/20 15:13:53.07 atv7oNrq.net
やめてください
そういうのはマ板でやってください
948:デフォルトの名無しさん
15/09/21 17:32:41.08 Qf1YaYyL.net
そんなその逆引き本ってゴミなん?
949:デフォルトの名無しさん
15/09/21 18:56:36.66 isL5PIxi.net
ネット禁止の職場だと神
950:デフォルトの名無しさん
15/09/22 22:52:37.30 9Yiwc7mM.net
VS2005を使う必要があるなら構わないが
最新の環境で10年前のC#本は最早疫病神だろ。
951:デフォルトの名無しさん
15/09/22 23:34:32.61 yQAByzEz.net
またいつものそういう絵に描いたようなダメな奴の発想のご開陳ですか。
逆引き本の類はC#の本というよりBCLの本で、BCLはC#ほど変化があるとは思えない。
だからそのまま使える部分も多いと思うけど。
952:デフォルトの名無しさん
15/09/22 23:45:20.37 ukiPrkhN.net
思う思うってうるせえんだよ何一つ断定的ないカスが。
953:デフォルトの名無しさん
15/09/22 23:47:05.01 +2wZ1QC+.net
ダメなのは本ではなくコピペグラマ
そういう意味では本の方がコピペできない分だけマシ
954:デフォルトの名無しさん
15/09/23 00:43:49.47 JvX9Z5l/.net
うちの職場はコピペ指向が主流
955:デフォルトの名無しさん
15/09/23 00:59:08.66 hI1vJLTN.net
コピペで済ます奴ほどラムダ式やLINQやTaskを避ける謎習性
自分の見たことない、理解できない文法はコピペがためらわれるらしい
傍から見てて笑っちまうよ
956:デフォルトの名無しさん
15/09/23 01:02:59.07 DJdG/okP.net
>>942
コピペの理由が「今まで実績あるソースだから」だもんな
同じコード見る身にもなってみろと・・・
957:デフォルトの名無しさん
15/09/23 01:03:09.50 vQpke5kW.net
むしろコピペされたコードの大部分を理解出来ていないだろ
理解出来ないものをコピペするから始末に負えない
958:デフォルトの名無しさん
15/09/23 01:23:59.67 X+JzAFdp.net
最近はタイプセーフより、シリアライズ可能なようにするのが俺ん中でブーム。
判定は文字列や数字。
コピペも多くなるけどね。
オブジェクト思考と関数型の重み付けはセンスを問われるね
959:デフォルトの名無しさん
15/09/23 01:59:25.10 vuM6eIZV.net
プロジェクトの途中でいきなり妙な宗教に目覚めるのだけ止めてくれたらあとは何でもいい
960:デフォルトの名無しさん
15/09/23 09:13:51.73 kAhgYRFO.net
コメントでプログラムの内容の意図をしっかり書いてくれればコピペでも何でもいい
961:デフォルトの名無しさん
15/09/23 09:27:57.00 DOrhv1Zg.net
>>947
> コメントでプログラムの内容の意図をしっかり書いてくれれば
そんな奴はコピペなんてしない
962:デフォルトの名無しさん
15/09/23 12:28:14.16 brsC0ei6.net
テスト結果をエクセル方眼紙で図形とか多用して美しいレポートに仕上げてくる奴に限って
ソースはコピペまみれ
963:デフォルトの名無しさん
15/09/23 12:47:19.41 pVjwfoZv.net
それを言うなら、2chくんだりでクダ巻いてる奴なんか例外なく無能。
964:デフォルトの名無しさん
15/09/23 16:20:04.65 4xka67Z0.net
それは否定できない
965:デフォルトの名無しさん
15/09/23 16:27:06.58 xXat8bOk.net
コピペそのものの何が悪いかに言及できるやつはいない
966:デフォルトの名無しさん
15/09/23 16:45:48.88 4xka67Z0.net
何故その書き方になるのか理解しないでコピペされるのは嫌だよね
967:デフォルトの名無しさん
15/09/23 16:58:49.24 lW5FhXsG.net
嫌というか、コピペしたまんまでエラー処理とかもろくに組み込んでないコードを持ってこられても。
実際ネットに転がってるコードなんて目的の動作をさせることのみに焦点を絞ってるんだから。
挙げ句にコピー元がバグってるんだからボクは悪くないもん!とか言われた日には。
968:デフォルトの名無しさん
15/09/23 17:24:32.25 xkmM0J9H.net
レビューの時に答えられないコード持ってくんなチンカス
969:デフォルトの名無しさん
15/09/23 17:29:59.86 DOrhv1Zg.net
>>952
マジレスしとくと、
本来同じ機能を実現するルーチンが複数になることで不具合修正や機能追加時の変更漏れが発生しやすくなる
って言うのが一番でかいと思う
970:デフォルトの名無しさん
15/09/23 19:22:36.11 z8WDBc2F.net
それは自分のソース内のコピペであって
今話してるのは外からのコピペだと思うんだが
971:デフォルトの名無しさん
15/09/23 20:24:34.98 srG8yqao.net
サンプル改造して使うのはどこでもアタリマエにやる
問題は改造できんやつだ
972:デフォルトの名無しさん
15/09/23 20:37:36.98 Edj0jzP7.net
>>958
結局コピー元の動作を理解できていないという問題に行き着くんだわ
973:デフォルトの名無しさん
15/09/23 20:47:09.15 DAYusJ9Y.net
どうでもいい話だけど、コピペが問題になるのは、
(1) コピペ部分がブラックボックスとして成立してないか、または
(2) (そのコードを管理する人間にとって)ホワイトボックスでない場合
974:デフォルトの名無しさん
15/09/24 04:47:23.85 EdI1Xy7C.net
よくパスワード保存して次回から省略する機能ってあるじゃないですか
暗号化してconfigファイルに保存しようかと思ったんですが、
configファイルをコピーしちゃえばデコード後のパスワード知らなくても通っちゃうじゃないですか
普通どうするんでしょう?
975:デフォルトの名無しさん
15/09/24 05:22:56.13 CMBCqBI4.net
PCごとに固有になるようにする
976:960
15/09/24 06:20:27.73 EdI1Xy7C.net
>>962
PC固有の情報はないという噂ですが…
暗号化キーをMACアドレスにしておき、その事実を隠しておけば、
とりあえずまっとうな会社と認められるでしょうか?
977:デフォルトの名無しさん
15/09/24 07:45:02.78 jOCdVqmS.net
普通は、単純にそのユーザーしかアクセスできない場所に置く。あるいはそういう場所に置いた
秘密キーで暗号化する。
978:デフォルトの名無しさん
15/09/24 07:59:52.17 TiSlAdHm.net
まっとうではないと判断されるな
979:デフォルトの名無しさん
15/09/24 08:10:23.88 EdI1Xy7C.net
>>964
そのユーザーしかアクセスできないことを信用していいなら暗号化する必要もないのではないでしょうか?
980:デフォルトの名無しさん
15/09/24 08:20:40.51 QTVnOSJ6.net
自分が最初に何を言ったか覚えているのか?
981:デフォルトの名無しさん
15/09/24 09:08:56.95 P59Gpqf+.net
firefoxはオープンソースじゃなかったっけ
見てみればいい
982:デフォルトの名無しさん
15/09/24 09:21:57.08 hqSpqpAb.net
>>966
気づいたか。パスワードを保存するセキュアな方法は存在しないので全力で回避する事。
983:デフォルトの名無しさん
15/09/24 09:40:28.95 EdI1Xy7C.net
>>968
調べました
コピーされたらおしまいという事態を防ぐために、マスターパスワードという機能があるそうで、毎回入力が必要みたいです
コピーが心配なら毎回入力しろということですね
ということは自動パスワードの暗号化はあまり意味がないということになりますが、firefoxも一応暗号化してますね
ということで心配するのやめました
984:デフォルトの名無しさん
15/09/24 09:44:34.01 EdI1Xy7C.net
>>969
ローカルにある以上アタックも可能ですし、破られるかどうかは気にしてません
クレームが付かない常識的な仕様や方針を知りたかっただけです
firefoxの仕様見て、「保存してもいいけど保存したら危険です」のアナウンスでいいような気がしました
985:デフォルトの名無しさん
15/09/24 15:35:15.84 p27rUZR0.net
・・・あのな
安全のためにパスワードを入力するという方法を採るわけだ
それを省略すればイコール安全ではないとなぜわからない
986:デフォルトの名無しさん
15/09/24 16:28:03.06 9oqv3+gF.net
その安全性を何処まで保証すべきかってのとの天秤だよな。
中に何が入ってるかによるし、ライセンスキーとかの類いならキーの値段とユーザ数の天秤だろうし。
社用で使用するメールの閲覧パスワードだって一度入力して保存したまま覚えてないヤツなんてごまんといるだろうけど、
それが大きな問題になることなんてあんまりないし。
で、たいていの場合はそんなこと気にする価値がそのソフトにあるかと聞かれたら ? ってなるモノの方が多い。
PC 単位でのセキュリティでいいなら、その昔触ってたライセンス管理付きのソフトで、
HDD のシリアル番号+キーの種別を示すテキストをハッシュ化してそれを部分的に抜き出したモノなんてのを使ってたことがあった様な気がする。
保存先は無造作にソフトのインストールフォルダにファイル作ってたような。。
987:デフォルトの名無しさん
15/09/24 16:39:17.98 l6wjQdp1.net
ログインユーザーだけが読めるようにしとけばいいよ
暗号化はうっかり表示させた時、後ろで誰か見てたら困るべ
988:デフォルトの名無しさん
15/09/24 16:46:51.58 fjowUJxZ.net
>>974
パスワードの最大のメリットは、何かあった時「お前が悪い」で済ませられることにある
989:デフォルトの名無しさん
15/09/24 17:49:25.63 zDZwJSqO.net
>>971
普通にそれでいいと思う。
工夫すれば特定の環境下でのみデコード可能な暗号化なんてこともできるんだろうけど、
そのコストを正当化できる用途がどれだけあるのかなと。
990:デフォルトの名無しさん
15/09/24 18:03:00.11 hqSpqpAb.net
DPAPIでユーザーまたはPC固有の鍵で暗号出来るじゃん
991:デフォルトの名無しさん
15/09/24 22:09:03.96 InMIs/J4.net
なんだこの糞画質は
992:デフォルトの名無しさん
15/09/25 16:58:01.03 KJgftwp5.net
ここで聞くのがいいのかどうかわらないけど
EFのコードファーストでlocalDB作るにはどうしたらいいんだ?
既定では普通にSQLserverで作られてしまう
993:デフォルトの名無しさん
15/09/25 17:17:23.99 IwY+2yrf.net
connectionStrings 設定すりゃいいんじゃなかったかな
994:デフォルトの名無しさん
15/09/25 23:21:13.33 4d8u8vME.net
EFググるとSQL serverの情報ばっかりよな
oracle11gだとコードファーストできなかった
12cから対応してるらしいが
995:デフォルトの名無しさん
15/09/26 00:48:35.55 0uPNs2Ie.net
よく読んでないけどこれかな
URLリンク(www.oracle.com)
996:デフォルトの名無しさん
15/09/26 06:08:42.03 dJryEewA.net
980超えました
997:デフォルトの名無しさん
15/09/26 11:33:01.32 KGnBWXC1.net
次スレは>>971が立てる事になっている
998:デフォルトの名無しさん
15/09/26 15:18:03.90 lPgGeQyi.net
WebbrowserでPostするデータがUTF-8でURLエンコードされて送信されるのですが
これをSJISでURLエンコードする場合はどうすればいいのでしょうか?