ふらっと C#,C♯,C#(初心者用) Part160
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part159
http://mevius.5ch.net/test/read.cgi/tech/1691454079/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・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
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured i,j,kをループの変数にするのはfortranの名残
そしてそれは数学の名残
総和記号Σの変数のi,j,k
知らない人は中卒 >>104
foreachでも要素のindexを取り出せるじゃん んでもってタプルで受け取るってか?
素直にfor使っとけよ ほんと
for使うなとか低レベルにもほどがある
最近はforeach使うなすら現れてるw
qiitaのレベルが下がるわけだ foreachで順番通りにやらなきゃいけないオブジェクトではまったわ >>100
「遅くなるような気がする」じゃなく実際に自分で測ってみたら?
「どちらが速いですか」などの質問も割とよく出るけど、処理内容によって変わるかもしれないのだから自分で測ってみるのが一番早い
https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/412stopwatch/stopwatch.html
ここのSystem.Threading.Thread.Sleep(1000);を計測する処理に差し替えるだけでできる .Count() を .Count にしろって警告出るからイヤイヤ直したわ ・記述を変更しても、コンパイラの最適化によって同じIL(中間言語)になる可能性もある。
・JITコンパイルでほとんど差がない可能性。
・AOTコンパイルで(略)
・C#を使っている時点で最速でないから、そんな速度差を気にするくらいならC/C++、Rust、アセンブラを使え。 イテレータが無いかも知れないから、foreachは限定的だよなぁ >>100
> for (int i = 0; i < arrs.Length; i++) {......}
配列の範囲外アクセスのチェックを省略する最適化がかかるから変に凝った書き方はしない方が良い
> 変数iが無駄に思える
全てを代替出来る訳じゃないけど、可能ならforeachを使えば 最近の.NETはメジャーバージョンアップのたびに最適化されているから速度差はあまり気にしなくてもよくね?
どうしても高速化したいのならNativeAOT使おう
制限はあるけど使い慣れたC#で記述できるから最高だぞ こういうので速度気にするって百万回位のループとかなん? >>119
ループの中で何を処理するかによっても違う
パラレル使う手も有るしね C++使おうが速くならないんだけどな
逆に処理色々自分でかかなきゃいけないしそれが効率悪い分だけ遅くなるまである
世の中うまいようにいかないもんなんだ 他と比べてとかそういうんじゃないんだよな
最初に作ったアプリをバグフィクスや機能追加していくと速度が落ちていくことがあると言うか大体落ちる
ひどいと今まで30秒で処理してたのが33秒になりましたとか
目算で思っていた範囲以上に遅くなるとちょっと嫌な気分
これが地味にダメージなんだよな
そういうのが積み重なると目も当てられない
それを避けるために日常的に無駄のないコードを心がけるのが精神衛生上良い
他でもない自分のため 昔での事だけど、Cじゃないんだけどさ
テーブルの各値を1つづつズラしてシフトする処理で1番目に初期値零を放り込むプログラム合ったんだけど
テーブル毎バサッとやったら3時間掛かってたのが10分でおわってワロタ記憶あるわ
なんでそれまで誰もやらなかったんだか(笑) >>122
そもそも30秒掛かってる時点で無いわ
30msにしてから言え >>123
C#でListに1万件ループでAddするのとAddRangeで一気に追加するのでは速度が段違いだよねって話みたいなもんか? >>118
NativeAOTも良し悪しだけどね
リフレクションが制限されるし
実行時のプロファイリングによる最適化が掛からないから繰り返す処理だと不利かも >>124
1時間の動画解析が30msで終わったら苦労しない 10万枚の画像差分解析が30msで終わる時代に生まれたかった >>125
時々Listが取りこぼすバグが直った! なあ365のGraphSDKだけどv5凄く使い難くね?
特にページイテレーターとか糞じゃね?
全件取れるようにGetAll全部に用意しろ
イテレーターで1件ずつ取り出すのはそのままで良いから1ページ毎にAddRangeで追加出来る様に追加しろ あとGraphAPIはいつまでv1のままなんだ?
いい加減バージョン上げろよ string.Splitはcharとstring両方受け付ける癖に
string.Joinはstringしか受け付けないの
なんでそんな一致しない仕様にしたのか .NET Frameworkの方だと最終でもStringしかないな
Coreは前からCharもあるけど Coreの時に互換性を破壊して言語仕様から作り直してくれたらもっと良かったんだけどね きっとChatGPTさんやGeminiさんが大活躍 勢いのある言語はライブラリなどの開発が盛んだ
C#は昔からそういう系統は後手後手
今後も主流の言語のおこぼれを頂く立場 async/awaitとかはC#の実装後に他言語がパクり始めたね c#好きって言う人は多いけどjava好きって言う人ほとんどいない
この差はなんだろう C#はMicrosoftが推してるってのもあって年々扱いやすくなってるし良い言語ではある
けどGUIライブラリ周辺は完全に力入れる方向性ミスってる
xamlなんかじゃなくて最初からmvcに注力してれば… なんでAI用のライブラリが遅れてんだ?
結局インタプリタが正義なんじゃねーのか?
インタプリタで開発して完成したらネイティブコードに転換するような言語でいいんじゃね? AIは発展途上だからライブラリ化してもすぐに更新必至だしなぁ C#がメジャーなり切れないのはGUIライブラリがゴミカスみたいな変遷をたどり続けてるのが一番の癌じゃね そもそもGUIライブラリってそんなに作るの難しいのか?
MSほどの組織があればGUIライブラリなど数ヶ月で完成できるだろ
何が開発を阻害してるの?
Windows自体の問題なのかc#の問題なのか 完成してるやん
自分が使いこなせないXAMLにイラついてる奴が居るだけでさ xamlかぁ
あれで何でも記述したプロジェクトの表示系の不具合修正する仕事した時には
xamlでなんでも書くんじゃねえ!
と本気で怒った記憶 コード書いてオリジナルのタグ作れるよ!(*бωб) そういう事じゃ無くてコードでもXAMLと同じ事出来るじゃん
正確に言うとXAMLがコードに変換される訳だけど >>146 訂正 mvc→mvu
有名なアプリが大抵react、flutter、electron製な時点でお察し
当のMicrosoftでさえTeamsをMAUIで作ってない C#自体は最近はそう大きな変化はない
大体は他の言語の機能の後追いか内部のための変更が多い印象
全てを把握している人間は少ないのではないか
自分は過去のC#の言語の表現が好きだった
最近は記号の羅列や呪文に近くなっている >>158
簡略化する為の表記法がどんどん呪文化する元凶だよな モダンな言語なんて大抵呪文だし記法覚えりゃいいだけじゃん
それで記述が簡潔になるんだから御の字よ
俺はリフレクション系じゃなけりゃ抵抗無いわ Typescriptの型機能凄いよ
c#もこうなればいいね 言語固有の記法なんか覚えても近い未来にゃ糞の役にも立たなくなるからなぁ Add(int x int y)
{
return x+y
}
これ呼び出すのがシンプルにx+yって計算するよりも遅いです。
どうしたらいいですか?書いちゃったプログラム全部書き直しってのは絶対無理です。
ちなみに1回につき100万回くらい呼び出さないといけません。 書き直しが無理ってことは実際に全部置き換えたのと時間を比較したわけではないんだよね
https://ufcpp.net/study/csharp/structured/miscinlining/
多分普通に最適化されてると思うけど まあ一応AggressiveInlining付けてみたら >>167
それがそのままなのかどうかは不明だけど基本的にはメソッド呼び出しは遅くなる
本当にごく限られた特定の場合だけインライン化と言う最適化が働いて速くなることがあるけど
それを過信してはいけないと思う 要するに.ランタイムのバグか
それの尻拭いをプログラマがすべきか否か >>167
publicかどうかで変わるかなあ?
LLMに修正させれば? >>168〜>>173
ありがとうございます。
>>169
一部置き換えたのを計ったら早くなってたけど
全体では少し早くなった感じでした。
ちなMath.Powは何故か遅くMath.Sqrtはそうでもないのは
私の勘違いでしょうか。 > ちなMath.Powは何故か遅くMath.Sqrtはそうでもないのは
そもそもの機能が違うメソッドを、あっちは遅くてこっちはそうでもないとか比べる意味ある? >>175
ランタイムのバージョン違いで挙動変わればバグだよ
バグじゃなかったら何なの
それがWindowsなの〜 こういう理解できない人は多分最後まで理解できないんだろうな
挙動は同じで実行時間が違う
C++だと顕著だけど実装依存の最適化は別に言語仕様ではないので何とも言えない 「Spectre」と「Meltdown」みたいな重度のセキュリティーホール対策で実行速度は大幅に落ちた
セキュリティーホールをふさいで極端に言えば挙動が変わってるけど最初の挙動は本来期待しない動作
オプション指定しないと最適化されないのは想定している動作であり期待しない動作ではないのでバグではない コンパイラの設定次第で究極的に速度重視とか、メモリ削減重視とかやれるんじゃねーの? switchが、ビルドしたらswitch式に置き換わるかswitchステートメントのままかってどういう基準なんだろ? C#に限ったことじゃないけど
BigInteger型があるのにBigFloat型が無いのは何でなのか?
どちらかというと後者のほうが科学技術計算とかで使い道あると思うんだが Lisp族には分数型があったな
浮動少数よりあれで持ってた方が良いんじゃないか >>183
科学技術計算でdouble精度を上回る有効数字桁数が必要とされることはほとんどない。
BigFloat型でと同様な計算は10の整数乗倍することによりBigInteger型でも可能。 天文学的数字なんか上位3桁でもおおくらいだろうし、それ以上正確にする根拠も必要性も無いからなぁ 巨大な行列の固有値が正確に必要な問題とかで4倍精度必要なケースあるけどな >>191
そう言うものには浮動小数点形式は使わないだろw 浮動小数点はどこまで行っても概数でしか無いからなぁ
円周率の計算みたいにするしか無いんだよなぁ なぜないかと言えば一番は需要がないから
次にハードウェアで演算が実装されていないから
マルチスレッドと非常に相性が悪そう そもそも固有値計算は反復法で数値的に解く以外のアルゴリズムが絶望的に遅い
反復法で有理数を使うメリットは皆無 MAUIで会員制のデータ計算、集計アプリ作ってて外部サーバーのMysqlに直撃繋いてSQL書いてるけど、問題ない?
(デスクトップアプリみたいな感じで)
PHPでWebAPI作るのが面倒だし、認証トークンがよく分からん。 >>201
それってDBへの接続文字列が書かれたものがコンパイル済みとはいえクライアントにあるって事だろ
逆アセンブルは簡単にできるからDBに直接アクセスされてデータ消したりテーブル消したり出来るぞ
当然ながら会員データも他人の読めるので個人情報入ってたらアウト
損害賠償で乙 MAUIで書いてるならWebAPIもC#で書けば良いじゃん
swaggerから簡単に生成出来るし
色々考えるとWebアプリの方が楽だぞ