- 1 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:28:41.27 ID:Pggemlyq0.net]
- !extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part147 mevius.5ch.net/test/read.cgi/tech/1582100741/ ■関連スレ C#, C♯, C#相談室 Part94 mevius.5ch.net/test/read.cgi/tech/1553075856/ ■コードを貼る場合は↓を使いましょう。 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 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
- 592 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 22:02:04.34 ID:qUM0ZuKL0.net]
- wikipediaに依ると円周率の計算は
π/4 =1- 1/3 + 1/5 - 1/7...らしい BigIntegerで1を必要な桁数だけ大きくすれば良いような
- 593 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 22:07:03.28 ID:KPuGe7Gc0.net]
- >>584
整数演算だけで出来るぞ というかすべての小数点演算は整数演算の組み合わせで出来る >>582 GMPのデフォルト精度は64ビットだから20桁くらいしかいけない precに大きなビット数設定してやれば何万桁でもいける
- 594 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 22:26:47.07 ID:A6rK79tx0.net]
- だから言語に分数型が必要だって言っただろアホが
- 595 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 23:04:03.67 ID:V7nqUCXH0.net]
- いや、も
- 596 名前:っとストレートに円周率型が必要 []
- [ここ壊れてます]
- 597 名前:デフォルトの名無しさん [2020/11/14(土) 00:22:57.13 ID:XJ24TZhC0.net]
- >>585
https://www.youtube.com/watch?v=NaL_Cb42WyY
- 598 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 05:05:39.51 ID:hLsGLi/C0.net]
- 分数型があったところで無理数は表現できなくね?
アレば便利なことには間違いないが
- 599 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 09:03:12.56 ID:cYQm19/50.net]
- >>590
三分の一が表現できるってだけで結構便利なんだな 自分でクラス作ってもいいけど
- 600 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:27:05.74 ID:HtCqr6h30.net]
- >>538
www.dotsakura.com/?mode=blog;id=115
- 601 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 09:17:33.20 ID:TE31pbc70.net]
- 日本でC#使うのは殆どUnityかWindowsデスクトップアプリだからな
数値計算とかしたいならPython使うしかない
- 602 名前:デフォルトの名無しさん [2020/11/15(日) 09:55:21.46 ID:zLhs1absM.net]
- 業務アプリで1/3することってあるよ
- 603 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 12:40:40.11 ID:wWBHTATOd.net]
- C#ってCやVC++と比べるとかなり遅い
ですか? 遅いなら、時間の掛かる処理だけは速い言語で作るべきか悩みます マーシャリングすれば使えるみたいなので
- 604 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 12:45:13.00 ID:MP+vmq9O0.net]
- >>595
処理の内容と書き方による
- 605 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 12:45:47.16 ID:4zqmLj42M.net]
- 物にもよるが3割減ぐらいに思っておけば
- 606 名前:デフォルトの名無しさん [2020/11/15(日) 12:58:30.49 ID:TbjZIaKaM.net]
- 分数型を作るのは面白そうやん。約分や通分の機能を持たせておけば素敵。てかMS考えてくれ。
- 607 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 13:20:31.23 ID:ttHD4odoa.net]
- >>595
ファイル読み書きやネットワークアクセスが一切なくて100%CPUパワーを使うだけのプログラムなら差が出るかもしれないけど そうでなければ処理時間の差などI/Oにかかる時間に比べればごくわずかで塵にも等しい ので気にするだけ無駄 というかCPUパワーを極限まで使い倒すなら、C#でマルチコア並列実行できるよう処理を書いたほうが C/C++のシングルスレッド処理よりよっぽど早いかもしれない よほど低性能なマシンで実行するならともかく、今どきの環境なら全部C#で書くほうが無難だと思うけどね
- 608 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 13:23:38.35 ID:y3jy+ngDM.net]
- >>598
すでに有理数クラスがNugetにあるで https://www.nuget.org/packages/Rationals/ Example usage: Rational left = (Rational) 1 / 2; Rational right = (Rational) 1 / 4; Rational sum = left + right; // equals to: 3 / 4
- 609 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 16:21:09.71 ID:d0/9SCdg0.net]
- >>595
どうしてもC++のライブラリをC#で使いたいとかじゃないかぎり そのマーシャリングの処理が何気に重い気がするので 関数を何度も呼び出すみたいな使い方するなら ベンチマーク取ってみるとC#のみの方が速いかも知れないぐらいの差じゃないかな
- 610 名前:デフォルトの名無しさん mailto:sage [2020/11/15(日) 16:38:42.28 ID:alkL58xG0.net]
- >>601
マーシャリングが重いって言うと例えば extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)] string procName); とする場合、のprocNameをAnsiに変換するときってヒープ使われるの? ヒープ使われるんだとしたら自前でstackallocしてbyte*として渡そうと思うけど
- 611 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 08:44:05.44 ID:dMCYT8Lea.net]
- >>595
C#とC/C++の処理速度はほとんど変わらないよ ただ、C#はどうしてもGCの影響を受けるから、数msでも遅れたら困る用途には使えない まあ、そんな要求は滅多に無いけどね
- 612 名前:デフォルトの名無しさん [2020/11/16(月) 10:53:58.92 ID:sF1WJXNTF.net]
- GCは何時発動するか判らんのが欠点だけど
C#のGCはタイミングは常に判ってるのかな
- 613 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 11:05:41.67 ID:qYJ3Dm/90.net]
- タイミングがわかるわけじゃないけど引き起こす可能性のある手続きはわかっている
コーディングでそれを避けられる余地があるからUnityとかでまだ採用されてるんじゃない?
- 614 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 11:27:25.87 ID:jhzDiMvL0.net]
- 本当にクリティカルな区間はGCを(出来るだけ)禁止する等ある程度は制御できる
- 615 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 11:30:54.33 ID:Ixi420Wb0.net]
- GC禁止する前に、あらかじめ明示的にGCって出来る?
- 616 名前:デフォルトの名無しさん [2020/11/16(月) 12:05:22.31 ID:g+EUxdXIr.net]
- GC連打しまくればいいよ
- 617 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 13:22:47.27 ID:jhzDiMvL0.net]
- GC.Collect()で強制実行出来るけど
世代上昇の問題もあるし使いこなすのは難しい
- 618 名前:デフォルトの名無しさん [2020/11/16(月) 13:24:47.04 ID:sF1WJXNTF.net]
- 生き残りは強毒化するのか
- 619 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 14:26:09.78 ID:vD+2eRn00.net]
- 強制GC連打派
30秒に一回とかやってる それでもなんか1秒ぐらい止まるときあるよ
- 620 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 15:09:58.28 ID:dMCYT8Lea.net]
- ストップザワールドしないGCを実装してくれたらもうアプリケーションでC/C++を使うことはないかも
- 621 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 15:48:59.14 ID:eppT6X190.net]
- むしろVC++に絶対的なGUI決定版が出たら個人開発のデスクトップアプリでC#使う事なくなるだろうな
個人開発程度の規模だとマクロのあるC++の方が返って開発速度早くなることも多いし
- 622 名前:デフォルトの名無しさん [2020/11/16(月) 17:13:00.16 ID:VrPIfzyD0.net]
- GCSettings.LatencyModeで選べるよ
- 623 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 18:58:34.38 ID:ZSbSJvSB0.net]
- フォーム上に設置したボタンを表示したいのですが、
フォームだけ非表示もしくは透過0%にする方法を教えてください フォームのopacityいじるとボタンも非表示になってしまいます
- 624 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 19:19:54.16 ID:Le2Iq+UD0.net]
- フォームの背景を単一色で塗り潰してTransparencyKeyで透明にしたい色を指定
- 625 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 22:13:31.62 ID:G4eaPjr50.net]
- c#とvsがなかったら一生プログラムやろうなんて思わなかった
- 626 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 23:04:37.19 ID:cHmpQkkDM.net]
- C#っていい言語だよね
飾らず、気取らず、それでいて力強い。
- 627 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 23:25:26.59 ID:LWdxEv1Gd.net]
- >>596,599,601,603
ありがとうございます!
- 628 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 23:34:54.33 ID:LWdxEv1Gd.net]
- >>597
ありがとうございます!
- 629 名前:デフォルトの名無しさん [2020/11/17(火) 01:43:59.23 ID:lN0UCm9Ya.net]
- ファイルの日付時刻を比較したいんですがどうしたら良いですか?
- 630 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 01:44:52.21 ID:qgtrLMb80.net]
- datetime型を比較すれば?
- 631 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 10:32:21.22 ID:sO+4iEeI0.net]
- >>621
datediffや
- 632 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 13:16:45.53 ID:GB1Hm8K4a.net]
- >>615
WPFなら普通にできたはずだけどFormでは簡単にはいかないと思うよ。 不完全だけど一番簡単にそれっぽいのを作る方法はButtonを乗せるためだけの別のform2を作って form1をそれの親にすること。 public Form1() { InitializeComponent(); var loc = new Point(100, 100); var form2 = new Form2(); Action a = () => form2.Location = PointToScreen(loc); form2.Show(this); Load += (s, e) => a(); Move += (s, e) => a(); }
- 633 名前:デフォルトの名無しさん [2020/11/17(火) 15:43:12.61 ID:WBCoLdBR0.net]
- WPFで作る利点ってのはクロスプラットフォームに出来るってこと?
Formしか作ったことないんやけど
- 634 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 16:31:37.70 ID:EuUrSlgt0.net]
- >>625
WPFはWinFormsと同じくWindowsのみ
- 635 名前:デフォルトの名無しさん [2020/11/17(火) 16:58:38.50 ID:RncVdZGd0.net]
- 利点というか世界的に見たらWPFのほうが主流だから
むしろ今なぜFormなのかという感じだな
- 636 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 17:15:11.29 ID:ogxxYnEyH.net]
- Formsの方が簡単だから……
- 637 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 18:04:37.48 ID:YcEiD0LrM.net]
- グラフィック関係が壊滅的なので
skiaとかで支援しないと使い物にならないWPF を勧めるとはお主も悪よのう
- 638 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 18:39:12.50 ID:Hw9PIOp10.net]
- WPFなんて死産みたいなもんじゃね・・・
出て結構経つけどWPFの仕事とかの話全然聞かないわ
- 639 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 18:46:22.75 ID:PM1Apx6y0.net]
- Visual Studioの皮ってWPFなんでしょ
- 640 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:20:07.15 ID:cGx3KuHJ0.net]
- >>630
仕事はいくつかあった 建物の入り口にあるディスプレイに飾っとくようなアプリ 3D空間にオブジェクトを配置するアプリ
- 641 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:24:53.52 ID:FpFQah7Cd.net]
- そういうタイプはunityとかのほうが楽そう
- 642 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:26:16.29 ID:iD8vjuLm0.net]
- うちは数年前から新製品で使い始めたよ。
特定業界向け会計ソフトだから一般の目に触れる事は殆どないと思うけど。
- 643 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:34:04.55 ID:cGx3KuHJ0.net]
- >>633
全くその通りで結局開発が進んで行くうちに帯に短し襷に長しみたいな中途半端力凄い >>634 そういうのは絶対Webアプリのが使い勝手いいんだよなぁ ログインしたらどこでもどのPCでも同じって強過ぎるよね
- 644 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:37:52.56 ID:cGx3KuHJ0.net]
- あと何気に困ったのが音
後ろで音楽かけてボタンとか押したら音鳴らしてってのが わりかしできんかったっていうかなんかあやしいライブラリ使う羽目になったっていうか まあ、色々動く画面作りたいときはいっそunity考えた方がいいと思う
- 645 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 19:42:43.18 ID:qgtrLMb80.net]
- unity 只け?
- 646 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 20:40:45.04 ID:Tiv5/dm/0.net]
- いまだに新規開発案件でforms使うところあるの?
- 647 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 20:44:36.18 ID:ooCV67uO0.net]
- あるよ
- 648 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 20:56:30.30 ID:Fq1hGO400.net]
- FAだとformで十分でウマーです。
- 649 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 21:02:12.76 ID:Qs8QfDsD0.net]
- windowsなのにformsを使わない理由を逆に知りたい
- 650 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 21:04:02.66 ID:qYg8UIQi0.net]
- >>641
高DPI対応が面倒 バインディングが使い物にならない
- 651 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 22:28:01.75 ID:Rs8mNRLj0.net]
- そして来年からはWinUIというWPF紛いのものが登場する、と
Win10ぽいルックスとx:Bindでコンパイル時にバインドエラー発見ってのはかなり大きい そのうちAOTコンパイルもサポートされるそうだ
- 652 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 22:33:32.13 ID:GB1Hm8K4a.net]
- WPFは(既に実質的にはそうだったけど)いよいよディスコンになるの?
- 653 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 22:39:07.63 ID:qYg8UIQi0.net]
- >>644
現状維持 これからはWinUI推しでWinFormsとWPFは放置だろ
- 654 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 22:40:03.59 ID:GB1Hm8K4a.net]
- そうか無くなるわけじゃないよねw
メンテモードか
- 655 名前:デフォルトの名無しさん mailto:sage [2020/11/17(火) 22:48:31.36 ID:60XguBAo0.net]
- .NET MAUI 楽しみ
- 656 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 00:03:39.25 ID:MO86P+zt0.net]
- maui期待しないほうがいい
ただの名前変更レベルの予感 Microsoftはなぜxamarinが失敗したか総括したのか? 表面上何もかわってないように見える 技術的にはSlimRenderアーキテクチャだかようしらんが
- 657 名前:デフォルトの名無しさん [2020/11/18(水) 15:05:11.31 ID:7Ekft4aVr.net]
- VScodeで成功してるんだがElectronでいいじゃん
Electron.Netを正式サポートしろよ
- 658 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 15:10:25.22 ID:870PPpSlr.net]
- >>648
だね。
- 659 名前:デフォルトの名無しさん [2020/11/18(水) 15:39:37.23 ID:P3jn+KK20.net]
- Electronは失敗だよな
VSCodeだけだし
- 660 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 15:46:24.24 ID:UaAov2o20.net]
- >>76
C#というのは前身がDelphiという言語なんだ そのDelphiはVBとの死闘の末敗れてしまった だからC#(Delphi残党)がVBを憎んでいるのは当然なんだ ガンダムで例えるとC#はネオジオンでVBは連邦軍なんだよ
- 661 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 15:54:18.16 ID:IPbBahkD0.net]
- >>652
笑
- 662 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 15:54:52.11 ID:IPbBahkD0.net]
- >>651
笑
- 663 名前:デフォルトの名無しさん [2020/11/18(水) 16:11:46.00 ID:YM9VgCd+0.net]
- >>638
わたしは中国人あるよ
- 664 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 16:58:13.83 ID:gt3SSD7y0.net]
- >>651
SlackやDiscordもElectronだよ
- 665 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 16:59:19.38 ID:oW5F7Byc0.net]
- Azure Data Studio
- 666 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 19:57:00.23 ID:hzlSiPtIM.net]
- >>657
ゴミは引っ込んでろ
- 667 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 20:11:49.12 ID:oW5F7Byc0.net]
- >>658
え?
- 668 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 21:07:17.11 ID:RhWccaic0.net]
- こいつら質問スレでテンプレ無視して雑談しなきゃならない使命でもあるのか?
- 669 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 10:08:06.32 ID:fvT6uEqW0.net]
- StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾に嫌気がさして
アンセーフなstringラッパー作って public Length => { fixed (char* p = str) *(int*)(p - 2) = value; }みたいなことしてマニュアルで長さ変えたりしてるんだけど、こういうことしてるとGCに影響あったりする? 初期バッファとしてstr = new string('\0', 0x1000);として0x1000文字分のメモリを頂戴したのに、上記の動作で長さを5に変えたりしてると、GCによる解放時に5文字分しか解放されずに残りがリークするって事にはならないんだろうか?
- 670 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 11:07:34.05 ID:xT43LVbE0.net]
- > StringBuilderのパフォーマンス目的で使う割には最終的なToString()で再Allocが発生するという矛盾
そもそもそこは別に矛盾じゃないだろ 「結合のたびにアロケーションが発生する」のを防ぐもんなんだから
- 671 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 11:21:03.45 ID:RERzCypk0.net]
- >>661
ZStringを使いなよ 色々な悩みから解放されるよ
- 672 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 11:31:10.28 ID:fvT6uEqW0.net]
- >>663
良く知らないけどそれもその都度string生成してるんじゃないの? スレッドアンセーフで良いから生成は初回かキャパ更新程度に留めて使いまわしたいんだよね そのキャパ更新の際に捨てるときにstring.Lengthを弄ってるとメモリリークの原因になるのではないかと
- 673 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 11:37:15.19 ID:fvT6uEqW0.net]
- さすがに内部でcalloc(sizeof(char), 0x1000)とかしたときの確保サイズメモっておいてくれてるのかね
GC内部の細かい挙動はMS社員でもない限り知りようないか
- 674 名前:デフォルトの名無しさん [2020/11/19(木) 13:58:51.49 ID:5X7qze6C0.net]
- NameValueCollectionをコピペすると自動整形がうまくいかなくてかっこの位置がおかしくなるので
各行ごとにDelete→Enter→Endを繰り返して手動で整形しなおしてるのですが、ちゃんと整形してくれる方法ってあるんですか? ↓みたいになったりする。 NameValueCollection vals = new NameValueCollection { { "hoge","hage"}, { "fuge","hage"}, };
- 675 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 15:16:47.51 ID:wGypJVfq0.net]
- 1行にする
予期しないところにある改行が原因でフォーマッターが動かない
- 676 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 15:26:56.05 ID:3nmF1AP8M.net]
- >>661
いやそもそもStringBuilder.ToString()は再アロケーションしないぞ 内部のバッファをそのまま引き継ぐ実装だ その後StringBuilderの方に追加の変更が加えられた時点で再アロケーションが発生する
- 677 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 15:52:44.75 ID:5X7qze6C0.net]
- >>667
1行というのはこういうことですか? NameValueCollection vals = new NameValueCollection{{ "hoge","hage"},{ "fuge","hage"},}; 実際には{ "hoge","hage"},が50行とかあったりするので↑では視認性やエラーチェックが面倒になります。
- 678 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 16:13:28.80 ID:XTntku/z0.net]
- >>668
StringBuilderはchar[]であってstringではない たとえStringBuilderのCapacityがLengthと丁度良く=であったとしてもToStringで別途string用にアロケーションされる StringBuilderはLengthを自由に変更出来て任意のインデックスからappendできるので、内部バッファがそのまま返されるようならstringは不変という法則が簡単に崩れ去れることになり>>661がやってるunsafeと何ら変わらなくなる
- 679 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 16:33:47.05 ID:wGypJVfq0.net]
- >>669
そういう長いものに自動整形を期待しない そういう長いものを人間が視認する必要性を排除する この手の自動整形をしようとすると負荷が半端ないことになって実用性に欠けるのですっぱり切っているのだと思う
- 680 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 16:48:49.64 ID:k15rqtpOa.net]
- >>670
そんな馬鹿な実装するはずがないと思うよw そもそもイミュータブルとは状態を変更する方法を外部に提供しない、という意味以上でも以下でもない。 そこのところを勘違いしている気がする
- 681 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 16:50:55.24 ID:EbSX4tjh0.net]
- >>672
ソース見れば普通にわかるやろ https://referencesource.microsoft.com/#mscorlib/system/text/stringbuilder.cs,338 string ret = string.FastAllocateString(Length);
- 682 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 17:07:14.79 ID:9igY/Fs20.net]
- りふぁれんすそーすw
- 683 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 17:26:57.34 ID:k15rqtpOa.net]
- .NETのStringが機械語レベルでどう実装されてるか勉強したことはないが、
普通に考えればパスカルストリングとCストリングのあいの子みたいな単純な構造でしょたぶん。 ごにょごにょした後のバイト列を普通にstringと「みなす」だけにするよね。 わざわざ別のメモリ確保してベタコピーする馬鹿な実装をする人がいるだろうか。 その必要性ができてからで遅くないと思うんだけど。
- 684 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 18:08:19.31 ID:fvT6uEqW0.net]
- >>675
C#のstringはBStrというoffset0にlength、offset4からcharの配列、そのoffset4へのポインタがstringとなる 末尾がnull文字じゃなくても問題ないが基本は末尾にnull文字が入ってるためconst wchar_t*としても扱える そんなことはどうでもよくてマネージド内で上記の内部バイナリを書き換える方法は一切無いからわざわざアンセーフstringラッパーを作ったんだよ 一見書き換えられてるように見えるstring操作は全て新stringとして生成されてるだけだからな +連結は長さが変わるから想像できるだろうけど、Substringすらも切り取り参照をしている訳ではなく新たにstringを生成してる(それを解決しうるマネージドな手段としてReadOnlySpanというのも一応あるが)
- 685 名前:デフォルトの名無しさん [2020/11/19(木) 19:50:48.14 ID:nKYhLbF50.net]
- 細かいことを気にしてまでC#を使う矛盾をどう解決してるのか気になるわ
- 686 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 20:59:45.17 ID:fvT6uEqW0.net]
- >>677
だからプライベートリポの8割はC/C++って程度には普段はC使ってるけど でもその理論言っちゃうと本家StringBuilderも要らんってことになるしな 全部+とか$"{}"でええやん
- 687 名前:デフォルトの名無しさん [2020/11/19(木) 21:03:40.41 ID:nKYhLbF50.net]
- StringBuilderを使えというのは学ぶでしょ
そこまででいい それ以上やるならもうC#使う意味ない
- 688 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 21:04:23.57 ID:fvT6uEqW0.net]
- >>679
それじゃSpanとか実装したMSがバカみたいじゃん
- 689 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 21:28:29.15 ID:A4wcMVuA0.net]
- >>663 が挙げてたZStringの解説記事
個人的にはそこまでパフォーマンス気にするような物作ってないから「へー」って感じで読んだだけだけど ZString – Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成 ttps://tech.cygames.co.jp/archives/3383/
- 690 名前:デフォルトの名無しさん mailto:sage [2020/11/19(木) 21:32:12.66 ID:s0VdR5fOd.net]
- 国内C#erで有名どころだしstringはパフォーマンス絡みでよく上がるから割と有名な方じゃないかな?
あんなにパフォーマンス気にする人が知らないのには驚きだけどw
- 691 名前:デフォルトの名無しさん mailto:sage [2020/11/20(金) 01:24:52.99 ID:ViPIBq0U0.net]
- パフォーマンスは気にしてないんじゃないの?
アロケーション気にしてただけで
- 692 名前:デフォルトの名無しさん mailto:sage [2020/11/20(金) 07:19:27.10 ID:ShozvaYJ0.net]
- C++は基本がスタック、C#は基本がヒープ
この二者の最大の差はこれなのでC#のパフォーマンス改善=アロケーション回避に終始する
|

|