!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part154
https://mevius.5ch.net/test/read.cgi/tech/1644416019/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
https://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/
https://docs.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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part155
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cfbb-bGSb)
2022/06/17(金) 08:42:12.88ID:CPX9Pfyj082デフォルトの名無しさん (ワッチョイ a75f-cRYK)
2022/06/23(木) 18:02:24.84ID:a115LlJm0 >>51
>>58の情報を信じて書いたけど
これで大体同じような数字が出たら>>58の通りベンチの取り方の問題のせいで出た差だと思うよ
MethodA,MethodB自体は>>72も検証してくれた通り変わらないはず
というか今MethodBのほうをどこかで使ってるんだとしたら、性能なんかより1ms以内連続して同じ値が出るような乱数でも問題無い使い方なのかを気にするべき
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private int _random = 0;
private void Test(Func<int> func) {
var sw = Stopwatch.StartNew();
var count = 10000;
for (var i = 0; i < count ; i++) {
label1.Text = func().ToString();
Application.DoEvents();
}
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds} msec");
}
private int MethodA() {
return _random++;
}
private int MethodB() {
return (int)DateTimeOffset.Now.FromUnixTimeMilliseconds;
}
private void button1_Click(object sender, EventArgs e) {
Test(MethodA);
Test(MethodB);
}
}
>>58の情報を信じて書いたけど
これで大体同じような数字が出たら>>58の通りベンチの取り方の問題のせいで出た差だと思うよ
MethodA,MethodB自体は>>72も検証してくれた通り変わらないはず
というか今MethodBのほうをどこかで使ってるんだとしたら、性能なんかより1ms以内連続して同じ値が出るような乱数でも問題無い使い方なのかを気にするべき
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private int _random = 0;
private void Test(Func<int> func) {
var sw = Stopwatch.StartNew();
var count = 10000;
for (var i = 0; i < count ; i++) {
label1.Text = func().ToString();
Application.DoEvents();
}
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds} msec");
}
private int MethodA() {
return _random++;
}
private int MethodB() {
return (int)DateTimeOffset.Now.FromUnixTimeMilliseconds;
}
private void button1_Click(object sender, EventArgs e) {
Test(MethodA);
Test(MethodB);
}
}
83デフォルトの名無しさん (ワッチョイ a702-KtZt)
2022/06/23(木) 18:09:26.02ID:ey2ezatM0 とりあえず64がアホだという事は判る
84デフォルトの名無しさん (ワッチョイ 5a01-UZ+b)
2022/06/23(木) 18:14:56.67ID:3EmxumxM0 label1.Text = func().ToString();を
label1.Text = $”{i}: {func().ToString()}”;にでもすれば
>>58が書いてる内容が原因かどうかはっきりわかるでしょ
label1.Text = $”{i}: {func().ToString()}”;にでもすれば
>>58が書いてる内容が原因かどうかはっきりわかるでしょ
8564 (ワッチョイ 13ac-tycP)
2022/06/23(木) 18:19:33.38ID:4fvcgSgI0 >>81
何が全く違うんやねん
一般論はいいけど、それが51の言ってるAとBの差の理由になるのは何なのよっていうことじゃん?
まあそもそも51のコードにそこまでの差が出るのかどうかも今のワイは知らん立場やが
51はBのほうが速くなってるから疑問なんやろ、まあ他のコードのとこに依存ありそうで気になるな
何が全く違うんやねん
一般論はいいけど、それが51の言ってるAとBの差の理由になるのは何なのよっていうことじゃん?
まあそもそも51のコードにそこまでの差が出るのかどうかも今のワイは知らん立場やが
51はBのほうが速くなってるから疑問なんやろ、まあ他のコードのとこに依存ありそうで気になるな
87デフォルトの名無しさん (ワッチョイ 2324-zXsU)
2022/06/23(木) 18:41:00.93ID:jvSS+4eW089デフォルトの名無しさん (ワッチョイ b72f-WaTF)
2022/06/23(木) 19:40:58.09ID:1Th4d0L20 >5chって一般論話す場だろ
初めて聞いたわ。
ここ技術系の板だぜ。個別問題に一般論しか返せないなら邪魔だから黙ってろ
初めて聞いたわ。
ここ技術系の板だぜ。個別問題に一般論しか返せないなら邪魔だから黙ってろ
90デフォルトの名無しさん (ワッチョイ a702-KtZt)
2022/06/23(木) 19:45:10.46ID:ey2ezatM0 using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System;
[MemoryDiagnoser(false)]
public class RandomBenchmark
{
[Params(10000)] public int A;
private readonly Random _random = new Random();
public int MethodA() => _random.Next(1, 100);
public int MethodB() => new Random().Next(1, 100);
[Benchmark]
public int BenchA()
{
int result = 0;
for (int i = 0; i < A; i++) result += MethodA();
return result;
}
[Benchmark]
public int BenchB()
{
int result = 0;
for (int i = 0; i < A; i++) result += MethodB();
return result;
}
public static void Main() => BenchmarkRunner.Run<RandomBenchmark>();
}
| Method | A | Mean | Error | StdDev | Allocated |
|------- |------ |------------:|---------:|---------:|----------:|
| BenchA | 10000 | 80.88 us | 0.489 us | 0.434 us | - |
| BenchB | 10000 | 1,490.26 us | 9.404 us | 8.797 us | 720,001 B |
using BenchmarkDotNet.Running;
using System;
[MemoryDiagnoser(false)]
public class RandomBenchmark
{
[Params(10000)] public int A;
private readonly Random _random = new Random();
public int MethodA() => _random.Next(1, 100);
public int MethodB() => new Random().Next(1, 100);
[Benchmark]
public int BenchA()
{
int result = 0;
for (int i = 0; i < A; i++) result += MethodA();
return result;
}
[Benchmark]
public int BenchB()
{
int result = 0;
for (int i = 0; i < A; i++) result += MethodB();
return result;
}
public static void Main() => BenchmarkRunner.Run<RandomBenchmark>();
}
| Method | A | Mean | Error | StdDev | Allocated |
|------- |------ |------------:|---------:|---------:|----------:|
| BenchA | 10000 | 80.88 us | 0.489 us | 0.434 us | - |
| BenchB | 10000 | 1,490.26 us | 9.404 us | 8.797 us | 720,001 B |
91デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/23(木) 20:56:11.83ID:pqpGOzkV0 >>51
皆が指摘してるように余計な処理を省いたら、たぶん、結果が逆転すると思う
(自分の所では逆転してMethodAの方が60倍位速かった)
private void Test2( Func<int> func )
{
var sw = Stopwatch.StartNew();
var count = 10000; // ※速すぎて結果が0msecになると思うから1桁増やした方が良い
for ( var i = 0; i < count; i++ )
{
func();
}
sw.Stop();
Console.WriteLine( $"{sw.ElapsedMilliseconds} msec" );
}
private async void button2_Click( object sender, EventArgs e )
{
await Task.Run( () => Test2( MethodA ) );
await Task.Run( () => Test2( MethodB ) );
}
皆が指摘してるように余計な処理を省いたら、たぶん、結果が逆転すると思う
(自分の所では逆転してMethodAの方が60倍位速かった)
private void Test2( Func<int> func )
{
var sw = Stopwatch.StartNew();
var count = 10000; // ※速すぎて結果が0msecになると思うから1桁増やした方が良い
for ( var i = 0; i < count; i++ )
{
func();
}
sw.Stop();
Console.WriteLine( $"{sw.ElapsedMilliseconds} msec" );
}
private async void button2_Click( object sender, EventArgs e )
{
await Task.Run( () => Test2( MethodA ) );
await Task.Run( () => Test2( MethodB ) );
}
92デフォルトの名無しさん (ワッチョイ a702-KtZt)
2022/06/23(木) 20:58:51.74ID:ey2ezatM0 少なくとも >>51 のコードでは、Label.Text の更新とApplication.DoEventの時間測ってるのと変わらん
93デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/23(木) 20:59:14.76ID:pqpGOzkV09464 (ワッチョイ 13ac-sER5)
2022/06/23(木) 21:03:40.24ID:4fvcgSgI095デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/23(木) 21:07:01.92ID:pqpGOzkV0 ついでにfunc().ToString(); でも逆転するな
96デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/23(木) 21:21:12.73ID:pqpGOzkV0 .NetFramework4.8 Debugビルドにて
■label1.Text = func().ToString();
MethodA: 5480[msec]
MethodB: 48[msec]
■func().ToString()
MethodA: 8[msec]
MethodB: 20[msec]
■func():
MethodA: 7[msec]
MethodB: 18[msec]
■>>91
MethodA: 0[msec]
MethodB: 12[msec]
■label1.Text = func().ToString();
MethodA: 5480[msec]
MethodB: 48[msec]
■func().ToString()
MethodA: 8[msec]
MethodB: 20[msec]
■func():
MethodA: 7[msec]
MethodB: 18[msec]
■>>91
MethodA: 0[msec]
MethodB: 12[msec]
97デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/23(木) 22:05:36.69ID:pqpGOzkV0 .NET Core 6.0 Debugビルドにすると
A,Bどちらも4500〜4600msec位で若干ばらつくがほぼ同じ
結局のところ、>>58が正解で、.NET Framework4.8のRandomの挙動の違いで
Textプロパティの内部で処理がスキップされるか否かってことだろうね
Randomの値の検証はもう面倒臭いからやらないけど
A,Bどちらも4500〜4600msec位で若干ばらつくがほぼ同じ
結局のところ、>>58が正解で、.NET Framework4.8のRandomの挙動の違いで
Textプロパティの内部で処理がスキップされるか否かってことだろうね
Randomの値の検証はもう面倒臭いからやらないけど
98デフォルトの名無しさん (ワッチョイ a702-KtZt)
2022/06/23(木) 22:19:46.46ID:ey2ezatM0 まとめるとこうだな
・Label.Textの更新速度がクソ遅いのでRandomの処理時間は誤差
・new Randomで同じ値が返ってきた場合、Label.Textが更新されないから速くなってるだけ
https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/control.cs,4048
・Label.Textの更新速度がクソ遅いのでRandomの処理時間は誤差
・new Randomで同じ値が返ってきた場合、Label.Textが更新されないから速くなってるだけ
https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/control.cs,4048
99デフォルトの名無しさん (ワッチョイ 5b79-LlJt)
2022/06/24(金) 02:50:44.64ID:gZdHgxGE0100デフォルトの名無しさん (ブーイモ MMba-3YOV)
2022/06/24(金) 07:20:28.71ID:fuiDR9PnM 仕様から推測した原因で間違いないか最終的に動作でも確認しといたほうがいいのでは?
パラメータ有りのnew Random(i)したり>>84みたいにカウンタもLabel.Textに反映して
MethodBがMethodAと同様に遅くなれば一件落着
パラメータ有りのnew Random(i)したり>>84みたいにカウンタもLabel.Textに反映して
MethodBがMethodAと同様に遅くなれば一件落着
101デフォルトの名無しさん (ワッチョイ 2324-zXsU)
2022/06/24(金) 09:06:25.48ID:nZzm6L7c0 >>88>>89
結果的に俺が一番最初に指摘した一般論の通りだったな
結果的に俺が一番最初に指摘した一般論の通りだったな
103デフォルトの名無しさん (ワッチョイ 2324-zXsU)
2022/06/24(金) 09:14:09.95ID:nZzm6L7c010464 (ワッチョイ 5f49-tycP)
2022/06/24(金) 09:17:32.89ID:ec4i6GcX0 検証してくれたのは違う人じゃん
なに自分の手柄にしてんの
なに自分の手柄にしてんの
105デフォルトの名無しさん (ワッチョイ 2324-zXsU)
2022/06/24(金) 09:27:01.49ID:nZzm6L7c0 >>104
単なる数値計算と比べて出力が激重なんてことは検証しなくても分かる程度に明らかな事だからな
実際俺以外にもちらほら指摘しとる奴おるし
せっかくただのint結果に小分けされてるものを毎回出力に紐づけるとか発想がスタティックおっさんと同レベルだからオブジェクト指向プログラミング向いてないで
単なる数値計算と比べて出力が激重なんてことは検証しなくても分かる程度に明らかな事だからな
実際俺以外にもちらほら指摘しとる奴おるし
せっかくただのint結果に小分けされてるものを毎回出力に紐づけるとか発想がスタティックおっさんと同レベルだからオブジェクト指向プログラミング向いてないで
107デフォルトの名無しさん (ワッチョイ a75f-cRYK)
2022/06/24(金) 09:58:54.60ID:VlIywyIA0 > ちなControl.Textがうんたらの人たちは、ただの改善おじさんやな
> 比較の話で共通部分のコード直せって意味わからんわな
> 比較の話で共通部分のコード直せって意味わからんわな
10864 (ワッチョイ 5f49-tycP)
2022/06/24(金) 10:03:47.04ID:ec4i6GcX0109デフォルトの名無しさん (テテンテンテン MMb6-Q5TH)
2022/06/24(金) 12:18:00.54ID:p+qJoCDWM 普段から速度意識してプログラミングしてない奴は、出力が遅いという当たり前の事を知らない事は良くある
そう言う奴には口で言っても感覚的に理解出来んから数字を見せるのが一番早い
そう言う奴には口で言っても感覚的に理解出来んから数字を見せるのが一番早い
110デフォルトの名無しさん (ワッチョイ b72f-WaTF)
2022/06/24(金) 12:58:40.19ID:kHrWfcT90 >>103
お前が言ったのは一般論の可能性だ
結果的にそれが正しかったとしても
それを個別事例に当てはめて検証したのは別の人だろ
ちなみに今回の原因は、コントロールのアクセスや出力が遅いことじゃないんだぜ
それならAもBも同じだけ遅くて差が出る原因にならんからな
お前が言ったのは一般論の可能性だ
結果的にそれが正しかったとしても
それを個別事例に当てはめて検証したのは別の人だろ
ちなみに今回の原因は、コントロールのアクセスや出力が遅いことじゃないんだぜ
それならAもBも同じだけ遅くて差が出る原因にならんからな
111デフォルトの名無しさん (ワッチョイ a75f-cRYK)
2022/06/24(金) 13:05:30.94ID:VlIywyIA0 誰が原因を解明したかなんて質問者からすればどうでもいい話である
醜い
醜い
112デフォルトの名無しさん (ワッチョイ ca2d-MKW/)
2022/06/24(金) 13:19:04.19ID:tHNubtgb0 出力が遅いとか条件次第でスキップする仕様等を知らなくても、
計測を目的としたループの中には対象(今回はRandom)以外の処理はなるべく入れない
と言う原則を守っていれば避けられた話だな。
計測を目的としたループの中には対象(今回はRandom)以外の処理はなるべく入れない
と言う原則を守っていれば避けられた話だな。
113デフォルトの名無しさん (ワッチョイ b72f-WaTF)
2022/06/24(金) 13:26:09.89ID:kHrWfcT90 いや、そもそもRandomの速度を測定したいって話じゃないだろ、これ
114デフォルトの名無しさん (ワッチョイ 2324-zXsU)
2022/06/24(金) 14:24:15.51ID:nZzm6L7c0 >>110
実際に検証した人がGJであることは別に否定してないが?
大本の原因は同一インスタンスでは1ms以内だとシードが変わらない&同一文字列だと出力更新が成されないって事だったようだが、
「毎回newする vs インスタンス使いまわし」という本来質問者が意図してたであろうこの差を調べたいってことであればControl.Textへの代入を挟むと、本来調べたいヵ所が誤差に収斂してしまって調査不可能になるって結論だろ
そしてStopwatchクラスで順次調査すると順番によって速度が変わるなんてことは往々にしてあるから必ずしも「AもBも同じだけ遅くなる」とは限らないってこともちゃんと指摘してる
実際に検証した人がGJであることは別に否定してないが?
大本の原因は同一インスタンスでは1ms以内だとシードが変わらない&同一文字列だと出力更新が成されないって事だったようだが、
「毎回newする vs インスタンス使いまわし」という本来質問者が意図してたであろうこの差を調べたいってことであればControl.Textへの代入を挟むと、本来調べたいヵ所が誤差に収斂してしまって調査不可能になるって結論だろ
そしてStopwatchクラスで順次調査すると順番によって速度が変わるなんてことは往々にしてあるから必ずしも「AもBも同じだけ遅くなる」とは限らないってこともちゃんと指摘してる
115デフォルトの名無しさん (ワッチョイ 0e33-N5lB)
2022/06/24(金) 14:27:59.50ID:tEJIL7500 最初に指摘出来てぼくちゃんえらいでちゅねぇ
116デフォルトの名無しさん (ワッチョイ b72f-WaTF)
2022/06/24(金) 15:42:06.42ID:kHrWfcT90 >>114
>本来質問者が意図してたであろうこの差を調べたい
ああ、そもそもの食い違いはそこか
別にお前の指摘内容を個別にみれば間違ってるとは言わんが
インスタンス生成の速度みたいとか勝手な想像でしかないな
本来の質問者のベンチの意図は不明なんだがな
インスタンスの生成の差を見たかったのか、ローカル変数とクラス変数の速度差をみたかったのか
違う要因で速度計測してて最終的にあのコードまで落ちたのか
結果として予想と違うけど原因は何かって質問だぜ
質問した意図はボトルネックなコードは避けたいって話だったし
>本来質問者が意図してたであろうこの差を調べたい
ああ、そもそもの食い違いはそこか
別にお前の指摘内容を個別にみれば間違ってるとは言わんが
インスタンス生成の速度みたいとか勝手な想像でしかないな
本来の質問者のベンチの意図は不明なんだがな
インスタンスの生成の差を見たかったのか、ローカル変数とクラス変数の速度差をみたかったのか
違う要因で速度計測してて最終的にあのコードまで落ちたのか
結果として予想と違うけど原因は何かって質問だぜ
質問した意図はボトルネックなコードは避けたいって話だったし
117デフォルトの名無しさん (ワッチョイ db63-PIvG)
2022/06/24(金) 15:56:21.70ID:0JrGBM9l0 雑ッッッッッ魚
118デフォルトの名無しさん (ワッチョイ a75f-cRYK)
2022/06/24(金) 17:24:37.81ID:VlIywyIA0 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
119デフォルトの名無しさん (テテンテンテン MMb6-Q5TH)
2022/06/24(金) 17:51:39.39ID:MtTs9G+lM 解決したんだからしょーもない事で喧嘩するなよw
120デフォルトの名無しさん (ワッチョイ a702-KtZt)
2022/06/24(金) 18:14:27.28ID:NAI/rIyW0 元の質問者はもうこの流れ見て逃げてるかもしらんけど、
計測方法自体が間違ってると色々な人を混乱に陥れるので、
これからは、本当に計測したい部分以外の余計な要素を全て排除して
正しい方法で測って欲しいと思うw
計測方法自体が間違ってると色々な人を混乱に陥れるので、
これからは、本当に計測したい部分以外の余計な要素を全て排除して
正しい方法で測って欲しいと思うw
121デフォルトの名無しさん (ワッチョイ cebb-643o)
2022/06/24(金) 19:22:50.70ID:nn4VojDf0 論点がズレて喧嘩始まるのはこの板の名物だな
122デフォルトの名無しさん (ワッチョイ 0b01-gg/4)
2022/06/24(金) 22:04:14.69ID:3GxA+CY50 ワイだの草だの言ってんのみると、まとめキッズが大量に流入してきてるしな
123デフォルトの名無しさん (ワッチョイ 0f79-ZLKY)
2022/06/25(土) 12:00:40.04ID:Fily2x+h0 顧客の意図を汲んで問題を分析して解を出す速度もこの業界では重要スキルだからこれからも精進したまえ
124デフォルトの名無しさん (アウグロ MMbf-aUwc)
2022/06/25(土) 12:03:57.86ID:1xFYE0ZgM 昔わざと炎上させて残業代を狙うやつがいて非常に厄介だった
125デフォルトの名無しさん (ワッチョイ 0f6e-H0HQ)
2022/06/25(土) 21:08:15.68ID:YzwccikL0 非同期処理について質問なんですけど、taskを受け取ってその状態を見て処理が終わってるかどうかチェックして…みたいな感じじゃないですか
例えば通常の関数だったら、戻り値を受け取るのは呼び出した関数の処理が終わって、そこで初めてですよね
でも非同期だと処理終わってないのに戻り値が渡されちゃうって認識でいいですか?そして渡されたあとも進行状況に応じて変化し続けると
例えば通常の関数だったら、戻り値を受け取るのは呼び出した関数の処理が終わって、そこで初めてですよね
でも非同期だと処理終わってないのに戻り値が渡されちゃうって認識でいいですか?そして渡されたあとも進行状況に応じて変化し続けると
126デフォルトの名無しさん (スッププ Sd5f-2lfq)
2022/06/25(土) 21:36:39.54ID:MoozsICfd >>125
処理が終わっているかどうかのチェックなんかしない
Taskを受け取ったら、Taskに対して「完了後に次に実行したい処理」を登録する
そして完了後に次の処理を呼び出すのはTaskを返す側の責任であり、受け取った側は気にしない
次の処理が登録された時点で既にTaskが完了していれば次の処理がすぐ呼ばれるかもしれないし、数秒後かもしれない
非同期処理とはそういうもの
処理が終わっているかどうかのチェックなんかしない
Taskを受け取ったら、Taskに対して「完了後に次に実行したい処理」を登録する
そして完了後に次の処理を呼び出すのはTaskを返す側の責任であり、受け取った側は気にしない
次の処理が登録された時点で既にTaskが完了していれば次の処理がすぐ呼ばれるかもしれないし、数秒後かもしれない
非同期処理とはそういうもの
127デフォルトの名無しさん (ワッチョイ 4f02-gXkX)
2022/06/25(土) 21:42:23.39ID:zqnvknwe0 >>125
> 非同期だと処理終わってないのに戻り値が渡されちゃうって認識でいいですか?
非同期メソッドを呼んで戻ってきてるのは戻り値を戻す処理を実行してるTask<TResult>であって、
その時点で戻り値が渡されている訳ではないよ。
Taskが終了した時点でResultに結果が格納されるが、
普通はTaskを直接弄ったりせず、awaitで待って結果を受け取る。
> 非同期だと処理終わってないのに戻り値が渡されちゃうって認識でいいですか?
非同期メソッドを呼んで戻ってきてるのは戻り値を戻す処理を実行してるTask<TResult>であって、
その時点で戻り値が渡されている訳ではないよ。
Taskが終了した時点でResultに結果が格納されるが、
普通はTaskを直接弄ったりせず、awaitで待って結果を受け取る。
128デフォルトの名無しさん (ワッチョイ 0f6e-H0HQ)
2022/06/25(土) 22:53:30.13ID:YzwccikL0 >>非同期メソッドを呼んで戻ってきてるのは戻り値を戻す処理を実行してるTask<TResult>であって、
ここと
>>その時点で戻り値が渡されている訳ではないよ。
ここのつながりがよくわからないのです
1行目でTask<TResult>型の戻り値が戻ってますよね
それなのに戻り値が渡されていないというのはどういうことでしょうか
あとiscompletedプロパティで終了しているかを判断するのは一般的ではないのですか?
ここと
>>その時点で戻り値が渡されている訳ではないよ。
ここのつながりがよくわからないのです
1行目でTask<TResult>型の戻り値が戻ってますよね
それなのに戻り値が渡されていないというのはどういうことでしょうか
あとiscompletedプロパティで終了しているかを判断するのは一般的ではないのですか?
129デフォルトの名無しさん (ワッチョイ 0f24-5+LN)
2022/06/25(土) 23:06:32.65ID:dWIrjb1E0 >>128
Taskは作業管理機であって結果ではない
task.Resultをして初めて結果を取り出せる
task.Resultを呼び出す前に作業が完了していれば即戻り値を得られるし、そうじゃないなら内部でwhile (!isComplited) Sleep(1);みたいな事をして作業が終わるまで待機した後に得られる
「作業が終わっていたら結果を貰う、そうじゃなければ別の事をする」っていうシーンに限りIsComplitedで確認する(Resultを使うと終わるまで強制的に待機させられるため)
大抵の場合は「Task投げる→他の事する→Task結果を受け取る」って言う一本道なのでIsComplitedをせずにResultでそのまま貰うことが多い
Taskは作業管理機であって結果ではない
task.Resultをして初めて結果を取り出せる
task.Resultを呼び出す前に作業が完了していれば即戻り値を得られるし、そうじゃないなら内部でwhile (!isComplited) Sleep(1);みたいな事をして作業が終わるまで待機した後に得られる
「作業が終わっていたら結果を貰う、そうじゃなければ別の事をする」っていうシーンに限りIsComplitedで確認する(Resultを使うと終わるまで強制的に待機させられるため)
大抵の場合は「Task投げる→他の事する→Task結果を受け取る」って言う一本道なのでIsComplitedをせずにResultでそのまま貰うことが多い
130デフォルトの名無しさん (ワッチョイ 3f2d-yeJY)
2022/06/25(土) 23:09:24.51ID:DJEgoMeR0 >>128
今はtask.IsCompltedやtask.Resultを直接参照することはあまりないな
var result = await Task;
みたいにawaitで待ちと返り値の取り出しを行う
今はtask.IsCompltedやtask.Resultを直接参照することはあまりないな
var result = await Task;
みたいにawaitで待ちと返り値の取り出しを行う
131デフォルトの名無しさん (ワッチョイ 3f32-iCO3)
2022/06/25(土) 23:14:34.43ID:gQjoPRQF0 >>128
値は確かに返っている、がタスクであってズバリ結果じゃないよね
ハンドルとかのイメージが湧かないなら…注文番号だけ返すみたいな
>iscompleted
使う機会がない訳ではないが、自前でノンブロッキングを書くと面倒くさいし
大抵は完了したら何をするって感じで、awaitやContinueWithを使うと思うよ
値は確かに返っている、がタスクであってズバリ結果じゃないよね
ハンドルとかのイメージが湧かないなら…注文番号だけ返すみたいな
>iscompleted
使う機会がない訳ではないが、自前でノンブロッキングを書くと面倒くさいし
大抵は完了したら何をするって感じで、awaitやContinueWithを使うと思うよ
132デフォルトの名無しさん (ササクッテロラ Spa3-u0tS)
2022/06/26(日) 01:35:05.56ID:qaLvjcDBp 待つなら同期でいいと思うんですが、awaitするメリットってなんですか?
他のことが出来るって言われても、他のことが非同期にやらせてる処理に
影響が出るような事象や処理だったらどうするんですか?
他のことが出来るって言われても、他のことが非同期にやらせてる処理に
影響が出るような事象や処理だったらどうするんですか?
133デフォルトの名無しさん (ワッチョイ 4f5f-85MC)
2022/06/26(日) 01:42:42.52ID:J3iRsr8e0 同期で待つとスレッドプールが占有されるからやめろ
複数のタスクから同時に読み書きアクセスされるリソースがあるならロックをかけて排他制御しろ
複数のタスクから同時に読み書きアクセスされるリソースがあるならロックをかけて排他制御しろ
134デフォルトの名無しさん (ワッチョイ 4f5f-85MC)
2022/06/26(日) 01:45:50.95ID:J3iRsr8e0 あとネイティブアプリでUIスレッド上で同期で待つと全てが固まるからやめろ
135デフォルトの名無しさん (ワッチョイ 3f2d-yeJY)
2022/06/26(日) 01:49:34.43ID:naJNIbNQ0 >>132
良くあるのはGUIのボタンを押したら時間がかかる処理をやらせる場合
同期処理だとその間GUIが固まって、ウィンドウを移動したり出来なくなる
非同期処理なら処置中もGUIが動ける
排他制御等で影響が出ないようにするのはプログラマーの仕事
良くあるのはGUIのボタンを押したら時間がかかる処理をやらせる場合
同期処理だとその間GUIが固まって、ウィンドウを移動したり出来なくなる
非同期処理なら処置中もGUIが動ける
排他制御等で影響が出ないようにするのはプログラマーの仕事
136デフォルトの名無しさん (オッペケ Sra3-r+Rc)
2022/06/26(日) 02:07:33.08ID:DrXudPeHr C10K 問題は20世紀に提起された話題で、現代も問題になるかわかたない。
実際、開発者であるあなたのパソコンでは数千のスレッドが在り、ハンドルに至っては数十万あると思う。
それで問題なく動いている。
非同期は広告の宣伝文句かもしれない。
実際、開発者であるあなたのパソコンでは数千のスレッドが在り、ハンドルに至っては数十万あると思う。
それで問題なく動いている。
非同期は広告の宣伝文句かもしれない。
137デフォルトの名無しさん (ワッチョイ 3f32-iCO3)
2022/06/26(日) 02:31:28.25ID:thJDnK3H0138デフォルトの名無しさん (ワッチョイ 3f01-DrrO)
2022/06/26(日) 08:44:12.84ID:yfX3wl/l0 >>132
> 他のことが出来るって言われても、他のことが非同期にやらせてる処理に
> 影響が出るような事象や処理だったらどうするんですか?
魔法じゃないんだからそんなのは何を使ってもどうしようもないだろ
影響出ないケースなんていくらでもあって例えばネットワークとディスク(最近はSSDだからストレージか)の各々からデータを読んでからそれらのデータを処理して表示するなんて時にシリアルにやるより
1. ネットワークから読み出し開始
2. ストレージから読み出し開始
3. 1. と 2. の終了を待つ
4. 読み出したデータを処理して表示
ってやった方が早い可能性があるってこと
> 他のことが出来るって言われても、他のことが非同期にやらせてる処理に
> 影響が出るような事象や処理だったらどうするんですか?
魔法じゃないんだからそんなのは何を使ってもどうしようもないだろ
影響出ないケースなんていくらでもあって例えばネットワークとディスク(最近はSSDだからストレージか)の各々からデータを読んでからそれらのデータを処理して表示するなんて時にシリアルにやるより
1. ネットワークから読み出し開始
2. ストレージから読み出し開始
3. 1. と 2. の終了を待つ
4. 読み出したデータを処理して表示
ってやった方が早い可能性があるってこと
139デフォルトの名無しさん (スップ Sddf-MDA+)
2022/06/26(日) 08:51:05.64ID:60uDe2Q5d 横からの質問ですが、デスクトップアプリならなんとなく理解はできてるつもりですが、ウェブアプリだと、複数のユーザからの処理をサーバ上のアプリが処理していく際に、同期処理で重たいのが動いている場合にほかのユーザまでまたされるということがありますか?
アクセス単位で別々にスレッド処理されてるから、メソッドを同期非同期するのはあくまでもその単一ユーザの処理の中で考えれば良いですかね?
それとも、他のユーザも待たされるから基本的には非同期で作っていくものですか?
ちなみに、winformからblazor移行の勉強中です
アクセス単位で別々にスレッド処理されてるから、メソッドを同期非同期するのはあくまでもその単一ユーザの処理の中で考えれば良いですかね?
それとも、他のユーザも待たされるから基本的には非同期で作っていくものですか?
ちなみに、winformからblazor移行の勉強中です
140デフォルトの名無しさん (ワッチョイ 8fad-d/rJ)
2022/06/26(日) 09:48:29.73ID:vVyuk1M20 Blazorって流行る気配があるの?
141デフォルトの名無しさん (テテンテンテン MM4f-hYij)
2022/06/26(日) 09:58:33.85ID:MUUA0Nh2M >>139
同時アクセスしてるユーザー数>Webサーバが用意してるスレッド数の上限 だと待たされることがある
これがC10K(クライアント10000台)問題
なので対策としてDBアクセスみたいなI/O待ちみたいなときにスレッドを占有せずいったんリリースさせようと考えて
async/awaitの仕組みが生まれた
同時アクセスしてるユーザー数>Webサーバが用意してるスレッド数の上限 だと待たされることがある
これがC10K(クライアント10000台)問題
なので対策としてDBアクセスみたいなI/O待ちみたいなときにスレッドを占有せずいったんリリースさせようと考えて
async/awaitの仕組みが生まれた
142デフォルトの名無しさん (スッププ Sd5f-2lfq)
2022/06/26(日) 10:02:10.45ID:PhXCrOZEd Blazorはアーリーアダプタが一瞬遊んだくらいで消えた
もう誰も使ってないよ
もう誰も使ってないよ
143デフォルトの名無しさん (ワッチョイ 0f24-5+LN)
2022/06/26(日) 10:04:32.32ID:FNTvXztu0 スレッド型非同期は時代遅れ
シングルスレッド非同期こそナウ
シングルスレッド非同期こそナウ
144デフォルトの名無しさん (スップ Sddf-MDA+)
2022/06/26(日) 10:07:12.47ID:60uDe2Q5d >>141
ありがとうございます
ということは、スレッドが枯渇しない限りは同期処理でほかのユーザは待たされることはないと。
プログラム上で主に考えるのは、ユーザ単位で同期で良いのか非同期にするべきか考えれば良く、ただ、規模やサーバの負担を考えるときには、非同期によりスレッドの占有は抑えられて効率よくスレッドが使われていくから、非同期処理を実装するメリットまたは必要があるという理解で合ってますか?
ありがとうございます
ということは、スレッドが枯渇しない限りは同期処理でほかのユーザは待たされることはないと。
プログラム上で主に考えるのは、ユーザ単位で同期で良いのか非同期にするべきか考えれば良く、ただ、規模やサーバの負担を考えるときには、非同期によりスレッドの占有は抑えられて効率よくスレッドが使われていくから、非同期処理を実装するメリットまたは必要があるという理解で合ってますか?
145デフォルトの名無しさん (ブーイモ MM4f-2lfq)
2022/06/26(日) 10:25:36.55ID:bTdujDmeM >>144
それで合ってる
ぶっちゃけBlazorなんてお遊びの許されるちょっとした社内システムくらいでしか使わないんだからスレッドの消費なんて全く気にしなくてOK
Blazor Serverなら尚更
それで合ってる
ぶっちゃけBlazorなんてお遊びの許されるちょっとした社内システムくらいでしか使わないんだからスレッドの消費なんて全く気にしなくてOK
Blazor Serverなら尚更
146デフォルトの名無しさん (テテンテンテン MM4f-hYij)
2022/06/26(日) 10:47:01.78ID:MUUA0Nh2M 極論すると、絶対にWebサーバでスレッド枯渇することがないって分かってるなら
async/awaitなんか使わないほうがパフォーマンスが良い
なので、万一本当にスレッドが枯渇したときに
サーバに処理余力があるにもかかわらずリクエストが処理できなくてレスポンスが致命的に悪化してもよければ
非同期の仕組みなんかまったく使わなくてよいし
現にVS2010以前はその前提のWebアプリしか構築できなかった
async/awaitなんか使わないほうがパフォーマンスが良い
なので、万一本当にスレッドが枯渇したときに
サーバに処理余力があるにもかかわらずリクエストが処理できなくてレスポンスが致命的に悪化してもよければ
非同期の仕組みなんかまったく使わなくてよいし
現にVS2010以前はその前提のWebアプリしか構築できなかった
147デフォルトの名無しさん (スップ Sddf-MDA+)
2022/06/26(日) 10:47:39.05ID:60uDe2Q5d >>145
ありがとうございます
なかなかピンとくる記事に当たらなかったのですっきり疑問がとけました
国内のサードパーティー製のモジュールとか対応しだしてたりYouTubeなんかだと結構英語の解説とか多いので向こうでは多少使われてるのかなと思ったんですが、先は厳しそうですね、、、
本業でなくC#好きで触ってる自分にとっては一番作りやすいのではありますが
ありがとうございます
なかなかピンとくる記事に当たらなかったのですっきり疑問がとけました
国内のサードパーティー製のモジュールとか対応しだしてたりYouTubeなんかだと結構英語の解説とか多いので向こうでは多少使われてるのかなと思ったんですが、先は厳しそうですね、、、
本業でなくC#好きで触ってる自分にとっては一番作りやすいのではありますが
148デフォルトの名無しさん (オッペケ Sra3-YeIb)
2022/06/26(日) 11:46:46.35ID:ITekl9D3r データベースのこと考慮しなくていいんか?
重い処理は非同期で別スレッドに投げなくていいんか?
重い処理は非同期で別スレッドに投げなくていいんか?
149デフォルトの名無しさん (ブーイモ MM0f-0CFZ)
2022/06/26(日) 11:55:34.78ID:fnukxN9QM CPUバウンドな処理だとスレッド枯渇しなくても他のユーザーが待たされる
I/Oバウンドな処理でもDB側で何らかの競合が発生すれば待たされる
スレッドが枯渇しなくても数が増えると該当スレッドにCPUリソースが割り当てられるまでの時間が当然増えるから処理完了までの時間は長くなる
短い時間で終わる単純なI/Oバウンドな処理のみでピーク時/オフピーク時のリクエスト数が十分に少なくて省リソースよりもプログラムの簡潔さを優先するような場合なら同期処理を選ぶ
I/Oバウンドな処理でもDB側で何らかの競合が発生すれば待たされる
スレッドが枯渇しなくても数が増えると該当スレッドにCPUリソースが割り当てられるまでの時間が当然増えるから処理完了までの時間は長くなる
短い時間で終わる単純なI/Oバウンドな処理のみでピーク時/オフピーク時のリクエスト数が十分に少なくて省リソースよりもプログラムの簡潔さを優先するような場合なら同期処理を選ぶ
150デフォルトの名無しさん (ブーイモ MM0f-0CFZ)
2022/06/26(日) 12:26:18.51ID:+3C8D9l5M サーバーアプリでCPUバウンドな処理なら非同期より同期で実装
フロントのサーバーを呼び出す箇所で非同期にする
フロントのサーバーを呼び出す箇所で非同期にする
151デフォルトの名無しさん (ワッチョイ ff10-m0vP)
2022/06/26(日) 12:32:44.97ID:35knD1Em0 BlazorならPolySnakeを再現してるサンプルを見て、すごい時代になったなと思ったよ
見ただけなのでどういう仕組みかは知らない
https://github.com/3mam/PolySnake
見ただけなのでどういう仕組みかは知らない
https://github.com/3mam/PolySnake
152デフォルトの名無しさん (ブーイモ MM4f-2lfq)
2022/06/26(日) 12:39:31.07ID:6NjMnJeGM >>148
Winアプリと違って、Webサーバーというのは基本的にレスポンスを返すまでスレッドをブロックしていいアーキテクチャなんだよ
例外としてNode.jsのようなシングルスレッドなサーバーもあるが、少なくともASP.NET(無印もCoreも)はそうではない
ローディングアニメーションを出すような場合は、処理を開始するAPIと進捗をチェックするAPIを分けてAjaxでポーリングするように作ったりすることもあるが、
その場合でもリクエスト単位では同期でいい
Winアプリと違って、Webサーバーというのは基本的にレスポンスを返すまでスレッドをブロックしていいアーキテクチャなんだよ
例外としてNode.jsのようなシングルスレッドなサーバーもあるが、少なくともASP.NET(無印もCoreも)はそうではない
ローディングアニメーションを出すような場合は、処理を開始するAPIと進捗をチェックするAPIを分けてAjaxでポーリングするように作ったりすることもあるが、
その場合でもリクエスト単位では同期でいい
153デフォルトの名無しさん (ワッチョイ 8f79-aUwc)
2022/06/26(日) 13:51:48.19ID:tmrZCe0Z0154デフォルトの名無しさん (スッププ Sd5f-2lfq)
2022/06/26(日) 14:25:11.51ID:PhXCrOZEd155デフォルトの名無しさん (ワッチョイ 8f79-aUwc)
2022/06/26(日) 14:30:57.64ID:tmrZCe0Z0 ええー
リソースある前提で作っちゃうのー?
リソースある前提で作っちゃうのー?
156デフォルトの名無しさん (スッププ Sd5f-2lfq)
2022/06/26(日) 14:57:18.69ID:PhXCrOZEd >>155
何が言いたいのか知らんが、同期だろうが非同期だろうがCPUを100%使っている状況なら普通はWebならまずは水平分散する
Webでは一般にインスタンスの数を増やすだけでスケールするような作りになっていることが大前提として最重要であり、個別の最適化はその次だ
何が言いたいのか知らんが、同期だろうが非同期だろうがCPUを100%使っている状況なら普通はWebならまずは水平分散する
Webでは一般にインスタンスの数を増やすだけでスケールするような作りになっていることが大前提として最重要であり、個別の最適化はその次だ
157デフォルトの名無しさん (ワッチョイ 8f79-aUwc)
2022/06/26(日) 17:01:46.40ID:tmrZCe0Z0 webは知らんけど
最近ようわからんのにスレッド立てまくる奴が作ったプログラムがこんな動作だね
正直まずいレベルで下手っぴだと思う
c#の言語仕様のせいで
最近ようわからんのにスレッド立てまくる奴が作ったプログラムがこんな動作だね
正直まずいレベルで下手っぴだと思う
c#の言語仕様のせいで
158デフォルトの名無しさん (ワッチョイ 3f01-DrrO)
2022/06/26(日) 20:52:25.72ID:yfX3wl/l0 「こんな動作」とかフワフワした用語でマウント取りに来るなら自分のブログとかでやってくれ
ここは「初心者」スレ
ここは「初心者」スレ
159デフォルトの名無しさん (ワッチョイ 7fbb-XsAS)
2022/06/26(日) 20:59:48.87ID:NLYG3vIc0 >>157
正直まずいレベルで下手っぴな文章だな
正直まずいレベルで下手っぴな文章だな
160デフォルトの名無しさん (ワッチョイ 0f01-uaCM)
2022/06/27(月) 01:26:20.48ID:wEAeif5H0 何言ってるかわからんと思ってたら他の人もそうだったので安心した
161デフォルトの名無しさん (ワッチョイ 8f63-2c2u)
2022/06/27(月) 02:35:01.48ID:sfuoftVd0 ASDっぽい会話のコンテキストのおかしさ
162デフォルトの名無しさん (ワッチョイ 8f79-aUwc)
2022/06/27(月) 02:35:22.77ID:l2B1RzVL0163デフォルトの名無しさん (ワッチョイ 4f5f-85MC)
2022/06/27(月) 03:01:17.94ID:lmKSzJyY0 ヌルヌル話法の特徴と根本原理|mentane|note
https://note.com/mentane/n/n1ba35d50bef0
https://note.com/mentane/n/n1ba35d50bef0
164デフォルトの名無しさん (ワッチョイ 4f02-lwqN)
2022/06/27(月) 15:08:18.79ID:Kbl5ft5+0 インターフェースのメンバーを呼び出す時には実装を確認すべきなのでしょうか
それとも 定義元のインターフェースへのキャスト必須ですか
(例)
class MyList : IList<int>
{
int IContainer<int> Count { get; }
...
...
}
それとも 定義元のインターフェースへのキャスト必須ですか
(例)
class MyList : IList<int>
{
int IContainer<int> Count { get; }
...
...
}
165164 (ワッチョイ 4f02-lwqN)
2022/06/27(月) 15:22:13.53ID:Kbl5ft5+0 ドットが抜けてました
int IContainer<int>.Count { get; }
int IContainer<int>.Count { get; }
166164 (ワッチョイ 4f02-lwqN)
2022/06/27(月) 15:33:45.50ID:Kbl5ft5+0 ぐちゃぐちゃですみません
int ICollection<int>.Count { get; }
int ICollection<int>.Count { get; }
167デフォルトの名無しさん (ワッチョイ 7f2c-Qhs/)
2022/06/27(月) 19:24:48.05ID:c9y9U1Yc0 聞きたいことがよく分からない
「実装を確認する」というのがどういう行為なのか
そのMyListを実装する側の話なのか使用する側の話なのか
例が単にインターフェイスの明示的実装を書いてるだけでどこが疑問点か読み取れない
「実装を確認する」というのがどういう行為なのか
そのMyListを実装する側の話なのか使用する側の話なのか
例が単にインターフェイスの明示的実装を書いてるだけでどこが疑問点か読み取れない
168164 (ワッチョイ 4f02-lwqN)
2022/06/27(月) 20:38:42.94ID:Kbl5ft5+0 >>167
var mylist = new MyList();
var c0 = mylist.Count; // build error
// MyList は IList<int> : ICollection<int> をもつので
var c1 = ((ICollection<int>)mylist).Count;
// MListでint ICollection<int>.Count { get; } という memberをもつので
var c2 = ((ICollection<int>)mylist).Count;
c1は 万能
var mylist = new MyList();
var c0 = mylist.Count; // build error
// MyList は IList<int> : ICollection<int> をもつので
var c1 = ((ICollection<int>)mylist).Count;
// MListでint ICollection<int>.Count { get; } という memberをもつので
var c2 = ((ICollection<int>)mylist).Count;
c1は 万能
169デフォルトの名無しさん (ワッチョイ 4f5f-85MC)
2022/06/27(月) 21:10:43.08ID:lmKSzJyY0 プロパティにpublicつけ忘れてるだけじゃね?
170デフォルトの名無しさん (ワッチョイ ffbc-qwBH)
2022/06/27(月) 21:49:28.21ID:oKLZ5l1i0 IList.Count って public int Count { get } じゃなかったっけ。
((ICollection<int>)mylist).Count; が出来るのは、別途 ICollection.Count が実装されているからじゃないの。
((ICollection<int>)mylist).Count; が出来るのは、別途 ICollection.Count が実装されているからじゃないの。
171164 (ワッチョイ 4f02-lwqN)
2022/06/27(月) 22:21:47.30ID:Kbl5ft5+0172デフォルトの名無しさん (ワッチョイ ffbc-qwBH)
2022/06/27(月) 23:11:12.57ID:oKLZ5l1i0 オマエ、きちんと日本語で他人に伝わるように説明する気ないの?
,前に書いたのに誤りがあるように見えないんだけど。
,前に書いたのに誤りがあるように見えないんだけど。
173デフォルトの名無しさん (ワッチョイ 8fad-d/rJ)
2022/06/28(火) 01:12:23.85ID:vCyl6X270 いきなりオマエ呼ばわりかよ、何様?
174デフォルトの名無しさん (ワッチョイ 7f2c-Qhs/)
2022/06/28(火) 03:39:43.25ID:k21C1TP+0 攻撃的なレスは誰も得しない
>>172
前に書いたのってのは170のことで合ってる?
Countプロパティを定義してるのはICollection<T>
IList<T>はそれを継承してるだけ
だから
((ICollection<T>)array).Count
で正しく取れるし
((IList<T>)array).Count
と全く同じ意味になる
>>172
前に書いたのってのは170のことで合ってる?
Countプロパティを定義してるのはICollection<T>
IList<T>はそれを継承してるだけ
だから
((ICollection<T>)array).Count
で正しく取れるし
((IList<T>)array).Count
と全く同じ意味になる
175デフォルトの名無しさん (スップ Sd5f-3THJ)
2022/06/28(火) 08:26:27.68ID:UdVkVSJZd https://ufcpp.net/study/csharp/oo_interface.html?p=4#usage
インターフェースの実装は
public int Count{get{...}}
のようにpublicで公開するのが普通。
MyList mylist; mylist.Count; のようにアクセスするのがまずいなら
int IContainer<int>.Count {get{...}}
のように隠すこともできる。
インターフェイスとしてしか使わないなら
MyList mylist;
IContainer<int> c1=mylist;
c1.Count;
のようにアクセスする方法もある
インターフェースの実装は
public int Count{get{...}}
のようにpublicで公開するのが普通。
MyList mylist; mylist.Count; のようにアクセスするのがまずいなら
int IContainer<int>.Count {get{...}}
のように隠すこともできる。
インターフェイスとしてしか使わないなら
MyList mylist;
IContainer<int> c1=mylist;
c1.Count;
のようにアクセスする方法もある
176164 (ワッチョイ 4f02-lwqN)
2022/06/28(火) 14:11:24.95ID:gtViLG4V0177デフォルトの名無しさん (ワッチョイ 27ad-9ZeA)
2022/07/05(火) 02:51:20.89ID:pywdYBm60 SOLID原則のDの依存性逆転の原則がイマイチ分かりにくいんですが
上位は下位に依存してはならないって説明は何をもって上位と下位になるんですか?
依存の意味はインスタンス化したらもう依存したことになるって事でいいんですよね?
では上位と下位の意味は具体的にどういう基準で区分されるのですか?
上位は下位に依存してはならないって説明は何をもって上位と下位になるんですか?
依存の意味はインスタンス化したらもう依存したことになるって事でいいんですよね?
では上位と下位の意味は具体的にどういう基準で区分されるのですか?
178デフォルトの名無しさん (スッププ Sdaa-7kop)
2022/07/05(火) 08:09:11.15ID:ZZ3vHKnwd179デフォルトの名無しさん (ワッチョイ 4a01-7o5T)
2022/07/05(火) 11:14:44.01ID:Iq0vQpEV0 >>177
いい質問
抽象度の高いものが上位、抽象度の低いものが下位
別の言い方をすればアプリケーションのコアに近いものが上位、コアから遠いものが下位
↓この図にある円の中心に近い方が上位、周辺に近いほうが下位
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
依存は適切なソース分割が行われてる前提で言えば
usingディレクティブでインポートしてれば依存してることになる
いい質問
抽象度の高いものが上位、抽象度の低いものが下位
別の言い方をすればアプリケーションのコアに近いものが上位、コアから遠いものが下位
↓この図にある円の中心に近い方が上位、周辺に近いほうが下位
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
依存は適切なソース分割が行われてる前提で言えば
usingディレクティブでインポートしてれば依存してることになる
180デフォルトの名無しさん (ワッチョイ 46e9-Pt+j)
2022/07/05(火) 13:13:39.89ID:uajPnlyf0 フォームアプリのListViewで水平スクロールをボタンに連携して動かすことって
出来るでしょうか?
HScrollVarの値を設定できれば実現できるのでしょうが、そういう情報が見つからず。
よろしくお願いします。
出来るでしょうか?
HScrollVarの値を設定できれば実現できるのでしょうが、そういう情報が見つからず。
よろしくお願いします。
181デフォルトの名無しさん (スッププ Sdaa-pAEX)
2022/07/05(火) 13:22:03.56ID:JMpS1h6ad できらぁ!
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- チキンラーメンやカップヌードル、来年4月から5-11%値上げ…袋麺の日清ラ王などは内容量減らす ★2 [蚤の市★]
- 【フジテレビ】『サン!シャイン』3月で終了 放送わずか1年… 谷原章介MC起用も 視聴率低迷、3%台の壁を越えれず 後継番組はなし [冬月記者★]
- 【話題】おでんの好きな具は?! 「だいこん」「たまご」「もち巾着」「ちくわぶ」「こんにゃく」「牛すじ」★2 [ひぃぃ★]
- 【社会】丸亀製麺12月24日は15時30分で閉店 従業員とその家族のため [あずささん★]
- カルボナーラ論争勃発…イタリアの農相がイタリア風の商品に“怒りの投稿” [夜のけいちゃん★]
- 売買春は「性を買う側の尊厳も害される」…平口洋法務相… 東大法学部卒、元高級官僚議員の「素顔」とは [少考さん★]
- 自身の汚職の裁判から逃れるためにイスラエルを戦時下にしていたネタニヤフ、イスラエル大統領に恩赦を要求して、イスラエル国内ガタガタ [805596214]
- 「えっ…これ何が楽しいの?」と思ったスポーツ
- ていうか日本人てふつーに中国のこと嫌いなんやな [455031798]
- じゃん拳、グー🏡💥👊😅👊💥🏡
- ブタをぶったたく
- 犬が布団入ってきた
