[過去ログ] ふらっと C#,C♯,C#(初心者用) Part154 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
291
(3): (スップ Sd73-2DeC) 2022/03/22(火)21:41 ID:1zUmccnld(2/3) AAS
>>287
ref class C{
~C(){} // Destructor
!C(){} // Finalizer
};
のコンパイル結果が
// C# DLL
class C:IDisposable{
Dispose(); //Destructor???
~C();//Finalizer
}
であることをご存知でない?
292: (ワッチョイ 51d2-3X4l) 2022/03/22(火)21:46 ID:OaCGWLhd0(6/8) AAS
C#を欠陥言語呼ばわりするだけあってGCが何かすら知らないアホの子だったとさ。
ヤレヤレ ┐(´ー`)┌ マイッタネ
293: (ワッチョイ 8bbb-216p) 2022/03/22(火)21:51 ID:kAgwAO/L0(9/9) AAS
>>289
言語自体の実装は見たこと無いからサパーリ
せやから解説とかしてる人いないのかなって
294
(1): (ワッチョイ 2979-zSlE) 2022/03/22(火)21:52 ID:kPYOUkgu0(2/2) AAS
>>283
されねーんじゃねーか?
俺はあふれるまで動かないって言ってるじゃん

msdnより

ガベージ コレクションの条件
ガベージ コレクションは、次のいずれかの条件に当てはまる場合に発生します。

システムの物理メモリが少ない場合。 OS からのメモリ不足通知またはホストによって示されたメモリ不足のいずれかによって検出されます。

マネージド ヒープで割り当てられたオブジェクトによって使用されているメモリが、許容されるしきい値を超える場合。 このしきい値は、プロセスの進行に合わせて絶えず調整されます。

GC.Collect メソッドが呼び出されます。 ほとんどの場合、ガベージ コレクターは継続して実行されるため、このメソッドを呼び出す必要はありません。 このメソッドは、主に特別な状況やテストで使用されます。
295: (ワッチョイ 8bcf-noGs) 2022/03/22(火)21:53 ID:0A7XAa2y0(2/2) AAS
>>291
スコープを外れたときに自動的にDispose()が呼ばれるから問題ないってことなんだが。
296: (スップ Sd73-2DeC) 2022/03/22(火)22:22 ID:1zUmccnld(3/3) AAS
>>288
お前はメモリとかリソースの管理を他の言語でどうしてるかもっと勉強するべきだ

C/C++がユーザーに全部丸投げしてるのがいい加減辛いので言語側が管理すればいいんじゃね?ってのがGC。
GCの方式で主流なのは参照カウント方式とマークアンドスイープ方式。
参照カウント方式は循環参照(this._obj=this)があると回収されないから、
C#多少大きめのコストを支払ってでもマークアンドスイープ方式にした。

リソース解放のタイミングをコントロールしたけりゃIDisposable使え
解放漏れの保険でファイナライザ使え
外部リンク[html]:ufcpp.net

C#1.0のリリースが2002/02だから当時はそれでも充分だったんだろう
297: (テテンテンテン MMeb-NT4g) 2022/03/22(火)22:39 ID:Ky9cYioTM(2/5) AAS
そもそもC#は「デストラクタなぞ使うべきではない」っていう思想だし
それゆえにリソースの解放はデストラクタではなくDispose()で行う
(万一Dispose()を呼び忘れた場合に備えて>>291の実装でデストラクタで救済するけど、これも
パフォーマンス上好ましくないんでDispose(bool disposing)みたいなDisposeパターンの書き方で処理を最小化する)
って方針で首尾一貫してるんだけどさあ
その方針にケチつけてデストラクタがクソだのIDispose確認がメンドクサイだの言ってる人たちのほうがおかしいだけなんだよ

>>273
「話の本質わかってなくて草生える」
とか書いてるけどまさにそのとおり
298: (テテンテンテン MMeb-NT4g) 2022/03/22(火)22:49 ID:Ky9cYioTM(3/5) AAS
もひとつ気になってたんだけど、Dispose()呼び出しの必要性をいちいち確認して書くのが大変っていうけどホントかよ?

マネージドリソースを扱うにしたって、ローカル変数ならusingで書けばDisposeいらないよね?
最近のC#のバージョンなら中括弧で囲う必要すらなくなったよ?
クラス内のインスタンス変数だとしてもさあ、
DIで初期化するフィールドならDIコンテナに任せればDispose()呼ばなくていい
自前で生成初期化するフィールドだとしてもその個数もたかが知れてるしDisposeの要否も明快に分かるでしょ

それとも、自分で書いてるクラスの中がごちゃごちゃでDisposeが必要な変数がどれか把握しきれないってこと?
そんなクソみたいなゴミ溜めクラスしか書いてないのだとすれば、言語仕様じゃなくてクラス設計/実装能力の問題だと思うんだよね
299: (テテンテンテン MMeb-NT4g) 2022/03/22(火)22:56 ID:Ky9cYioTM(4/5) AAS
ごめん嘘書いた
>>291の実装はC++/CLIの話だったのか(ごめんC++/CLIはやったことがないので判らない)
Disposeパターンのデストラクタと似たようなものだと思い込んで混同しちゃってた
300: (ワッチョイ 51d2-3X4l) 2022/03/22(火)22:56 ID:OaCGWLhd0(7/8) AAS
> そもそもC#は「デストラクタなぞ使うべきではない」っていう思想だし
聞いたことねーなw
デストラクタは非同期ですってだけだ。同期したいならdispose使えという単純な話でしかない。
301: (テテンテンテン MMeb-NT4g) 2022/03/22(火)23:25 ID:Ky9cYioTM(5/5) AAS
あれどっかに書かれてたと思ったんだが・・・と思って調べたら
外部リンク:docs.microsoft.com
「高額な外部リソースを使用している場合」という限定で「明示的に解放する手段を用意することが推奨されます」
とはあったけど、デストラクタなど使うべきではないとまでは書かれてなかった
たしかにちょっと踏み込みすぎたか

てか「デストラクター」じゃなくて「ファイナライザー」って呼ぶように変わったのね・・・いつから?
そのわりに
外部リンク:docs.microsoft.com
では「デストラクター」のままだったりしてるけど
302
(1): (ワッチョイ 51d2-3X4l) 2022/03/22(火)23:40 ID:OaCGWLhd0(8/8) AAS
元々finalizeはCLR側の用語でデストラクタはC#側の用語。
MSのゆとり化が進んで馬鹿すぎて区別できなくなったんだよ。
303
(1): (ワッチョイ 112f-kNuw) 2022/03/22(火)23:47 ID:3UvLvdTM0(1) AAS
デストラクタを実装したクラスはガベコレの効率が落ちる(世代があがる)からなるべく使うなって話だったはず
304: (テテンテンテン MMeb-NT4g) 2022/03/23(水)00:14 ID:fh4EIdzSM(1) AAS
>>302 >>303 の書き込みをヒントに検索したら
外部リンク[html]:ufcpp.net
このページにたどり着いて
デストラクタ→ファイナライザに呼び名が変わる理由もデストラクタのコストが極大なことも分かった
GC.SuppressFinalize()っていままで意味が分からないまま機械的に書いてたけど大事だったのね
いろいろ賢くなれた、ありがとう
305: (ワッチョイ 8b63-whB1) 2022/03/23(水)06:24 ID:XsByKBbP0(1) AAS
ならなくていいから直近50レス以内で俺以外に書き込んでるやつは直ちに全員頭かち割って中央線の始発に飛び込んで死ね
306: (ブーイモ MMeb-n2Eo) 2022/03/23(水)06:36 ID:Br4OtuZoM(1) AAS
長文ゲェジ共空気読めよ
(ユーザーが)欠陥言語
確かに間違ってねーな
307: (ブーイモ MM4d-NnL5) 2022/03/23(水)23:47 ID:blfYR8q/M(1) AAS
デストラーデがどうしたって?
308: (ワッチョイ 1302-dhUW) 2022/03/24(木)04:45 ID:AIr8SSYM0(1) AAS
ゼントラーディがキュンキュン☆
309
(2): (ワッチョイ 9e68-VQaK) 2022/03/27(日)19:21 ID:ThH+K+970(1/2) AAS
float,double型について質問です。基本的に精度のたかいdouble型オンリーで良いと思います。
double型だけじゃなくfloat型が混ざっているソースをみるのですがそれは何故でしょうか?
310
(2): (ワッチョイ 5e7b-+Ivz) 2022/03/27(日)19:25 ID:p42Vgj/c0(1) AAS
>>309
C#に限った話じゃないがdoubleの方がメモリを多く使って計算速度も遅くなるから
311: (ワッチョイ 9e68-VQaK) 2022/03/27(日)19:30 ID:ThH+K+970(2/2) AAS
>>310
ありがとうございます。
リストのときにdoubleじゃなくfloatがよく使われてたのはそれが理由だったんですね。
312: (ワッチョイ 5ecf-+Ivz) 2022/03/27(日)20:53 ID:rqiHHq3k0(1) AAS
floatとdoubleの混用なんてそんな傾向が見いだせるほど頻繁に使われているとは思えんが。
たまたま見たそのコードではそういう使い方をしていたに過ぎないんでは。
313: (ワッチョイ 3179-yByv) 2022/03/27(日)22:06 ID:XoV4gFeA0(1) AAS
昔のコードをまだ使っててfloatのとこがあるって理由じゃねーかな?
314: (ワッチョイ b1d2-JyYd) 2022/03/27(日)22:32 ID:K7MWSPEs0(1) AAS
C++では機械学習と3Dレンダリングでの並列化を目的にfloat16_tとかいう概念が生産されたりしてるからfloat自体は過去の遺物ってほどでもない

C#だと実行速度を気にするよりも開発を楽にすることを重視することが多いからdoubleオンリーでいいのは確か
315: (ワッチョイ 6502-QEpm) 2022/03/27(日)23:11 ID:HQutMm3I0(1) AAS
専用命令とかでベクトル演算するなら、floatの方が同時に演算出来る数が多いから単純に速くなる
316: (ワッチョイ a901-oYu3) 2022/03/28(月)01:08 ID:TOp/Y7AF0(1) AAS
まぁ精度や速度がクリティカルでなければ悩む時間が無駄だしdoubleでいいでしょ
317
(1): (オッペケ Sr79-qy3V) 2022/03/28(月)09:26 ID:1rap9yocr(1) AAS
>>309
主に組み込みのシステムと通信していたりする場合、相手が float のサイズを要求することもある。

>>310
メモリは多く使うが、今どきはハードウェアで double を計算するはずなんで、遅いはダウト。
むしろfloat の方が double への変換の分遅くなるまである。
318
(1): (ワッチョイ 92ad-Xzp3) 2022/03/28(月)09:29 ID:MxvDEKd20(1) AAS
いまだにダウトとか言う香具師っているんだな
ダウトとか今日日聞かねえわ
319: (ワッチョイ ad49-+/qe) 2022/03/28(月)11:03 ID:9Kb03WZY0(1/2) AAS
というかそれぞれの場合過ぎるやろ

「基本doubleでいい」には自分は同意するけど、
別にfloat使ってたからって誤差が問題ないなら何も言わない
わざわざ変換を何度もして計算してたら気にするけども、そこまで求められる現場もそう多くないのでは
320: (ワッチョイ debb-a3iW) 2022/03/28(月)11:19 ID:8MPYL/o90(1/3) AAS
>>318
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< オマエモナー
  (    )  \_____
  | | |
  (__)_)
1-
あと 682 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.018s