ふらっと C#,C♯,C#(初心者用) Part146

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9f0b-Fgt1)
垢版 |
2019/12/11(水) 22:12:11.28ID:d09CciDz0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part145
https://mevius.5ch.net/test/read.cgi/tech/1570446977/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/01/06(月) 13:04:51.24ID:78RinjQr0
>https://docs.microsoft.com/en-us/dotnet/api/system.environment.exit?view=netframework-4.8
↑ここ読んでも分からないの?
ピンポイントで教えてもらってるのに
2020/01/06(月) 13:17:35.30ID:jysEDvVa0
すでにコードがあるならコピペするだけじゃね?
ライセンスは知らん
2020/01/06(月) 13:54:30.86ID:vrofCXbf0
>>269
誤りがあったので訂正。
戻り値そのものでなく、戻り値がエラーを示した場合に参照するerrnoの値(エラー番号)だな。
2020/01/06(月) 15:54:50.90ID:i8hCm9on0
>>269
>>246
2020/01/06(月) 15:57:32.58ID:i8hCm9on0
>>270
>>261
2020/01/06(月) 16:03:27.39ID:codN4GMx0
>>277
は?
2020/01/06(月) 16:16:51.68ID:i8hCm9on0
>>278
>>277
がどうしたの?
2020/01/06(月) 16:25:16.18ID:codN4GMx0
ごめんキチガイに触ってしまった
2020/01/06(月) 17:00:25.20ID:/c/Em2OW0
>>272
APIをラップしたクラスを作ることをお勧めする

自分でFormから作ってもいいけど文字列に合わせてウィンドウサイズを調整したり
パラメータに合わせてアイコンとかボタンを作ったりする方が面倒だと思うよ
2020/01/06(月) 17:11:39.14ID:D3635f2eM
>>272
そんなの気にしてたの最初の頃だけだったな〜
自前でフォーム作ってもアイコンとかほぼ互換にするには手間かかる
APIでも大して変わらんのでは

他でも使い回すなら手間かかるかではなく、使い勝手がいいように組める方優先
283デフォルトの名無しさん (ワッチョイ 42ad-f3Fz)
垢版 |
2020/01/06(月) 18:34:31.97ID:HrPzlOWn0
おそらくエラー定義に拘ってる人は
元々自分で定義したらC使いの上司に
「EXIT_SUCEESSとかあるだろが二重定義するなゴラァ!」
とレビューで怒られて
「自分で定義してね♡」って書いてある公式ドキュメントが欲しいんだと思う
上司を納得させられる
2020/01/06(月) 18:39:19.67ID:kN/rUhZhd
そういう話だったのになぜか途中からどこで定義するのか問題にすり替えた
どこで定義されていようが最終的には同じなのに
2020/01/06(月) 18:58:11.81ID:fXTekjlj0
>>272
WH_CBTをグローバルフックして表示位置を変更だな
2020/01/06(月) 19:01:20.67ID:codN4GMx0
>>283
>>273
287デフォルトの名無しさん (アウアウウー Saa5-CnQr)
垢版 |
2020/01/06(月) 19:09:21.84ID:vUR1r/Pua
>>272
自分なら自作するというかしてました。
標準のMessageBoxは使い辛いところが多いので。

(1) モーダルじゃない表示も可能
(2) カウントダウンして自動的に消える
(3) 背景だけ半透明表示可能

ついでにこんな機能付きのを作ったらどうでしょうか。
2020/01/06(月) 19:12:29.35ID:i8hCm9on0
>>284
だから、処理系で定義されてるのとローカルで定義されてるのじゃ根本的に違うよ
ローカルで定義してて変更したらソースコードのリビジョンが変わる
処理系の変更だけならビルド番号が変わるだけ
2020/01/06(月) 19:19:01.72ID:NtfTHL6y0
たかが終了コードの何を想定してるの?
2020/01/06(月) 19:38:09.46ID:k52Bb7eZ0
わかった、話をまとめよう

Q. 定義済みのリターンコード無いの?
A. 無い

では次の方どぞ〜
291デフォルトの名無しさん (ワッチョイ 42ad-f3Fz)
垢版 |
2020/01/06(月) 19:43:24.53ID:HrPzlOWn0
>>286
システムエラーコードとアプリケーションエラーコードがごっちゃに書いてあるのが混乱の元な気がしてきた

"In your application, you can define your own error codes in an enumeration, and return the appropriate error code based on the scenario"
canが弱く見えるのでは
「C#はヘッダファイルとかないから各自自分で定義するように!」くらいあると

そっから飛べる先に
https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
とかがあってさも定数があるかのように見えるのも混乱のもとかと

まあ"use a non-zero number to indicate an error"と書くなら最低ゼロくらいは定義しといてくれというのはわからんでもない
2020/01/06(月) 19:43:37.98ID:codN4GMx0
>>288
処理系で定義?????
2020/01/06(月) 19:44:51.56ID:codN4GMx0
>>291
別に定義しなくてもいいからcanなんでしょ
2020/01/06(月) 20:48:06.04ID:2EPFHDaI0
コンソールはスレッドセーフなのため?
マルチスレッドで文字出す
そしてもエラーがおきないか?安全か?
2020/01/06(月) 20:52:31.08ID:fXTekjlj0
>>294
いけぬま?
2020/01/06(月) 21:01:18.24ID:3fXeZgESr
処理系で想像してる粒度が違う気がするけど
.NET Frameworkとしては定義されてるものは無いで終わりだろ
2020/01/06(月) 21:31:26.23ID:78RinjQr0
>>291
その混乱は99.9%読み手の問題
2020/01/06(月) 22:48:28.16ID:mEVq710ia
お前らC#でWebサーバー建てたことありますか?
変な案件やらされそうで新年早々ウツ
2020/01/06(月) 22:51:30.20ID:z7GoHnb80
>>298
さすがにやったことないな
ググッたら前例はあった
https://www.c-sharpcorner.com/article/creating-your-own-web-server-using-C-Sharp/
2020/01/06(月) 22:54:19.72ID:codN4GMx0
>>298
Kestrelじゃなくて?
2020/01/06(月) 23:07:18.60ID:D2EGtjEk0
任意に呼び出せる100個程度の文字列定数を作りたい時って地道に宣言するしかないよね?
enumは使えないしDictionaryはヌルポこわいし

>>298
IISとかではなくて?
302デフォルトの名無しさん (ワッチョイ 7197-IH4P)
垢版 |
2020/01/06(月) 23:14:02.24ID:v3NiRowX0
>>301
地道に宣言するにしても、Dictionaryに地道に値を入れていく以外に簡単に生成できる方法がある
(テキストから読み込むとか、keyとvalueが同一でよい)のなら、一旦Dictionaryを作って
そこからC#のコードを文字列処理で生成してソースコードにコピペとかすると楽だよ。
C#コードの生成はもちろんC#以外の言語でもなんでもいいから慣れてる言語でやればいいし。
2020/01/06(月) 23:14:03.88ID:YSZbxSNB0
>>301
日本語の意味が取れないからどういうのを想定してるか具体例を書いてくれ
2020/01/06(月) 23:22:52.50ID:78RinjQr0
constでコンパイル時に解決したいというのでなければリソースファイルを使う
2020/01/06(月) 23:58:53.91ID:jMeFAWx00
どうせ戻り値は、4バイト整数だろ

signed int, -2,147,483,648 〜 2,147,483,647
unsigned int, 0 〜 4,294,967,295

システムが、0 〜 1,073,741,823
カスタムが、1,073,741,824 〜 2,147,483,647
の範囲を使うとして、

ひとまずカスタムは、1,073,742,000 〜 1,610,612,000 の範囲を使っておけばよい
2020/01/07(火) 00:06:26.34ID:W22n+t+k0
処理系が正確に何指してるか不明ではあるが.NETのバージョンとかコンパイラのバージョンだったとして…
それ更新したら普通バージョン上げないの?
ソースコード変わってないからビルド番号しか上げない、みたいな運用聞いたこと無いけど…
乗っかってる大元を変えるって結構大きな変更だからコードの変更が一切不要でも念の為リビジョンなりバージョンなり上げない?
2020/01/07(火) 08:52:49.60ID:xOWyMMFH0
htmlファイルをディスク上に作らずに、こちらのプログラム上で仮想生成したhtmlをWindows規定のブラウザで開かせる方法ってないでしょうか?
ウインドウメッセージなどでデータを送りつける等の方法があれば良いのですが
2020/01/07(火) 09:00:28.70ID:JXhmELVL0
詐欺請求マルウェアかよw
2020/01/07(火) 10:01:00.59ID:xOWyMMFH0
すみません、解決しました
ブラウザの対応次第なものの一般的なブラウザであればdata Urlで簡単に実現できました
310デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/07(火) 16:12:15.29ID:2Dq0zKSWF
おまいら printf の戻り値はちゃんと毎回確認するんだぞ判ったか
311デフォルトの名無しさん (ワッチョイ 9901-8/Ff)
垢版 |
2020/01/07(火) 17:16:35.91ID:PuPIfAOU0
お断りします。
2020/01/07(火) 17:27:42.26ID:Tv0SPXaP0
Excelによる計算をマスターとした場合、
C#で浮動小数点の誤差まで再現するには、どうしたら良いのでしょうか?
floatやdoubleやdecimalをそのまま使うだけでは、完全一致はしないですよね?
2020/01/07(火) 17:39:13.63ID:wDqVPTN90
>>312
decimalは誤差がないが…
とりあえずそれはExcelの計算方法の再現であってC#の話題とは別
2020/01/07(火) 17:51:56.04ID:zRb5T0D/r
そもそものそのエクセルの計算が税法上問題なかったり物理学上の誤差などを
しっかり配慮された計算なのか?とう疑問がある
2020/01/07(火) 18:25:35.96ID:Tv0SPXaP0
>>313
はい、Excelの計算誤差も含めてC#で再現したいのです
Excel固有の関数の再現では無く、除算乗算程度です

>>314
Excelは簡単な計算でも誤差が出る時があるのは理解していますが、それでもExceによる計算結果lを「神様」として完全一致させるのが理想です
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result
https://answers.microsoft.com/ja-jp/office/forum/office_2013_release-excel/excel%E3%81%AE%E5%8D%98%E7%B4%94%E3%81%AA%E8%A8%88/e5421c34-8053-4132-a0a6-14729e505376
2020/01/07(火) 18:30:52.77ID:RhWBTAz60
内部でexcel操作するライブラリを使って実際にexcelに計算させてその結果をもらう
って方式じゃだめかな?
何にせよ絶対関わりたくない要求仕様だなw
2020/01/07(火) 18:36:18.00ID:sMehhi+20
>>312
仕様を理解してエミュレートする
https://docs.microsoft.com/en-us/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result
https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

無駄な努力
2020/01/07(火) 18:59:31.78ID:Tv0SPXaP0
>>316
ExcelライブラリやEEPlusが使えれば良かったのですが、今回はライセンスの関係もあってExcelが無いPCで動作させる必要があるので、Excelを裏で動かす様なことは出来ないのです。

>>317
15桁処理なので、やるとしたら計算毎に桁数をカウントするとかになりそうですかね・・・。
C#で普通に計算した方が精度も出るので、すっごく無駄なことをやることになりますね。
2020/01/07(火) 19:04:39.58ID:EurMb9rX0
一体どんなアホが集まればそんなふざけた案件が出来上がるんだ…
2020/01/07(火) 19:18:53.11ID:OMl1FHHvd
>>318
EPPlusやClosedXMLなら、Excelがマシンにインストールされている必要はないやろ
321デフォルトの名無しさん (アウアウウー Saa5-pIXJ)
垢版 |
2020/01/07(火) 20:18:05.17ID:cpbbTuYka
これはC#じゃなくて、CやC++に言えることかもしれませんが、
List<int> test=new List<int>();
for(int i=0; i<100000000; i++)
test.Add(123456789);
このような膨大な要素のリストを作った場合でも、
プログラムが動くのは、変数はメモリではなくHDD領域に格納されているからでしょうか?
メモリに全て格納すれば、メモリ不足でプログラムは動きませんよね?
322デフォルトの名無しさん (アウアウウー Saa5-CnQr)
垢版 |
2020/01/07(火) 20:25:58.17ID:IHn/p+8Ca
>>315
8086の時代じゃあるまいし、30年前だって実数計算なんかHW処理だよw
つまり、CPUさえ同一なら(変なことをやってないかぎり)VBだろうがExcelだろうがC#だろうが計算結果は同じになるはず。

現に>>315の計算C#でやっても同じ答えが出るよ
2020/01/07(火) 20:26:35.52ID:YKIaA9us0
>>321
仮想メモリでググってみな
2020/01/07(火) 20:27:46.08ID:+2sDQ8Ye0
今どき400MBぐらい物理メモリにのっけてもそこまでって感じだけど
仮想メモリで調べよう
2020/01/07(火) 20:28:50.54ID:23MsATD60
>>321
10000000/1024/1024=95.36
95.36*4=381MB
まぁ今のPCスペックじゃ余裕じゃね。

ある時、テンプレートで消費されるメモリの方が格納データより多くなる
どこに限界があるか自分で計ってみなされ
2020/01/07(火) 20:33:16.30ID:YKIaA9us0
>>322
C++でアプリ作ったときは浮動小数点制御ワードの設定次第で、演算の精度や丸め方向が変わって演算結果に差異が出たけど、C#やexcelではどうなんだろう? 同じ条件で決めうちなのかな?
327デフォルトの名無しさん (ワッチョイ 5f9b-Eg5K)
垢版 |
2020/01/08(水) 16:03:59.03ID:Sre2vN3k0
google spreadsheet とか ms office online とか 360 でも再現されるのかな
2020/01/10(金) 02:04:40.36ID:aPGnNlsf0
非同期メソッド(async/await)の必要性について教えてください。

Task.RunやTask.Factory.StartNewメソッドを使えば、タスクを別スレッドで生成・実行できると思います。
またこれらのメソッドによる戻り値を呼び出し側で使いたければ、Task<TResult>クラスのResultプロパティを利用してやればよいと思います。

となると、上記のメソッドと比べ、非同期メソッド(async/await)の必要性や有用性って何なんでしょうか?
329デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/10(金) 03:15:36.39ID:doMNh/YUa
>>328
この記事読めば最初の10分でわかるよ
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/app/masterasync_index.html
分からなかったらここで人に聞いてもたぶん納得するような解答は得られないと思う
その場合は諦めて下さいw
2020/01/10(金) 07:14:44.82ID:1LguP2Z50
読めば読むほどDoEvents大勝利の予感!
2020/01/10(金) 17:27:42.50ID:D+gtbuRW0
弊社は庶務おばちゃんのPCですら64bitでメモリ8GB
2020/01/10(金) 17:40:13.71ID:g1glT3r10
>>331
どこから誤爆したのか知らんが10年前の話でもしてたのか?
333デフォルトの名無しさん (ワッチョイ df2d-guBg)
垢版 |
2020/01/10(金) 21:01:49.43ID:kvQnOJve0
本当はここの話題じゃないのかも知れないけどさあ
.NetCoreアプリ(〜.dllファイル)に対するAppArmorの設定ってどうやるのか解説してるサイトや書籍があったら教えてくれんかな?
dotnetコマンドに対する制約しかかけられないのかな・・・・
2020/01/10(金) 21:14:00.77ID:PkgwRlbI0
>>328
async/await で書くと、深いネストのコールバック地獄を避けられるw
2020/01/10(金) 21:38:12.63ID:pVxCiE3h0
>>334
むしろasync/await地獄の始まりなんじゃ
336デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/10(金) 21:46:24.01ID:nE2xZxkX0
>>335
kwsk
2020/01/10(金) 21:48:34.84ID:aX6A99t20
>>335
KWSK
2020/01/10(金) 23:13:19.94ID:zSF+N+820
>>328
ブロッキングすんなよ…
2020/01/10(金) 23:16:57.47ID:c4Cc7glv0
コールバック地獄のネストがasync/awaitで解消されるわけじゃないんだがな。
340デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/10(金) 23:25:42.90ID:nE2xZxkX0
>>339
なんで?
2020/01/10(金) 23:40:56.46ID:c4Cc7glv0
コールバック引数に関数リテラルを書いてるからネストが深くなるわけで、それが嫌なら
関数を切り出しておけばいい。
async/awaitを使う場合は最初からそうするしかないってだけ。
342デフォルトの名無しさん (ワッチョイ df35-sGtB)
垢版 |
2020/01/10(金) 23:45:01.53ID:nE2xZxkX0
まあ逐一処理みたいに並べて書けるから便利だよね。
別の場所に用意したコールバック関数の中に次の処理書くよりマシかな
2020/01/10(金) 23:48:54.52ID:c4Cc7glv0
あれ、ここc#スレじゃんw
344デフォルトの名無しさん (ワッチョイ df35-sGtB)
垢版 |
2020/01/10(金) 23:51:08.53ID:nE2xZxkX0
いや、こうか。
そうしないとコールバックで繋いでないな。
f1(x1,y1,
 f2(x2,y2,
  f3(x3,y3,
   f4(x4,y3)
  )
 )
)
2020/01/11(土) 00:43:53.19ID:HNDaLABiM
目次見る限りasync/awaitまで書いてあるようだが内容古いかな?

C#による マルチコアのための非同期/並列処理プログラミング
http://gihyo.jp/book/2013/978-4-7741-5828-0
2020/01/11(土) 10:39:28.88ID:LYbiGn3M0
C#で明示的にメモリを開放する手段はGC.Collect以外にはないんでしょうか?
画像やオーディオファイルを扱うアプリを作っている最中ですが、数百MBのデータを扱い終えても数分はメモリ使用量がそのままで少し気持ち悪いです
GC.Collectを行うと副作用も色々とあるようなので他に手段があればと
2020/01/11(土) 10:49:45.29ID:W2txbHVT0
>>344
その場合どれがコールバック?

c#ならラムダを使えばjsのコールバック地獄と同じような地獄を味わえるが、async/awaitは関係ないな。
2020/01/11(土) 11:09:15.66ID:UtksiWPF0
async/awaitの件解決しました。
ありがとうございました!
2020/01/11(土) 11:28:43.37ID:TUd4PMk40
DoEvents最強!
350デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 11:44:58.26ID:tdQ2h9sk0
>>347
普通にミスった
関数ポインタ的なものを渡してるつもりだったけど実行演算子付けてたら意味ないな

f1(x1,y1,(y1,y2)=>
 f2(x2,y2,(x3,y3)=>
  f3(x3,y3,(x4,y4)=>
   f4(x4,y4)
  )
 )
)

多分こうかな
やっぱりこのほうがいいな
そもそもこんなに非同期処理並べるときあるか分からないけど
await f1(x1,y1)
await f2(x2,y2)
await f3(x3,y3)
f4(x4,y4)
2020/01/11(土) 11:58:16.27ID:W2txbHVT0
それ、非同期ラムダならawaitで待つけど普通のラムダなら普通に呼ぶだけだろう。
awaitで解消できるわけじゃなくて。
352デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 12:03:26.24ID:tdQ2h9sk0
こうか
f1(x1,y1,async (y1,y2)=>
 await f2(x2,y2,async (x3,y3)=>
  await f3(x3,y3,async (x4,y4)=>
   f4(x4,y4)
  )
 )
)
353デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 12:04:51.20ID:tdQ2h9sk0
いや、これだとasync, await使ってるから本末転倒やな
もう時間ない
2020/01/11(土) 12:28:03.20ID:yg8EbsDw0
>>346
> GC.Collectを行うと副作用も色々とある
あくまで一般的な方針ってだけなので別に自分のアプリで問題(望ましくない時にスパイクを起こすとか)無ければ好きに呼べば良いよ
別にイリーガルなAPIというわけでもない
まあ一般的な話で言えば「メモリ残っててなんか気持ち悪い」程度の理由で呼ぶ必要はまったくないが
355デフォルトの名無しさん (ラクッペ MMf3-elwi)
垢版 |
2020/01/11(土) 12:48:55.66ID:iMRI2zWpM
>>350のコールバックが非同期で呼び出されるってことだろうから普通に並べて呼ぶだけじゃ無理じゃね
2020/01/12(日) 10:53:37.47ID:dSru1J0h0
>>354
たしかに基本的には問題になりませんが、
数GBを消費することもあり、もしそのときに使用者が他に重いプログラムを起動するなどするとメモリ不足になる場合もあるかなと・・・
こういうプログラムはGC任せにするのではなくC++などで作るべきという結論になるんでしょうか?
2020/01/12(日) 11:39:38.30ID:hca/fTZV0
>>356
仮想メモリでググってみて
2020/01/12(日) 12:06:08.27ID:EKUpo6h10
>>346
IDisposableなオブジェクトがあれば不要になった時点できちんとDispose()するようにするとかかな。
画像を扱っているんであればSystem.Drawing.Imageとかいろいろあるんでは。
2020/01/12(日) 12:10:08.97ID:VFqe+WSm0
usingで囲むのが定石かな?
2020/01/12(日) 12:28:05.83ID:dSru1J0h0
主にはMemoryStreamで巨大データを扱っていてちゃんとDisposeは行っていますが、タスクマネージャーで監視している限りだと中々メモリ使用量が減りません
2020/01/12(日) 12:32:04.56ID:21O0ncu50
>>356
その消費されているメモリがどのメモリなのかきちんと把握しないと意味がないよ

マネージドメモリが消費されればそれだけ手動でCollectせずともGCは働くはず
なのに残っているとしたらstatic変数等で無駄に参照し続けている可能性がある

アンマネージドなメモリなら既に書かれてる通りDisposeを必要な場面で呼び出していない可能性がある
加えてGC性能の観点からはDispose(正確にはファイナライザの方だけど)をGC任せにするのは
程度問題ではあるけど基本的にはご法度

現状「メモリが大量に消費されているが手動でCollectして大丈夫か」の情報だけでは現状方針は立てようがない
2020/01/12(日) 12:37:20.88ID:dSru1J0h0
>>361
一応上でも書きましたがメモリリークの相談ではありません
2020/01/12(日) 12:52:17.43ID:21O0ncu50
>>362
タスクマネージャ眺めてるだけじゃ開発者が手続きを間違えいてるのか
.NETのGCがクソなのかも判断できないという話だよ

CLRProfilerなり使ってもうちょっと詳細詰めてみたら?
2020/01/12(日) 13:07:52.95ID:dSru1J0h0
>>363
言葉足らずでしたが、Dispose処理を行ったであろうタイミングで減らないというだけであって待つなりそこでCG.Collectを行えばちゃんと解放はされます
ただ上でも言ったようにGC.Collectは副作用があるようなのでC++のdeleteのようなものは無いのかなと
2020/01/12(日) 13:49:29.53ID:GXqrVy4G0
GCって動かしてやらないと限界まで解放しないよ
限界までいって開放時のその時起きるのはストップザ・ワールドと呼ばれる有名な現象

その前にもメモリの残量を見てるアプリが動かなくなる
あ、メモリ少ないじゃん俺起動やめんべ
こういうのも絡んで再現不能な不具合を多々撒き散らす
常駐アプリならストップザ・ワールドが困るなら定期的に解放せんとまずい

ちなみにストップザ・ワールドは10分は動かなかったときがある
2020/01/12(日) 13:50:45.08ID:21O0ncu50
>>364
まあ生存しているマネージドメモリの正体がわかり切っていて処理の途中でも無いなら
(例えば単純にユーザー操作からファイルの読み込みが完了して結果が表示された後とか)
それはCollect使っても構わない場面だと思うよ

結局副作用と言ってもヒューリスティックなGCの調整に影響が出て
細かくGCが起きる場面でのスループットが低下する、かもしれない
とかその程度だしね
2020/01/12(日) 13:53:55.26ID:F6k+/xNLM
サーバーじゃなくてクライアントアプリだろ?
ガンガンGC.Collect打っても全然問題ないよ
2020/01/12(日) 13:54:13.68ID:yOfvFL1A0
>>365
なるべくストップザ・ワールドしないようにGCは改良されてきたけど、
.NET Framework 4.8でも10分かかったりする?
2020/01/12(日) 14:00:58.90ID:GXqrVy4G0
>>368
俺がやったのは4.5ぐらい
でもこの辺の挙動って変わるかな?
2020/01/12(日) 14:21:33.28ID:EstEf4vMM
>>364
大きなメモリブロックを頻繁に扱うならアンマネージドメモリを使いなよ
アンマネージドメモリなら開放したいときに無駄なく開放できる
今はspanがあるからアンマネージドメモリの扱いも簡単だ
GCの手動実行は開放したいメモリ以外にもマークアンドスイープが発生しちゃうから効率が悪い
ちなみにMemoryStream.Disposeはインターフェース共通化のために実装してあるだけで呼び出す意味はない
2020/01/12(日) 14:32:31.87ID:fMqCO5na0
逆に10分止めちゃうようなコードを見てみたい
2020/01/12(日) 14:39:35.43ID:OVUZbrRA0
GCが分単位でかかる状況ってそもそも作り出せるもの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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