C#, C♯, C#相談室 Part92at TECH
C#, C♯, C#相談室 Part92 - 暇つぶし2ch444:デフォルトの名無しさん
17/03/09 23:39:24.67 P0KhFIxP.net
>>427
お前C#向いてないからやめとけ

445:デフォルトの名無しさん
17/03/09 23:40:17.24 4hz9mkjX.net
なんでよ

446:デフォルトの名無しさん
17/03/09 23:45:18.70 ZZ1gzprq.net
>>427
生のADO.NETと比較すると遅くても、実運用に耐えられる程度なら問題ない
遅さのデメリットをメリットが上回る場合に採用すべき
設計ミス
お前の頭が足りてないだけ
抽象化しないとInMemoryやFakeのIDbcontext使ってUnit Testできない

447:デフォルトの名無しさん
17/03/10 00:07:57.78 Kg4/WRpJ.net
>>430
Dapperのところ見ると10倍以上遅いって数字弾いているし
体感上も遅いだろ
URLリンク(github.com)

448:デフォルトの名無しさん
17/03/10 00:14:08.74 cBCq3F3F.net
>>431
日本語

449:デフォルトの名無しさん
17/03/10 00:15:07.75 PorFrx4J.net
>>431
遅いのは皆わかってるんだけど
何言ってんのこいつ

450:デフォルトの名無しさん
17/03/10 00:29:46.92 cBCq3F3F.net
>>431
そのEntityFramework、3世代前くらいじゃね?
こっちの方がまともに比較してる気がする
URLリンク(msdn.microsoft.com)

451:デフォルトの名無しさん
17/03/10 00:35:01.00 PorFrx4J.net
誇大広告ワロタ

452:デフォルトの名無しさん
17/03/10 00:47:22.95 Cysk3AQ/.net
>>431
Dapperを使ってメモリ上でUnit Testやる方法教えて

453:デフォルトの名無しさん
17/03/10 01:56:20.00 YvYLhW/g.net
割といままで関わったプロジェクトは、敢えてスドアドで疎結合にしてるの多かったな。

454:デフォルトの名無しさん
17/03/10 05:22:26.01 hxjDKO5o.net
以下のページを参考にしてい
指定したURLからHTMLを取得するプログラムを作成しております
URLリンク(www.kekyo.net)
取得する処理を作成することは出来たのですが
取得処理を走らせてからリクエストが帰ってくるまでの間
GUIの操作が一瞬とまってしまう現象が発生しております(一瞬フリーズするような感じです)
ですので連続してhtmlを取得したり、サイズの大きなものを取得する場合
長時間フリーズしてしまうことになるので大変困っております
どなたか解決方法をご存知の方がおりましたら
教えていただければ幸いです
よろしくお願いします

455:デフォルトの名無しさん
17/03/10 05:22:50.13 hxjDKO5o.net
ちなみに参考にしたソースは以下の通りです。
public static async Task<string> ReadFromUrlAsync(Uri url)
{
using (WebClient webClient = new WebClient())
{
using (Stream stream = await webClient.OpenReadTaskAsync(url))
{
TextReader tr = new StreamReader(stream, Encoding.UTF8, true);
string body = await tr.ReadToEndAsync();
return body;
}
}
}
public static async Task DownloadAsync()
{
Uri url = new Uri("URLリンク(github.com));
string body = await ReadFromUrlAsync(url);
Console.WriteLine(body);
}

456:デフォルトの名無しさん
17/03/10 07:53:36.33 /HdMhfmB.net
>>437
ストアドはビジネスとデータが密着して全く疎にならないだろ

457:デフォルトの名無しさん
17/03/10 07:55:23.13 LDoDwujD.net
>>437
かわいそうに

458:デフォルトの名無しさん
17/03/10 07:56:43.00 CZUjNxSc.net
普通シングルスレッドでは、処理中は、
進捗状況を表示するプログレスバーでも、描画が止まるから、
GUI/worker用のスレッドは、別々のマルチスレッドにする
プログレスバー描画のサンプルでも見れば?

459:デフォルトの名無しさん
17/03/10 09:46:49.61 ccNaYHW5.net
>>437
そのうちいいことあるよ、頑張って

460:デフォルトの名無しさん
17/03/10 11:25:04.92 LzpSY1Zb.net
>>438
WebClient(とその中で使ってるHttpWebRequest)が
名前解決部分を非同期化できてないっぽい
HttpClientを使おう

461:デフォルトの名無しさん
17/03/10 12:24:52.88 /STnO1DK.net
え?みんなEF使わないがデフォなの?

462:デフォルトの名無しさん
17/03/10 12:26:08.18 Tes7zBzn.net
あんなものを使うのはお勉強ができるだけの無能だけ

463:デフォルトの名無しさん
17/03/10 12:36:20.43 wvkqDHaL.net
>>445
使わないじゃなくて使えないんじゃない?新しいことを学習できないんだよ

464:デフォルトの名無しさん
17/03/10 12:46:27.34 Tes7zBzn.net
新しいものに飛びついてもあとであれはゴミだったというものもたくさんある
EJB2.0とか

465:デフォルトの名無しさん
17/03/10 12:51:59.29 wvkqDHaL.net
>>448
それはその通りだね
EntityFrameworkはもうそろそろ10年たつんだけど

466:デフォルトの名無しさん
17/03/10 13:10:03.19 mpFYTheR.net
やっぱJavaなんやね

467:デフォルトの名無しさん
17/03/10 13:53:22.42 AGPJ29Rn.net
新しいのを使うのも、古いのを使い続けるのも、どっちも長所短所がある
同じ長所短所でも環境によって評価が変わるからどっちが絶対にいいってのはない
それ考慮してどっち使うって当たり前の選択ができない奴多すぎるんだよ

468:デフォルトの名無しさん
17/03/10 15:40:00.20 y8xCqliG.net
>>440
んなの書き方によるだろ

469:デフォルトの名無しさん
17/03/10 18:15:05.97 NraHDdZK.net
使って文句ないやつは使ってればいいのよ。
俺は使うのをやめた。理由を他人に説明する必要も、他人が納得する必要もない。

470:デフォルトの名無しさん
17/03/10 18:36:12.55 wvkqDHaL.net
>>453
使えるやつは使う、使えないやつは使わない

471:デフォルトの名無しさん
17/03/10 18:42:37.52 NraHDdZK.net
そういうこった。俺には使えない。

472:デフォルトの名無しさん
17/03/10 18:43:15.86 NraHDdZK.net
使わなきゃ、使いにくいとこも分かんないからな。

473:デフォルトの名無しさん
17/03/10 18:46:25.98 Gc8NaZGi.net
世の中はまだWinFormsだからな。
新しいものに対応できないジャパン。

474:デフォルトの名無しさん
17/03/10 18:49:44.85 YN/8CtFT.net
>>456
ADO.NET直書き?

475:デフォルトの名無しさん
17/03/10 19:38:33.09 jSwjVui3.net
>>457
Microsoftはバグ管理にExcel使ってるんだぞ
振り回されたらあかん

476:デフォルトの名無しさん



477:sage
DotNet CoreでバッサリWebFormsとDataSet切り捨ててくれたから 日本もこれからはMVCとPOCOにシフトしていくだろうね(希望)



478:デフォルトの名無しさん
17/03/10 20:10:01.97 cBCq3F3F.net
>>445
基本的にはEntityFrameworkで、パフォーマンスほしいとこはDapper

479:デフォルトの名無しさん
17/03/10 20:35:03.91 BdCDiQus.net
dapperって何がいいの?

480:デフォルトの名無しさん
17/03/10 20:40:29.72 cBCq3F3F.net
>>462
上にもいろいろ比較出てるけど、とにかく速くて簡単
DBとオブジェクトの最低限のマッピングだけでいい場合はこれで十分

481:デフォルトの名無しさん
17/03/11 09:49:08.82 +LwMML+J.net
動的だけど滅多にソースが更新されないほとんど静的なページのキャッシュってどう扱えばいいんですか?
クライアントにキャッシュさせて更新があった時だけアクセスしてほしいです

482:デフォルトの名無しさん
17/03/11 09:53:48.23 h5T3JHpB.net
>>464
ブラウザーがやってくれるんじゃないか?

483:デフォルトの名無しさん
17/03/11 13:46:01.01 SoGUL2Zu.net
VisualStudio2017お試しで使ってるんだけれど
タプルとか求めていたものが有ったので使おうとしたら
ValueTupleのライブラリが標準で入らずNuGetにしか無いとか
まだ安定しない無いとか何かあるんだろうか・・・
凄い作りかけ感あるコンパイラに仕上がってるwww
使うべきか暫く様子見すべきか?

484:デフォルトの名無しさん
17/03/11 13:50:47.46 /3A6iA0R.net
Windowsのcsc.exeでコンパイル出来ないC#6.0も見送ってるならそうだな

485:デフォルトの名無しさん
17/03/11 14:02:34.64 SoGUL2Zu.net
タプルの利用はしばらく様子見にしとくか・・・何か怪しいし。
ローカル関数いいね、これやる時名前空間が汚れてインテリセンスが腐るから欲しかった
これだけでも移行価値は無くは無いか・・・
IEnumerable<int> Enumerate(int begin, int end)
{
 if (end < begin
  || end < 0
  || begin < 0)
   throw new System.ArgumentOutOfRangeException("ほげぇ");
 IEnumerable<int> Body()
 {
 for (int i = begin; i <= end; ++i)
  yield return i;
 }
 return Body();
}

486:デフォルトの名無しさん
17/03/11 14:40:42.15 SoGUL2Zu.net
ちらちら見ていると、ValueTaskの方はもっと状況が酷いのかなw
URLリンク(www.buildinsider.net)
言語みたいな基幹部分を小出しにするとか、頭おかしくなってるなw
今までそんな事をした言語の末路がどうなったか知らないわけじゃなかろうに・・・
NuGetにして普通にコードする人には使わせないようにするのは、これはヤバイと中の人が感じているのかもしれんね
マイクロソフトの技術力&組織力低下酷いな、半端に才能ある奴のスタンドプレーでグダクダなってるんだろうな。
Web系に翻弄され過ぎだろ
とりあえず使えそうなのは、ローカル関数と型switchくらいかな
この辺りなら変更あってもダメージ少ないだろうし。
タプルの実装に致命的問題があるならローカルclass&struct&enum宣言でもええんやでぇ
名前空間お腐れ問題はカッコイイ事しなくても、これでも解決するんや > microsoft

487:デフォルトの名無しさん
17/03/11 15:24:01.58 SoGUL2Zu.net
>>218
横だけど、式木はちゃんと言語でサポートしなきゃ誰にも読めない言語になるなと思った。
逆に、それ自体は難解


488:でもないし難しい話じゃないなとも。 プログラムとは違うけれど 3Dモデラーでツリー構造とか法線とか難解な数学概念が見ての通りの操作で動かしたり創れたりするようになって 門外漢の3Dデザイナーが普通に使えるようになったように 一度概念をキッチリ整理する必要があるんだよ、あれは。 そして言語の作りこみがあの頃から甘くなってき始めてたな、ちょっと残念な感じになっていった時代だね。 とりあえず腐り過ぎのWin10をWin7の仕様に戻せや、ストアもユニバーサルアプリも使い物にならん、色使いも糞でUIが見ずらい > microsoft あと、WindowsUpdateのタイミングはユーザーの自由にさせよ、お前がお前のタイミングで勝手にやったら業務はむちゃくちゃになる。



489:デフォルトの名無しさん
17/03/11 22:05:54.03 h5T3JHpB.net
>>466
タプルなんて昔からあるだろ

490:デフォルトの名無しさん
17/03/11 22:18:07.78 15EAzLR8.net
>>471
残念ながら昔からあるTuple<>とは全くの別物
機能的には匿名型にも似ているが、匿名型との互換性もない
ローカル関数なんかも極めて場当たり的なゴミだろ
デリゲートの型を省略できるようにして var func = (int x) => x * 2; と書けた方がずっと便利

491:デフォルトの名無しさん
17/03/11 22:40:13.41 7U1HyGmG.net
>>472
いつからここが初心者用になったんだ

492:デフォルトの名無しさん
17/03/12 01:14:05.08 +ulIycHH.net
>>469
URLリンク(github.com)
によると、.NET4.7に入れることにしたみたいだね
nugetで済むのに.NETのバージョンを上げるのは面倒が多いし、今後C#のリリース速度を早めるならある程度まとめて.NET4.7にしようって考えじゃないかなぁ
言語機能の小出しについても他の言語と比べれば遅いし、互換性と将来を考えて慎重に作ってるから完全な完成を待つと永遠にリリースできなくなっちゃうし、やむをえんだろ
CLRのバージョンを保ってくれれば文句は無い

493:デフォルトの名無しさん
17/03/12 02:13:23.38 lK2SBg8L.net
List<string> list; があって
そのlistのx番目からy個文字列連結したいのですがLinqでどう書けますか?
x番目から3個なら
var result = $"{list.Skip(x).Take(1).FirstOrDefault()}{list.Skip(x + 1).Take(1).FirstOrDefault()}{list.Skip(x + 2).Take(1).FirstOrDefault()}";
こんな感じですけど短く綺麗にしたいのですが…

494:デフォルトの名無しさん
17/03/12 02:33:41.68 tHLqC2EA.net
>>475
var result = String.Join( "", list.Skip(x).Take(y) );

495:デフォルトの名無しさん
17/03/12 05:07:11.99 lK2SBg8L.net
>>476
わー、短くて綺麗。
ありがとうございました。

496:デフォルトの名無しさん
17/03/12 06:43:42.92 RIOf9bqD.net
>>472
>デリゲートの型を省略
できるならとっくにやってるんじゃないかなw
ラムダ式は書けるコードが限定され過ぎるのが問題かな。>>468 はそれではどうやっても書けないでしょう。

497:デフォルトの名無しさん
17/03/12 08:53:09.32 bReP5RFT.net
>>475
自分で理解できねーもん他人に強制するその姿勢がすでにクソ
なんでその処理linqで書いた?
しかも自分は掲示板で質問しなきゃわかんねーのに
さっさと辞めちゃえお前
伸びる目もねーから

498:デフォルトの名無しさん
17/03/12 09:23:31.23 7tB+K/sW.net
何でこの人キレてんの?あの日?

499:デフォルトの名無しさん
17/03/12 10:01:53.12 RIOf9bqD.net
みるからに自演臭くてキモイからじゃねw

500:デフォルトの名無しさん
17/03/12 10:23:22.36 1QMoXo8Q.net
ラムダ式自体は型を持たないから、delegate型と決めつけてvar対応するなら専用のルール付けが必要だと思う。
そこまでする価値は無いかな。

501:デフォルトの名無しさん
17/03/13 06:11:29.33 o9PLbB2Z.net
すいません質問なんですが
アプリ起動中はAキーを推すと左クリック Bキーをおすと右クリック Cキーを押すとアプリ終了
みたいな感じでキー入力をマウス入力にいれかえるようなアプリを作りたいんですが
Windows上でフォーカスのあるウインドに依存せずにキー入力を取得するのってどうしたらいいんでしょうか

502:デフォルトの名無しさん
17/03/13 06:55:37.31 2GKmTNuX.net
以前、遠隔ウイルス片山も似た質問していましたね。

503:デフォルトの名無しさん
17/03/13 07:01:39.19 WHuP7MmV.net
フォームのKeyPreviewプロパティをTrueにすると、すべてのキーイベントをまずフォームが受け取り、処理が終了してからフォーカスのあるコントロールに渡されるようになります。
ってdobon.netで見つけた
やったことはない

504:デフォルトの名無しさん
17/03/13 07:17:17.53 o9PLbB2Z.net
ありがとうございます
KeyPreviewについて調べてみます

505:デフォルトの名無しさん
17/03/15 09:07:02.25 k1u612YY.net
すみません、EFで質問させて下さい。
下記のようにエンティティを定義して、それを編集するクライアントを作ろうとしています。
とりあえず、Modelに対する編集は無効にしてあるものとします。Unitに変更を加えて保存すると、
DBの中でModelのレコードが増えてしまいます。NameにUnique制約を付けると当然例外が派生します。
Unit.ModelがDbContextの管理外になってしまったので、別のインスタンスとして認識されているという理屈は分かります。
contextを都度作成せずに維持していれば、期待する動作になるのも分かりますが、それはできればしたくはないです。
何か上手い解決方法はないでしょうか?
public class Model
{ public int ModelId {get;set;}
 public string Name {get;set;} ※
}
public class Unit
{ public int UnitId {get;set;}
 public VM Model {get;set;}
 public string Serial {get;set;}
}
List<Unit> GetUnitList()
{ using (var context = ...)
 { return context.units.Include(x => x.model).Select(x => x).ToList(); }
}
void UpdateUnit(Unit unit)
{ using (var context = ...)
 { var target = context.units.Where(x => x.UnitId == unit.UnitId).FirstOrDefault()
  target.Model = unit.Model;
  target.Serial = unit.Serial;
  context.SaveChanges();
 }
}
var list = GetUnitList();
...リスト表示->エディタでunit.Serialを編集
UpdateUnit(unit);

506:デフォルトの名無しさん
17/03/15 09:27:37.16 N2+3G59G.net
>>487
そこまで分かってるなら解決策は簡単。
ModelIdで検索し直す。

507:デフォルトの名無しさん
17/03/15 11:16:57.42 k1u612YY.net
>>488
ありがとうございます、すっきりしました。
期待する結果に対してのコストが少々重くなるかなという気はしているのですが、
処理コストが問題になるほどの規模ではないので、そうさせて貰います

508:デフォルトの名無しさん
17/03/16 03:52:05.80 l+qA2/0G.net
C#でwebBrowserを使ってるんですが
以下のhtmlをwebBrowser.DocumentTextに突っ込んで表示させたいんですが
何故かwebBrowserではそのままjqueryを読み込むことが
できないようでスクリプトエラーが発生してしまいました
対処方法のわかる方いたら教えていただけますでしょうか?
↓以下のhtml
<!DOCTYPE html>
<head>
<meta charset=""utf8"">
<script src=""URLリンク(code.jquery.com)


509:.min.js""></script> <script type=""text/javascript""> $(function() { alert(""test"") }); </script> </style> </head> <body>



510:デフォルトの名無しさん
17/03/16 11:36:09.87 oyR0ujl0.net
なんでダブルクォーテーション2つ続いてるの?

511:デフォルトの名無しさん
17/03/16 16:49:18.07 l+qA2/0G.net
エスケープです
文字列に突っ込んでるのをそのままコピペしちゃったのでそのようになってます
すいませんがエスケープは無視して考えてください。

512:デフォルトの名無しさん
17/03/16 16:58:42.52 Qa1xgsfZ.net
<style>
<head>
<body>
</style>
</head>
</body>

最後のbodyを/スラッシュで括ってないからでは?

513:デフォルトの名無しさん
17/03/16 17:03:26.21 RyFuDdep.net
>>493
君は冷静だな

514:デフォルトの名無しさん
17/03/16 17:05:05.86 Qa1xgsfZ.net
HTMLソース
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5サンプル</title>
</head>
<body>
<p>HTML5で作成しました!</p>
</body>
</html>
連投ですまん
もっと解り易いサンプル

515:デフォルトの名無しさん
17/03/16 18:14:35.84 kQHrflry.net
WebBrowserがデフォだとIE7モードで動くせいでjquery 2.1.4が動かない
・jquery 1系使う
・headに
<meta http-equiv="X-UA-Compatible" content="IE=edge">
等を書く
・レジストリでモード変更する
好きなのどうぞ

516:デフォルトの名無しさん
17/03/16 18:38:16.89 RyFuDdep.net
>>496
君は詳しいな

517:デフォルトの名無しさん
17/03/16 20:09:32.60 G/L2rMHg.net
簡単に単体テストできるのか知りたいです
public static async Task DoHeavyAsync(string path, IProgress<long> progress, CancellationToken token)
という非同期メソッドの単体テストで、同期版の DoHeavy() と同様のテスト以外に、
(1) progress が動作していることの確認
(2) token が動作していることの確認
が必要だと思います
(1) が簡単ではない
var progress = new Progress<long>(n => { Assert.Fail(); });
などやっても、テストが成功してしまう(レポートがメソッド終了後に届くため)
まじめにやるとしたら別スレッドを作る必要がありそう?
(2) は、巨大ファイルを使って new CancellationTokenSource(20) などでキャンセルされることを確認という
汚い手法でテストしています(処理速度があがった場合にテストが失敗する可能性があるのが汚い点)
(1)と(2)、それぞれどのようにテストするべきでしょうか? 特に(1)
NUnit を使ってますが、他のフレームワークでもいいです

518:デフォルトの名無しさん
17/03/16 20:16:08.57 kgKaK9fl.net
非同期処理の確実なテスト方法は存在しないのでどっかで妥協しなきゃならない

519:デフォルトの名無しさん
17/03/17 07:37:50.30 gTyXrRTf.net
よく分からんな
Taskなんだから結果が出るのを待機すればいいだろ
Progressは呼ばれたらcalledフラグを立てるようにしてそいつでAssetする
タイムアウトが必要かどうかは状況次第
2つめは、内部でFileStreamを使っているならだが
Streamを受け取るインターフェースを追加する
クッソ遅いStreamは自由に再現できる

520:デフォルトの名無しさん
17/03/17 08:16:11.77 VDcrtJ6N.net
>>496
ありがとうございます!大変助かりました!

521:デフォルトの名無しさん
17/03/17 21:11:54.40 G6TjLWRU.net
>>499
やっぱり妥協かなー
>>500
(2) はなるほどね。作ってみる
(1) なんだけど、Progress.Report() での通知は、タスクを await で待機したとしても、
待機が終わった後でも Action<T> が呼ばれているとは限らない
巨大なタスクを


522:渡して、 Progress.Report() が『たぶん』呼ばれるという妥協が必要かなー 単体テストをパスしたとしても、たまたま運良く Action<T> が先にスケジュールされただけだよ 下記のコードはうちの環境ではテストに失敗してた public static async Task DoLightAsync(IProgress<long> progress) { await Task.Delay(10); progress.Report(123); } [Test] public async Task DoLightAsyncTest() { bool called = false; await DoLightAsync(new Progress<long>(n => { called = true; })); Assert.IsTrue(called); }



523:デフォルトの名無しさん
17/03/18 00:00:39.16 3lIBsEeS.net
惜しいところまでは行ってるな
Progressのインスタンスを渡すのではなく
IProgressを継承し同期のReportを実装したクラスのインスタンスを渡す

524:デフォルトの名無しさん
17/03/18 10:58:29.15 UTVmwL6L.net
ふむー、こうか
確かに Progress<T> にこだわる必要はなかったなー
public class SynchronousProgress<T> : IProgress<T>
{
private readonly SynchronizationContext _Context;
private readonly Action<T> _Action;
public SynchronousProgress(Action<T> action)
{
_Action = action;
_Context = SynchronizationContext.Current ?? new SynchronizationContext();
}
private void Callback(object state)
{ _Action?.Invoke((T)state); }
public void Report(T value)
{ _Context.Send(Callback, value); }
}
見づらいと思うので一応 pastebin にも貼っておく
URLリンク(pastebin.com)

525:デフォルトの名無しさん
17/03/19 00:14:21.68 xAk2llJg.net
ファイルのタイムスタンプを指定した時刻に変更したいんですが、コードのヒントをくださいm(_ _)m

526:デフォルトの名無しさん
17/03/19 00:19:27.37 8DI2TWvJ.net
>>505
FileInfo

527:デフォルトの名無しさん
17/03/19 00:30:52.74 VKtnwSVx.net
「ファイルのタイムスタンプ」でグーグル先生に聞けば
URLリンク(www.atmarkit.co.jp)
が一発で出てくるんだけど掲示板で聞く方が面倒じゃないの

528:デフォルトの名無しさん
17/03/19 06:34:49.31 bkt1N2YW.net
検索知らないんでしょ

529:デフォルトの名無しさん
17/03/19 13:50:14.09 PWrmpV5o.net
2chスレへたどり着けるのに検索知らないとかこれ如何に

530:デフォルトの名無しさん
17/03/19 14:33:00.16 DWsQT7k4.net
「お前ら、検索頼むわ(丸投げ)」

531:デフォルトの名無しさん
17/03/19 14:45:08.30 1DEeFth3.net
おまいらは回答する機械

532:デフォルトの名無しさん
17/03/19 14:53:33.02 VKtnwSVx.net
まあ調べたら自分の新しい知識になる場合もあるからいいんだけど
この程度の事も検索しないのならコードなんか書けないような

533:デフォルトの名無しさん
17/03/19 15:03:19.30 lJcyTqFl.net
プログラムやる奴らって質問されるとキレながらも答えたい願望あるんだよな
そして煽って議論させるのも好き
だからわざわざ検索しないでここに投げてあげたりする

534:デフォルトの名無しさん
17/03/19 15:04:25.29 1DEeFth3.net
それにしたって餌としてはしょぼすぎる

535:デフォルトの名無しさん
17/03/19 15:10:14.91 p4p+SSjy.net
ボランティアを馬鹿にすんじゃねーぞ、コラ!

536:デフォルトの名無しさん
17/03/19 16:02:53.06 T5IZ831S.net
人力検索

537:デフォルトの名無しさん
17/03/19 16:06:30.35 z5/tCjGK.net
>>513
そういうのは初心者向けふらっとの方でやってくれw
あそこなら解決済みでもグダグダ続けたがるのがいっぱいいる

538:デフォルトの名無しさん
17/03/19 18:48:36.73 lJcyTqFl.net
>>517
でも質問してくれないと寂しいんだろ?

539:デフォルトの名無しさん
17/03/19 18:52:31.68 bcM43571.net
くだ質とかVSスレとかこの板で変なやつ増えたよな
本当にプログラムやっているのかって感じの
ここにも来てるのか

540:デフォルトの名無しさん
17/03/19 21:56:16.72 HC9gBYvT.net
マ板行けって思うスレ多いよな

541:デフォルトの名無しさん
17/03/20 01:44:39.35 SU/B8


542:MWa.net



543:デフォルトの名無しさん
17/03/20 10:11:03.85 Afs087wZ.net
>>520←コイツの馴れ合おうとするレスうざっ

544:デフォルトの名無しさん
17/03/20 12:24:29.57 y4a+UdUh.net
>>522
マ板行け

545:デフォルトの名無しさん
17/03/20 14:10:48.91 pi/vFj6F.net
>>523お前が行け

546:デフォルトの名無しさん
17/03/20 14:57:32.61 98bjORSB.net
ここは幼稚園じゃないんだが。

547:デフォルトの名無しさん
17/03/20 15:41:51.51 4DDUMBY5.net
似たようなもんよ

548:デフォルトの名無しさん
17/03/20 15:48:57.55 LcNjV7jZ.net
言い争いを見てたら幼稚園児とたいして変わらん気がする

549:デフォルトの名無しさん
17/03/20 16:00:23.53 pi/vFj6F.net

いい加減うざいって、お前らずっとスレちがい

550:デフォルトの名無しさん
17/03/21 05:52:14.36 SG0A/rfm.net
ただいま C# 7.0 利用中
ジェネリックのローカル関数まで書けるのにオーバーロードは出来ない事に気づいてがっかりモードになっている件
なぜできんOrz
あと大抵の場合キャプチャは要らないんだけどな・・・
0b1110_1011 とか二進数のリテラル地味に便利w

551:デフォルトの名無しさん
17/03/21 06:45:57.61 0zsWCCNl.net
オーバーロードはクラス外からみて合理的なインターフェイスを提供するためのもので、
内部で使うだけなら紛らわしいだけだろ
オーバーロードが欲しくなるほど長いメソッドを作ること自体が間違ってるし

552:デフォルトの名無しさん
17/03/21 14:40:35.20 SG0A/rfm.net
>>530
そんな事は無いよ、型別にスイッチするくらいならオーバーロード見通しいい

553:デフォルトの名無しさん
17/03/21 19:18:26.99 bA9h/8/p.net
似たような処理するのにメソッド2つも要らない
中で分岐させて使え、その方が保守楽だから

って言われたことある。
オマエラも結局中で分岐させてる?

554:デフォルトの名無しさん
17/03/21 19:23:26.02 qbQ1Fjub.net
>>532
時と場合による
何でもかんでも共通部分をまとめようとするのはバカだが

555:デフォルトの名無しさん
17/03/21 19:24:42.66 qRIPyX6L.net
内部の分岐とかどうでもよくね?
似たような処理のメソッドが複数出来る時点で設計からして間違っているだろうし

556:デフォルトの名無しさん
17/03/21 19:30:08.87 72kEtT2Q.net
>>530
利用するかどうかは別にしてわざわざ禁止するほどのことではないよね
ってことだろ

557:デフォルトの名無しさん
17/03/21 19:31:27.83 qbQ1Fjub.net
>>534
ループ中で分岐処理が必要な場合があるので2行目は違うと思う
速度ちょっとでも稼ぎたいと思ったらループの外で分岐させておくだろうし

558:デフォルトの名無しさん
17/03/21 19:39:30.55 RrALGwyw.net
>>532
そういうことするとすぐに分岐が増えて収集がつかなくなる
この業界は既存のコードの権力が強すぎる
一回でもはまるともう最後まで逃れられない
だから最初から妥協せずクリーンな状態を維持し続けるしかない

559:デフォルトの名無しさん
17/03/21 19:50:56.44 UqOt5XZ1.net
だったらなおのこと分岐のが楽だな
実行して見ないとなんの処理が走るか分からないコードにメリットなんて感じない
資料にも書けないしお客さんにも説明できない

560:デフォルトの名無しさん
17/03/21 20:14:47.71 7sd4gAxo.net
>>535
オーバーロードを許すと実装コストは増えるよ
オーバーロードされたメソッドのマングリングってこれまでにやったことないはず
クソ長いメソッドを定義する馬鹿のために無駄な実装コストをかけることは許容できない

561:デフォルトの名無しさん
17/03/21 23:05:57.08 UqOt5XZ1.net
マンコリング?

562:デフォルトの名無しさん
17/03/22 02:05:33.87 Y


563:DOC/IGa.net



564:デフォルトの名無しさん
17/03/22 02:11:31.86 YDOC/IGa.net
なんであんなに変更可能キャプチャが好きなんだろうな・・・
関数型言語のように一度割り当てられたら変更がないことが保証されれば見通し良いし使い勝手も良いけれど
手続き型言語にキャプチャが入ると見通し悪い事この上ないから、可能な限り使わないようにしたい気分になっている。

565:デフォルトの名無しさん
17/03/22 11:28:29.87 hks7EAC1.net
C#の糞拡張はこれからが本番ですよ。

566:デフォルトの名無しさん
17/03/22 12:58:18.38 7zaDxJTN.net
文句あるなら自分で言語作ればいいのに
何で作れない分際で文句言ってるんだか

567:デフォルトの名無しさん
17/03/22 13:01:02.87 +8Koiwe2.net
基地外発想だな

568:デフォルトの名無しさん
17/03/22 13:23:33.31 6nIA/xoV.net
フジテレビ的発想

569:デフォルトの名無しさん
17/03/22 13:50:44.67 FLtL2zh7.net
自分で作れないから文句言ってんだろ
お前も同レベルに頭わるそうだなw

570:デフォルトの名無しさん
17/03/22 14:47:13.98 T50yqk9Q.net
>>544
できらぁ!

571:デフォルトの名無しさん
17/03/22 15:44:09.05 YDOC/IGa.net
ValueTuple使ったら、変数見えないデバッグできねぇwwww
まさに作りかけwwwww

572:デフォルトの名無しさん
17/03/22 15:45:53.48 YDOC/IGa.net
>>544
みんなで同じものを使うから意味があるんだよ、一人で勝手に作って勝手にやってたら滅茶苦茶なるだろw

573:デフォルトの名無しさん
17/03/22 19:44:37.37 JvcKijZm.net
ヘジたんも言語なんか開発するのは時間の無駄だからやめなさいと言っていたしな

574:デフォルトの名無しさん
17/03/22 20:41:21.23 qEl3ed9E.net
だれよ

575:デフォルトの名無しさん
17/03/22 20:59:39.74 eP+YAd4z.net
>>549
それ、お前がメクラなだけじゃね?

576:デフォルトの名無しさん
17/03/22 21:17:25.63 YDOC/IGa.net
>>552
Delphiの開発者で、ゲイツ御大にC#のアーキテクトしてボーランドから引き抜かれた人

577:デフォルトの名無しさん
17/03/22 21:23:40.38 YDOC/IGa.net
暫く使ってみたけど、やっぱ、ラピッドリリースはよくねぇよな
どんどん品質が落ちていく
誰だよこんな糞な手段はやらした馬鹿は
Windows10もVisualStudioもボロボロやん

578:デフォルトの名無しさん
17/03/22 22:28:00.53 MyrW3Mfd.net
>>555
どんどんお前が老いていってるだけ

579:デフォルトの名無しさん
17/03/22 22:41:57.96 Qh2JSeLT.net
最近思うんだけどRazor使わずに普通のhtml+JS+REST API(.NET)の方が開発しやすくない?
Razorって本当に便利なのかな?生産性あがる?

580:デフォルトの名無しさん
17/03/23 01:12:53.78 eX8m9MWo.net
業務アプリで同じような画面を大量生産するには便利A: [1.201975 sec.]B: [2.281051 sec.]

581:デフォルトの名無しさん
17/03/23 01:47:02.34 FaFIhE+0.net
C#に限らずかもしれないけれど、invokeってフォームに限ってどうして必要なのですか?
invokeを書けばメソッドを呼び出してプロパティにアクセスできるのは分かるのですが
invokeがないと何がダメなのか内部的なことを教えていただけますか?

582:デフォルトの名無しさん
17/03/23 01:52:24.45 Un9Q+jtZ.net
>>556
心配しなくても若い子はもうWindowsも使わなければVisutalStduio何それ?状態だからw
みんなWeb系でスマホばっかりやっている。
もう、ここに残


583:っているのは年寄りだけだよw



584:デフォルトの名無しさん
17/03/23 01:56:59.96 Un9Q+jtZ.net
>>559
昔のシングルスレッド時代の遺産を引きずっているんだよ
Formは、半ばラッパーライブラリなので。
シングルスレッドの利点はデッドロックの可能性がないこと。
マルチスレッド当たり前になってしまった今だと、逆にデッドロックの元になってしまったりと困った有様だけど。
遺産の量が大きいので、全く別の物を作るのは簡単ではないだろうね。

585:デフォルトの名無しさん
17/03/23 02:00:44.79 FaFIhE+0.net
>>561
ありがとうございます
もっと詳しく知りたいのですがどう言葉で調べればよいのでしょうか?
できればネットで調べれるものがよいのですが、書籍でも平気です
英語のサイトでも平気です
なにかあれば教えていただけますか?

586:デフォルトの名無しさん
17/03/23 02:04:38.43 VjAjr2s9.net
>>559
UI関連は、UIスレッドでのみ動作することを前提に設計することで、パフォーマンスを上げてる。
マルチスレッド対応にすると排他制御等が増えてしまい、パフォーマンスが下がる。
>>561
非同期処理とか書きやすくなったから、最近は割と楽だろ。
Invokeも使う必要ないし。

587:デフォルトの名無しさん
17/03/23 02:05:51.99 Un9Q+jtZ.net
>>562
C言語から、直接Win32APIを叩いてみればわかると思うよ。
WM_XXXXとかを直接使ってGUIを動かしてみれば、古いインターフェイスの感触どんなもんか分かるかと。
年代物なので、古本屋でWin32の本でも探してみるのもいいかも。
今更みる価値あるのかって思うので、お勧めはしないけど。

588:デフォルトの名無しさん
17/03/23 02:07:28.88 Un9Q+jtZ.net
>>563
Task作った奴はバカだと思うwww
Invokeの方がまだ誰にでも分かりやすい。
継続なにそれおいしいのwww
関数型言語面白いねって感じだね

589:デフォルトの名無しさん
17/03/23 02:09:33.89 Un9Q+jtZ.net
このマルチコア時代にシングルスレッドで頑張ってパフォーマンス上げるとか
時代錯誤も甚だしいよな・・・

590:デフォルトの名無しさん
17/03/23 02:16:32.78 FaFIhE+0.net
>>563,564
新人にinvokeを教える際に困ってしまったので
浅くでも知識として知っておきたかったので助かりました
Win32からの流れなのですね、Formだけこんなに違うのはそういうことなのですね。。
時間があるときにもう少し調べてみようと思います
ありがとうございました

591:デフォルトの名無しさん
17/03/23 02:21:34.59 VjAjr2s9.net
>>565
async/awaitやIProgress<T>あるから、Taskの継続を直接使う事はあまり無いな。
間接的には使ってるわけだが。

592:デフォルトの名無しさん
17/03/23 02:21:39.46 9gkqdxMB.net
>>566
時代関係ないから
スレッドセーフにするとパフォーマンスが犠牲になるのはUIだけじゃない
BCLのクラスのインスタンスメソッドも大半はスレッドセーフじゃない

593:デフォルトの名無しさん
17/03/23 02:22:11.13 Un9Q+jtZ.net
Win32は、当時のオブジェクト指向の実現にむけての試行錯誤が見れるのは面白いかもしれない
メッセージ飛ばしたり、メール飛ばしたり、色々試行錯誤の末にC++の仮想テーブル方式にたどり着く訳だけれども
その前の段階のオブジェクト指向が見れるよw

594:デフォルトの名無しさん
17/03/23 02:23:39.71 Un9Q+jtZ.net
>>569
いつまでも凝り固まってますねwww
もうハイハイって感じですわ

595:デフォルトの名無しさん
17/03/23 02:28:42.19 Ei+8urX3.net
しかしGUIなんて所詮人間速度だし、パフォーマンスって要らないよな?
フォームに関しては最初からマルチスレッド対応でinvokeの必要無しの方が良かった気がするが。

596:デフォルトの名無しさん
17/03/23 02:30:27.90 9gkqdxMB.net
>>571
いるよね、こういう量的な進歩と質的な進歩の区別のつかない�


597:z 馬鹿な奴だ



598:デフォルトの名無しさん
17/03/23 02:31:53.25 VjAjr2s9.net
何でもマルチセーフにすれば良くなるってもんでも無いのね。
排他制御のコストは大きいから、なるべくそれを無くす設計が重要。

599:デフォルトの名無しさん
17/03/23 02:32:30.61 Un9Q+jtZ.net
>>572
いやいや、それでもあった方がいいよ
マルチスレッドできっちり分散できれば、1CPU辺りの負荷が軽くなる
すると低クロックで動いて消費電力が小さい。
シングルスレッドだと、同じ負荷でも1CPUに集中するからクロックが上がってしまう。

600:デフォルトの名無しさん
17/03/23 02:35:01.08 Un9Q+jtZ.net
>>573
質的にはTaskは逆立ちして徒競走しているようなモンだなw
普通立ってに走れよ、頭オカシイんかいってなもんだね。

601:デフォルトの名無しさん
17/03/23 02:36:32.46 9gkqdxMB.net
しかし、マルチコアっていうのは苦し紛れの「苦肉の策」であってポジティブな進歩じゃないって
パソヲタレベルでも知ってる常識だと思ったけどプログラマでもそういう認識がない奴がいるんだね。
そういう奴は「人月の神話」って言葉も聞いたことないんだろうな。
生産性は作業者の投入人数に比例しないのはコンピュータも同じだよ馬鹿

602:デフォルトの名無しさん
17/03/23 02:38:13.08 Ei+8urX3.net
>>575
いやお前実は分かってないだろ。
575はinvokeを肯定しているぞ。てかお前どっち派よ?

603:デフォルトの名無しさん
17/03/23 02:40:35.49 Un9Q+jtZ.net
>>578
async / await 最新わかってる俺スゲーなヤツが死んでほしい派
技術的には、まぁあるもん使うさってなもんだ。

604:デフォルトの名無しさん
17/03/23 02:57:11.32 VjAjr2s9.net
>>576
Taskはスレッドプールを使いやすくしたもの。
スレッドプール自体は昔から使われるテクニックだし、なんでそこまで嫌うのか分からん。
Taskのおかげで非同期処理が非常に楽に扱えるようになったのに。

605:デフォルトの名無しさん
17/03/23 03:07:35.11 Un9Q+jtZ.net
>>580
以前作って滅びたATLなんかと同じだね、入門者がすぐに理解して使えない物は糞
WPFも同様の香りがするね
分からないけれどなんとなく使えているって人だらけになって理解していないから、エラー対処ができない。
そうすると、全部特定の人に負担が行く、そんなコードやライブラリは使えない。
これはマイクロソフトの象牙の塔だよ

606:デフォルトの名無しさん
17/03/23 04:45:12.92 0wLqn0eU.net
ATLがいつ滅んだんだよw

607:デフォルトの名無しさん
17/03/23 07:10:17.81 UmFjwc/F.net
昔の名残とかじゃなく、単にマルチスレッドでUI部品を扱うのが大変だということだと思うんだが
ユーザーインターフェイススレッド - Wikipedia
URLリンク(ja.wikipedia.org)
>例えば、Java の AWT では、1996年の最初の時点では、
>単純にスレッド間でデータ共有型のマルチスレッドになっていた。
>しかし、データ共有するには、ロックをかけないといけないが、
>親コンポーネントから子コンポーネントを呼んだり、
>コールバックで子から親を呼んだり、
>アプリケーションからGUIライブラリを呼んだり、
>GUIライブラリからアプリケーションをコールバックしたりと、
>双方向に呼び出すことが多く、
>異なるスレッド間で双方向に呼び合うときは、ロックの順番に注意を払う必要がある。
>これはソフトウェアが非常に複雑になる原因となってしまう。
>また、ロック順序のミスが引き起こすデッドロックは常にではなく
>たまに発生したりすることの多いバグ(時間的確率要因が関与する偶発性のあるバグ)であり、
>バグ取りが大変になるという問題があった[


608:3]。 > >そこで、1997年の Java の Swing からは、 >UI の操作は全てメインのUIスレッドであるイベントディスパッチスレッドから >操作しなくてはならない、というルールを設けた。



609:デフォルトの名無しさん
17/03/23 07:23:37.05 i5lX3ZQq.net
それを昔の名残とかラッパー、速度優先って言ってるんでしょ
マルチスレッドにしようと思ったらできるんだから

610:デフォルトの名無しさん
17/03/23 08:05:24.99 eX8m9MWo.net
WinFormsやWPFを含めたGUIフレームワークって
イベントハンドラなどのユーザーコードに制御を渡す前後で
一時的に状態を変えたりしてることが多いから、
それ以外のタイミングで触られると壊れる
結局それを防ごうとするとユーザーコードの実行タイミングまでブロックすることになるので、
Invokeと変わらなくなる

611:デフォルトの名無しさん
17/03/23 08:14:01.02 HovpjxiM.net
>>584
> マルチスレッドにしようと思ったらできるんだから
話がループしてるぞ
やればできるけどコールバックとかでロックの管理が面倒だしUIだから極限まで性能追い求める必要もないから
>> UI の操作は全てメインのUIスレッドであるイベントディスパッチスレッドから
>> 操作しなくてはならない、というルールを設けた。
ってことだろ

612:デフォルトの名無しさん
17/03/23 10:27:00.68 BTeOg9CT.net
>>564
COMのアパートメント問題を解決するためじゃないの?
厳密にはInvokeしなくて良いケースもあるけど、それを保証する方法が皆無に等しいという。
ウインドウメッセージ云々とか、本質とはかけ離れている気が。

613:デフォルトの名無しさん
17/03/23 12:30:56.91 Un9Q+jtZ.net
>>582
もう誰も使っている奴いないだろう、放棄されて保守だけが残っている。
こういう技術はいずれそうなるよ

614:デフォルトの名無しさん
17/03/23 12:53:23.45 Un9Q+jtZ.net
>>586
UI側がバージョン管理システムみたいな扱いをすればいいんだと思うけどね
非ロック型で同期をとる方法としては有効だと思う。
いわゆる
読み込んで、内容を変更して、読み込み時点データとともにUIに返す。
UI側は、ロックして読み込み時点と現状が一致しているなら置換してアンロックそして処理終了。
ロックオブジェクトが自分自身に限られるからデッドロックの可能性はない。
この方法の場合、読み出すだけならロック不要でいつでも読み込めるしね。
俺は、UIに関してはそういう設計にして自分のメソッドはすべてスレッドセーフだ。
長年の実績ある方法だし、このやり方は非常に優れていると思う。
更新失敗とリトライは発生するが、並列度はかなり高くなる。
デッドロックは皆無で、見通しも良い。

615:デフォルトの名無しさん
17/03/23 12:55:44.66 Un9Q+jtZ.net
>>589 に追加
これのよい所は、バージョン管理システムは普通誰でも使わなきゃならないもので
どういう風に機能させるのか誰にでもすぐ分かる。
問題が発生しても初心者に簡単に解決できるという点が良いと思っている。

616:デフォルトの名無しさん
17/03/23 17:07:47.97 EtPn1ouj.net
なんか酷いやり取りだね
マルチスレッドを根本的に理解してないのが何人かいるねw
スレッドセーフに作ることは高コストだから特に理由がない限りそうしないのは
マルチスレッド理解の初歩の初歩だと思うんだけど。
あれだ、UIは別スレッドからのアクセスを検出して例外投げるようになってるわけだけど、
例外が投げられなければ何も問題ないはずだ、っていうVBerな発想なのかねw

617:デフォルトの名無しさん
17/03/23 17:21:43.84 ncdnXTN/.net
.NETは実行コストよりも実装コストを重視する傾向にあるからね
スレッドセーフなformになってもいいと思うわ

618:デフォルトの名無しさん
17/03/23 17:24:03.63 30c+rZIc.net
>>592
君のコードはイベントハンドラが並列に実行されても大丈夫?
利用する側の実装コストも確実に跳ね上がるよ

619:デフォルトの名無しさん
17/03/23 18:15:58.21 ncdnXTN/.net
マルチスレッド動作のformにとは言ってないんだよ・・・

620:デフォルトの名無しさん
17/03/23 18:57:02.57 99dRkoLd.net
>>592
そこでwpfのバインディングですよ

621:デフォルトの名無しさん
17/03/23 1


622:9:28:24.32 ID:Un9Q+jtZ.net



623:デフォルトの名無しさん
17/03/23 19:30:23.84 Un9Q+jtZ.net
バインディングとか最悪やな、何処がどうなっているのか把握できる人間が居なくなって
誰にもメンテできなるなる典型w

624:デフォルトの名無しさん
17/03/23 19:32:40.10 Ei+8urX3.net
>>583
> GUIライブラリからアプリケーションをコールバックしたりと、
これってあるか?ピンとこない。
そもそも、UIってロックする必要があるか?
現状、UIスレッドとタスクスレッドは別で、結果的にプログレスバー等の更新にはinvokeを使うしかない。
これがウザイから「直に書き込みさせてくれ」というのが俺の希望。
そもそも、排他的な実装をしなければならない理由がないだろ。
プログレスバーなんて普通は共有しないし、
してたらしてたで「どちらの内容が表示されてもいい」が仕様になるのだから、
レーシングしたところで問題ない。
結果、リクエストがあったらただ更新すればいいだけ、それを表示すればいいだけ、で終わりじゃないか?
ファイルみたいにロックありきの物ではないと思うんだが。

625:デフォルトの名無しさん
17/03/23 19:35:54.46 g/kXmQSp.net
マルチスレッドアクセス可能なGUI採用してるシステムなんてあったっけ
UIスレッドモデルが遺産だというのなら
新しいシステム(Windowsに限らんぞ)ほど「そうなってはいない」はずだが
実際は最近のOS(やはりWindowsに限らない)でもUIスレッドモデルだ
何故だろうなあ
下手の考えなんぞ大抵は
「先人が思いついたけどあえてやらなかった」か「すでに失敗した」か

626:デフォルトの名無しさん
17/03/23 19:36:15.02 Un9Q+jtZ.net
Haskellみたいに極度に小さい記述で複雑なシステムが組めるのは確かに凄いんだよ
あれはマジ使える、ただし誰にでも使えるものでは無い。
こういう物は、チーム作業には向かない。
少人数で高度なプログラミングをするのには向いているがね。
で、C#はHaskellみたいなアプリケーションを作るために開発されたものなのかというと、それは違う。
誰でも使えるBasicの延長線上のものだ。
TaskもWPFもHaskellみたいな超絶技巧を目指しているだな、そんなものは要求されていないのに。

627:デフォルトの名無しさん
17/03/23 19:37:49.41 Ei+8urX3.net
>>595
あー、WPFのバインディングはこれを目指していたのか。
なるほど俺の要求だけならこれでいいわ。

628:デフォルトの名無しさん
17/03/23 19:39:47.03 FkdET+B0.net
不思議だな
新しい技術のおかげでプログラミングはますます簡単になってるのに
まるで難しくなったような意見が出てくる

629:デフォルトの名無しさん
17/03/23 19:40:57.33 Un9Q+jtZ.net
結局ね、マイクロソフトの技術者はコンセプトという物が理解できないバカの集団と化してしまったんだよ。
多分、社内政治とスタンドプレーの果てにこうなったんだろうなと。
だから、マイクロソフトは象牙の塔。
勉強しまくっているが自分のやっている事しか見えていない奴が音頭を取り始めてしまっている。

630:デフォルトの名無しさん
17/03/23 19:46:09.55 J2eFkRx5.net
ほーん、で?いちいち同意求めんなカス
知恵袋で恋愛相談してるクソアマかテメー

631:デフォルトの名無しさん
17/03/23 19:57:59.50 HovpjxiM.net
>>589
> UI側は、ロックして読み込み時点と現状が一致しているなら置換してアンロックそして処理終了。
一致してない時に再計算をする必要があるからその計算が軽い時に有効な方法
ちなみにバージョン管理システムでは他の人が変更してるからやり直せって言ったら使い物にならないのでいわゆるマージ処理を行うのでちょっと違う

632:デフォルトの名無しさん
17/03/23 20:26:39.42 HovpjxiM.net
>>598
GUI 組んだことないのか?
イベントってフレームワークからのアプリケーションの呼び出しだぞ
あとロックするのは GUI のフレームワークじゃなくてア�


633:vリケーションの方 マルチスレッド化したフレームワークだとイベントっていつ発生するかわからないのでお前みたいなよくわかってない奴が組むとデッドロックを引き起こしたりしやすいって話



634:デフォルトの名無しさん
17/03/23 20:27:34.06 99dRkoLd.net
>>601
但しコレクションに関してはBindingOperations・・・のおまじないが必要だ

635:デフォルトの名無しさん
17/03/23 20:48:03.89 Ei+8urX3.net
>>606
今時GUIしかやらんだろ。
が、まあこっちの認識がずれていたのは分かった。
>アプリケーションからGUIライブラリを呼んだり、
>GUIライブラリからアプリケーションをコールバックしたりと、
>双方向に呼び出すことが多く、
前者が「プログレスバーの更新」で、
後者が「 XXX.click += YYYY;」か。
確かに双方向だ。
で、ロックは必要か?
プログレスバーの更新なんて、ロックする必要ないだろ。
他もそうだと思うが。

636:デフォルトの名無しさん
17/03/23 20:49:29.54 30c+rZIc.net
>>606
具体的な最大の問題は、マルチスレッドアクセスを許容するとUIスレッド上で排他処理をしなきゃいけないことなんだよな
UIスレッドは多種多様なタスクによってタイトに使い回されるので、それをブロックすることは容易にデッドロックを引き起こす
UIスレッド上で別の処理Xが終わるのを待ってたら、XもUIスレッド上で呼び出される処理で
いつまでもXが呼ばれなくなりデッドロック、というのはよくあるパターン

637:デフォルトの名無しさん
17/03/23 20:55:57.96 30c+rZIc.net
>>608
そのプログレスバーの更新一つとっても中でどれだけ複雑なことをやっているかは君にも想像できるだろ?
君がロックしてるつもりがなくてもプログレスバーの更新処理を呼び出せば内部で当然ロックがかかる

638:デフォルトの名無しさん
17/03/23 21:00:57.40 Ei+8urX3.net
>>609
普通に組んだらデッドロックはしなく無いか?例えば、
1. UI <- Task_thread_A で Aが止まる。
2. Task_thread_A <- Task_thread_B で Bが止まる、ここまではありがち。
3. Task_threadB <- UI :これはねーよ。
UIスレッドがTaskスレッドを見てロックするという使い方は普通しないだろ。

639:デフォルトの名無しさん
17/03/23 21:14:48.29 Ei+8urX3.net
>>610
いや、ロックの必要はないだろ。
正確に言えば、外部からの明示的なロックが必要無いように作れば作れるだろ。
今そうなってないだけで。
要するにプログレスバーを UI, Task_thread_A, Task_thread_B の
どこからも更新出来るようにしたいとして、
全部、 progressBar.value = x; と書かせろ、と言いたいだけで。
内部的に細かくロックして、順に処理するのはCLRが勝手にすればいい。
その結果、それぞれのスレッドが微妙にロックするのも仕方ない。
ただ、循環ロックにならない限り、デッドロックにはならないだろ。
そして普通に書けば、循環ロックにはならないだろ。

640:デフォルトの名無しさん
17/03/23 21:17:21.47 5A+rvbXC.net
独りで仕方ないと思って存分に射精してろハゲ

641:デフォルトの名無しさん
17/03/23 21:24:07.98 NnBP2eXC.net
>>608
GUIしかやらない?どこの世界の話だよ

642:デフォルトの名無しさん
17/03/23 21:27:34.82 VjAjr2s9.net
>>589
アトミックなデータでない限り、読み出しでロックが不要は誤り。
更新中の中途半端なデータが読みだされたらどうすんの。

643:デフォルトの名無しさん
17/03/23 21:30:44.46 5A+rvbXC.net
生兵法はケガの元だな
毛がなくて良かったね~

644:デフォルトの名無しさん
17/03/23 21:32:55.65 HovpjxiM.net
>>608
> あとロックするのは GUI のフレームワークじゃなくてアプリケーションの方
の意味を理解してないのかよ...
そりゃ単純にプログレスバーに表示するぐらいなら問題は発生しないよ w
例えば複数の銀行口座の預金額を表示して振り込みを行うアプリケーションを作るとして
他の端末から入/出金があるのです定期的に預金額を更新しようとしたら各口座をロックして値を読み出してロック解除して画面を更新するだろ
でないと額の不整合が起きるからな
このロックして時に振り込みボタンが押されたら当然こっちも振り込み元と振込先の口座をロックしないとダメだろ
でこのロックの順番がテレコになってたら簡単にデッドロックをするって訳
もちろんちゃんとロック順序を考えて組めばいいんだけどでかいシステムをよくわかってないドカタに組ま


645:せることを考えたらわざわざそんな危険な構造にする意味がないってこと 前にも書いたけどUIなので超高速で画面のあちこちが更新できても意味ないしな



646:デフォルトの名無しさん
17/03/23 21:33:06.10 0wLqn0eU.net
>>588
寝ぼけるのはいいかげんにしろ。

647:デフォルトの名無しさん
17/03/23 21:34:23.52 5A+rvbXC.net
3行以上はキチガイ

648:デフォルトの名無しさん
17/03/23 22:20:43.54 ncdnXTN/.net
>>617
> 定期的に預金額を更新しようとしたら各口座をロックして値を読み出してロック解除して画面を更新するだろ
そういう糞UIでもつくれるけど、まともだったらやらないよ・・・

649:デフォルトの名無しさん
17/03/23 23:30:21.13 u0oYY3Ci.net
>>620
で、お前はどうやるんだい?

650:デフォルトの名無しさん
17/03/23 23:38:12.29 uQaoHdGv.net
普通は読みだす時はロックなんてしないよw
複数のデータの不整合が問題になる場合は微妙だけど、その場合でも
2回一致するまで読む方が低コスト

651:デフォルトの名無しさん
17/03/23 23:39:06.22 uQaoHdGv.net
っていうか、何でこんなマルチスレッドの初歩みたいな話になってるの?w

652:デフォルトの名無しさん
17/03/23 23:47:48.47 Ei+8urX3.net
てす

653:デフォルトの名無しさん
17/03/23 23:50:59.28 Ei+8urX3.net
>>617
ちげーよ。まあ結論としては、簡単に出来るけどC#はやらなかった、というだけだ。
そして俺はこの選択は間違いだったと見るね。
実装例としては以下。(C#の文法は知らないので真似てみた。適宜脳内修正よろしく)
//ここにコードを書いたのだが、403 Forbidden になるぜorz
mutexを使う場合、mutex確保中に他ロックを取りに行かなければデッドロックはしない。
或いはthread_IDを付けておいて、UIなら直接変更、その他ならinvokeにしてもいい。
いずれにしても、ユーザー側にはinvokeが見えなくなる(隠蔽される)
これの方が良かったと思うよ。いちいち混乱しなかった。
そちらの例は、2人のユーザ間でのデッドロックであって、
俺が今話しているUI/タスクスレッド間の例じゃないじゃん。
なお、解法は、普通に「両方取れなかった場合は一旦全部リリースしてリトライ」でいい。
ただし今時はそれはDB任せで、ユーザ側でのロック管理なんてしない(はず)

654:デフォルトの名無しさん
17/03/23 23:52:19.70 FkdET+B0.net
スレ読み返すと細かいことはどうでもいいけどとにかくInvokeしたくないプロパティでアクセスさせろって暴れてる変な子が居るように読めるんだが
Invokeを適当なプロパティでラップしろで終わる話じゃないのこれ?

655:デフォルトの名無しさん
17/03/23 23:53:41.78 u0oYY3Ci.net
>>622
ケースバイケースだろ
そもそも >>617 は説明のためのサンプルだから不満なら両方書き込みのケースを考えればいいだけ
>>623
マルチスレッドGUIフレームワークに夢見てる奴がいるからでしょ w

656:デフォルトの名無しさん
17/03/23 23:54:44.80 Ei+8urX3.net
>>626
その通りだ。そしてそのコードを貼ろうとしている。
つか、貼らなくても分かるんならもういいね。

657:デフォルトの名無しさん
17/03/23 23:57:20.64 u0oYY3Ci.net
>>625
> 俺が今話しているUI/タスクスレッド間の例じゃないじゃん。
そんなことを言ってるのお前だけ
>>583 をちゃんと読み返せよ

658:デフォルトの名無しさん
17/03/24 00:00:02.01 Lq7k+m1v.net
>>622
そんな力業してないでリーダー/ライターロック使いなよ。
比較のループとかデータ量次第ではCPUパワーの無駄遣いだろ。

659:デフォルトの名無しさん
17/03/24 00:07:18.67 P/PrHj1p.net
既製品に文句があるなら自分で作ってgithub
これができないプログラマはいつまでも三流のまま
コードを書き使ってもらい持論を証明するんだよ

660:デフォルトの名無しさん
17/03/24 00:13:35.16 OAgok+ci.net
Windows Formsの場合は、単純にFormがActiveXコンテナになり得るから、
アパートメントの制限に対応するために用意された、実装上の都合による物だよ
おそらく、ロックの問題ではなく
リソースリークを根本的に解決する方法がないから用意された手続きなんだよ。
ラップして


661:解決できると思うなら、それで良いんじゃないか



662:デフォルトの名無しさん
17/03/24 00:14:57.73 gW3AbLz/.net
だからUIスレッドが気になるなら、wpfでMVVMやれば解決でしょうに

663:デフォルトの名無しさん
17/03/24 00:38:36.13 9w5lj4S/.net
UWPで非同期メソッドとかTask使ってるけどすごい不毛。
非同期メソッドの完了を基本的にはawaitで待つから
非同期メソッドを複数回実行するような場合だと
全部同期呼び出しにして全部まとめてTask.Runしたい。

664:デフォルトの名無しさん
17/03/24 00:50:30.06 RtKD05ZR.net
>>630
俺は622じゃないけど。
従来型のロック機構だとコストが高すぎる場合もあるんだよ。
俺は詳しくないけど、多分Erlangとかの世界で。
mutex等は共有メモリへの書き込みが生じるから実はかなり重い。

665:デフォルトの名無しさん
17/03/24 02:13:48.63 5bMFJR3b.net
馬鹿にマルチスレッド。

666:デフォルトの名無しさん
17/03/24 02:33:18.25 99176uAd.net
結局少しでも重たい処理は全部ワーカーにしなけりゃならないから
UI弄る時だけInvokeした方が見通しすっきりするんだよねw
async/awaitとか使うよりは
ここがUIスレッドですってはっきりわかる。

667:デフォルトの名無しさん
17/03/24 02:44:50.15 7cONiVN5.net
ここはまだWinFormsの時代かw

668:デフォルトの名無しさん
17/03/24 02:50:50.13 99176uAd.net
WPF?誰が使うか
そんなもんが必要なモバイルなら普通にJavaScriptにWebアプリで行くわって感じだねw

669:デフォルトの名無しさん
17/03/24 03:11:50.24 m/Lurhmo.net
>>612
progressBar.Value+=1
としたときに
1.読み込み
2.加算して書き込み
の処理が必要とすると、1と2の間に別スレッドが書き換えを行うことで結果が矛盾する
Interlocked命令を使えばそれは防げるけど、MaxValueを超えないかとかの判定が入るので結局ロックが必要
この程度ならまだしも、裏でWin32やCOMを叩いてるコントロールはさらにややこしい

670:デフォルトの名無しさん
17/03/24 03:44:24.59 5bMFJR3b.net
レベル低すぎて引くわ C#、LINQ、WPFが高速とか言ってたおれ最先端君が戻ってきたのか?

671:デフォルトの名無しさん
17/03/24 06:28:32.59 Cpc8yNoh.net
高速(で書ける)

672:デフォルトの名無しさん
17/03/24 07:23:36.10 vGZXBTd1.net
高速で壊れるの間違いだろ
馬鹿はphp書いてろ

673:デフォルトの名無しさん
17/03/24 07:56:00.46 P/PrHj1p.net
>>640
壊れても遅くてもいいからとにかくプロパティで書きたいというのが要件

674:デフォルトの名無しさん
17/03/24 08:24:47.57 gW3AbLz/.net
データの保証がないコントロールなど、標準品ではありえないから
頑張って作ってくれとしか言いようがないな

675:デフォルトの名無しさん
17/03/24 12:55:58.77 99176uAd.net
>>645
横だけれど、そもそも問題としてValueをインクリメントする事自体が余り良くない考え方かもね。それは表示と処理が分離できていないから。
カウント処理のカウンターはUIがもっているべきじゃない。
別途カウンターを作って、結果だけをUIに代入すべきだ。
このように設計されているなら、破損無視で書き込んでもうまく動作するだろうと思う。
問題は、それをすべての人に要求するのは難しい、自分の忙しくなったらきちんとせずにインクリメントしてるしなw
という事なんだな。

676:デフォルトの名無しさん
17/03/24 15:14:34.51 suDsBIm1.net
やっとまともなやつ来た

677:デフォルトの名無しさん
17/03/24 16:13:38.13 m/Lurhmo.net
>>646
今もそうなってるじゃん
ProgressBarクラスがカウンターを持ってて、ネイティブのmsctls_progress32にメッセージを送って表示を更新してる
ぜひスレッドセーフに再実装してみてくれ

678:デフォルトの名無しさん
17/03/24 18:30:43.13 kZHdS/d5.net
>>646
> カウント処理のカウンターはUIがもっているべきじゃない。
そんな低レベルな話をしてるのは ID:Ei+8urX3 だけだから、お前らもうでてくるな

679:デフォルトの名無しさん
17/03/24 19:42:33.91 RtKD05ZR.net
>>640
> 結局ロックが必要
いや、要らん。正確には、要らない組み方はある。
アトミックはデータを構造体にして参照を持つことで解決出来る。(一発ライト)
レーシングはインミュータブルとCASで解決出来る。x86ならCMPXCHG命令。
具体的には以下。
1. まず有効な値かどうかを先に判定する。(これは今も先にやっているはず)
2. 書き換える場合、元データのポインタをローカルにまず確保する。
3. 上記旧ポインタから参照して、書き込むデータを
new ProgressBarData() で新しく作る。(インミュータブル)
4. 本体のポインタをCAS命令(LOCK付き)で差し替える。
5. 失敗した場合は3からリトライする。(CAS命令の結果に最新ポインタが入っている)
この方法だとメモリを余分に食うけど、ロックは要らなくなる。
(なおErlangは共有メモリ無しで全て通信という別解決方法だった)
いずれにしても、やりようはあるんだよ。どこにコストを掛けるかという話で。
そもそもGUIなんてレーシングしても問題ないようにも組めるし。
(ProgressBar.value += なんて要らない。 = だけでも組める。>>646に同意)
その上で、invokeなんてユーザーに見せる必要あったのか?というのが疑問。
.NETはVC++でも使うから少しでも速い方がいいという需要もあるのかもしれんが、
C#のノリならここは隠蔽して欲しいところでしょ。GUIなんて極限まで速い意味はないし。
ラップしてもいいし、上記のようにロックフリーにしてもいい。
(もちろんユーザがやってもいいんだが、そういう言語じゃないでしょ)
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
つかいつからお前らこんなに馬鹿になったんだ?ふらっとから混ざったのか?
ロックの設計の仕方を知らないのはお前ら全員じゃねーかよ。

680:デフォルトの名無しさん
17/03/24 19:51:21.19 9LJ2CaVF.net
>>650
なーんかしょうもない話を延々続けて頭悪そうだけど、
特に理由がない限りわざわざスレッドセーフに作らないのはGUIに限らんって何度言えばわかるの?
馬鹿なのかほんと

681:デフォルトの名無しさん
17/03/24 19:54:06.25 HsxCjAja.net
>>650
2と3もロックされなければ既に破棄され別の領域として
再利用された誤った情報を読み出す可能性があるだろ

682:デフォルトの名無しさん
17/03/24 19:54:24.48 9VMQOfeX.net
MSにとっての実装コストの問題でもあるしな
MSが苦労するのはいいとしても、その結果激増したバグに悩まされるのはお前らだぞ

683:デフォルトの名無しさん
17/03/24 20:07:48.70 RtKD05ZR.net
>>651
お前がinvokeをウザイと思わなければそれでいい。
俺はinvokeをウザイと思うからMSが隠蔽しとけ、と思う。
多分後者の方が多いだろ、この件に関しては。
>>652
ついにC#がGC言語だと知らない奴も出てきたか、、、
>>653
MSはこの程度ならきっちり実装出来るよ。
というかMSって比較的まともだと思うぞ。

684:デフォルトの名無しさん
17/03/24 20:09:50.64 UKoqSEXl.net
BeginInvokeはどうするの?

685:デフォルトの名無しさん
17/03/24 20:15:53.11 RtKD05ZR.net
というかここでも単発は池沼なんだな。
いちいち言ってることがアレだし。

686:デフォルトの名無しさん
17/03/24 20:24:26.17 RtKD05ZR.net
つかまあ、百歩譲って他のコントロールならいいよ。
ただ、ProgressBarなんてどう考えてもタスクスレッドから書き換えられるのが仕様だろ。
(むしろUIスレッドから書き換えることがない)
それをいちいちinvokeはねーだろ。
せめてProgressBarだけでも対応しとけよと思うだろ普通。

687:デフォルトの名無しさん
17/03/24 20:27:59.45 9LJ2CaVF.net
>>656
アレなのはお前だよ馬鹿...
しかも重症のな。
何度も言うけど、こんなのはweb上にあるようなマルチスレッドの入門記事レベルの話だ。
そもそもスレッドセーフってどういうことなのかすら理解してないし、自分でそういうコードを書いたこともないだろお前。
しかし、


688:こういう馬鹿に限って偉そうなのは何なのかね



689:デフォルトの名無しさん
17/03/24 20:32:42.95 RtKD05ZR.net
皆さん、今からスレッドセーフ大先生の講義が始まります。ご静聴下さい。
ではよろしく>>658

690:デフォルトの名無しさん
17/03/24 20:57:32.53 UKoqSEXl.net
>せめてProgressBarだけでも対応しとけよと思うだろ普通。
ProgressBarを対応させたら○○も対応させろとか言い出す人が出ると思うでしょ普通

691:デフォルトの名無しさん
17/03/24 21:56:51.21 vGZXBTd1.net
馬鹿+偉そうときたから例外を握りつぶすニキだな

692:デフォルトの名無しさん
17/03/24 22:04:34.44 vGZXBTd1.net
ああでも今回はさすがにClickOnceは危険ニキを支持だな
>MSならこの程度はきっちり実装出来る
ここが一番面白かった

693:デフォルトの名無しさん
17/03/24 22:13:22.45 RtKD05ZR.net
つまり、俺が言いたいのは、以下ね。
>>559 > invokeってフォームに限ってどうして必要なのですか?
老害: それがしきたり。
ゆとり池沼連呼リアン>>658: スレッドセーフ!スレッドセーフ!
俺: MSが馬鹿だから。
ゆとりって連呼リアン程度の知能しかないよなマジで。
そもそも俺の>>650>>589(俺ではない)とほぼ同じ内容だぞ。
お前ら馬鹿が付いて来れてないから書き直しただけでね。
お前らが589を最初から理解していればもっとマシな議論だったろうさ。

694:デフォルトの名無しさん
17/03/24 22:24:18.31 9LJ2CaVF.net
だからスレッドセーフじゃないのはControlのメンバだけじゃないって言ってるのに懲りない奴だな
馬鹿なのはMSじゃなくてお前だっての馬鹿

695:デフォルトの名無しさん
17/03/24 22:36:30.53 9LJ2CaVF.net
Control「だけ」がメンバをUIスレッドからしか呼べないとか訳の分からん錯覚をしているのは、
Controlのメンバが非ユーザーコードからも呼ばれることを理解してないからだろうなたぶん

696:デフォルトの名無しさん
17/03/24 22:41:45.59 RtKD05ZR.net
スレッドセーフ君はやはり連呼リアンであったか、、、
お前がそう思うんなら(ry

697:デフォルトの名無しさん
17/03/24 22:42:26.38 9LJ2CaVF.net
馬鹿な上にネトウヨって人生終わってるな

698:デフォルトの名無しさん
17/03/25 01:12:27.10 66tFvNtY.net
>>657
こんなもんで余計なパフォーマンス食われるのも嫌な感じだしね
スレッド無視で叩きこめるならその方がありがたい物ではある。
インクリメント問題くらいならこっちで対処するわって感じですな。

699:デフォルトの名無しさん
17/03/25 01:17:38.46 66tFvNtY.net
ああ、そういえば高負荷バックグラウンドスレッドで
progreassBarの操作をasync/awaitでブチかましてスレッドプール爆発させてた新人いたな(笑)
凄い困ってたけど、きっと何が何だか分からなかったんだろうな。

700:デフォルトの名無しさん
17/03/25 01:39:16.42 O6oCv4KM.net
>>668
そもそもコードの設計論から言ってもワーカースレッドからUIを操作するなんてありえない。
UIに依存するモデルってどんな糞設計だよ。
モデルにSynchronizationContextとか持たせてUIスレッドに同期したイベントで通知させるのは
設計としてありだけど、直接コントロールをいじるとかありえん。
それも気に入らないならUI側が能動的にタイマーでも使ってモデル側を読めばいいだけ。

701:デフォルトの名無しさん
17/03/25 04:16:02.72 ++OH//Pd.net
VB上がりにモデルなんて概念ないからw

702:デフォルトの名無しさん
17/03/25 09:54:01.33 QDpQza6M.net
.NETの質問したいんですがここで大丈夫でしょうか?
とりあえずします。
PictureBoxのPaintイベントでImageプロパティを再設定する処理などをしてるんですが
どうもMessageBoxの挙動がおかしくなってます。
フォームより後ろに表示されてしまって操作不能になってます。
とりあえず通常のメッセージボックスの場合はパラメータを弄って強制的に全面に表示させてますが
困るがSaveFileDialogなどで上書き確認のメッセージボックスが表示された時です。
この場合も後ろに表示されてしまって操作できない


703:のでどうしようもないです。 これを回避する方法はどうやればよいんでしょうか? Paintイベントの中身を消去すれば普通に表示されますが出来ればそのままでメッセージボックスも前面に表示させたいです。



704:デフォルトの名無しさん
17/03/25 09:57:11.64 iGx2aDuI.net
Paintイベント内の処理がおかしいんだろ
俺たちはエスパーじゃないんだから、まずそれがどんなコードか教えてくれよ

705:672
17/03/25 09:57:40.89 QDpQza6M.net
すいません。自己解決しました。
Paintイベントで毎回PictureBoxのImageプロパティを再設定してるのが原因でした
下記のように条件を入れてやるだけで回避できました。
if(pic.Image != img){

}

706:デフォルトの名無しさん
17/03/25 09:59:45.97 swqPfyBg.net
だと思った

707:デフォルトの名無しさん
17/03/25 10:45:00.80 omxknQTj.net
DataReaderを使って
while(await ReadAsync().ConfigureAwait(false)) {
...
}
って書いてるライブラリがあるんだけど
件数が多くなりそうなループでasync/awaitするとタスク生成とコンテキスト切り替えのオーバーヘッドで逆にパフォーマンス悪くなったりしないもんなの?

708:デフォルトの名無しさん
17/03/25 11:08:32.17 oe75j5bC.net
>>676
ReadAsync使う時点でそれらよりデータソース読み取りの方がコスト大と作者が判断しているんじゃないかね
MemoryStreamに対してReadAsyncとか使っているなら知らんけど

709:デフォルトの名無しさん
17/03/25 11:09:13.59 kGpqWpaU.net
>>676
そりゃ呼び出しのオーバーヘッドは増えるだろうけど、それが問題になるかどうかは別だ
パフォーマンスという言葉を安易に使うのはやめよう
君はバッチ処理をしてるのかオンライン処理をしてるのかストリーミング処理をしてるのか、
そのライブラリの方はどういう使われ方を想定してるのか、
処理の規模はどれくらいか
パフォーマンスってのは結果的に目的をどれだけうまく達成できたかであり、一面だけを見て判断できるものじゃない

710:デフォルトの名無しさん
17/03/25 11:11:43.78 2T3avjLL.net
パフォーマンスって何を指してるんだ
処理速度出すためにasync/await使うわけじゃないのは理解しているよな?

711:デフォルトの名無しさん
17/03/25 11:13:12.94 2T3avjLL.net
具体的に何を指すんだと問い詰めたい単語
パフォーマンス
スマート

712:デフォルトの名無しさん
17/03/25 12:12:06.97 AJzcpICN.net
話題が長引いても安心な匿名掲示板「Anontown」 [無断転載禁止]?2ch.net
スレリンク(tech板)

713:デフォルトの名無しさん
17/03/25 13:35:04.97 66tFvNtY.net
>>671
とりあえず動くもの作るからな、クリックして必要な事をかける構造になっている以上
次に起こる事は、必然的にスレッドプール爆発なんだわw

714:デフォルトの名無しさん
17/03/25 14:21:07.83 pA2Zx06R.net
馬鹿がプログラムを書かなければ解決

715:デフォルトの名無しさん
17/03/25 14:49:04.12 66tFvNtY.net
そういうヤツはHaskellでもやってろって話だよ
C#はそういう言語じゃない

716:デフォルトの名無しさん
17/03/25 15:02:20.11 OnvCww5G.net
勝手にそういう言語とか決めないで欲しいな
糞袋の観測範囲で

717:デフォルトの名無しさん
17/03/25 17:12:28.65 P4wL6N6L.net
webbrowserのdocumenttextでhtmlを文字列で直接埋め込みたいんですが
ローカルに設置したcssやjsファイルを読み込む方法がわかりません。
どこに配置してどのように読み込めば良いか
ご存じの方教えていただけますでしょうか?
どうぞよろしくお願いします。

718:デフォルトの名無しさん
17/03/25 18:18:23.98 gz8AHGhh.net
Data URIスキームで埋め込むとか

719:デフォルトの名無しさん
17/03/26 00:26:03.65 b1vqxh2T.net
HaskellといえばAI。つまりそういうこと。

720:デフォルトの名無しさん
17/03/26 11:09:36.56 WUrKAJma.net
こんな感じか?
URLリンク(livedoor.blogimg.jp)


721:ymatome/imgs/7/6/76ec3c1e.jpg



722:デフォルトの名無しさん
17/03/26 12:41:56.97 Uwt+/Suh.net
>>670-671
釣りか?マジで言ってるのなら
お前ら別の意味でのスタティックおじさんになってるぞ。
まあC#erなんてそんなもんだと今回思い知ったが。

723:デフォルトの名無しさん
17/03/26 13:20:23.73 x9SVAeuT.net
progressbarなど、多くても100回程度書き換えれば充分なわけで
たかが100回のUIスレッド切り替えでオーバーヘッドとか笑っちまうな
スレッドを無視するより書き換え回数減らしたほうが余程生産的だし簡単だ

724:デフォルトの名無しさん
17/03/26 13:20:26.49 hVl7ZVni.net
>>690
そもそも今時Windowsのデスクトップアプリなんか作ってる時点で
スタティックおじさんであることを自覚したほうがいいよ

725:デフォルトの名無しさん
17/03/26 13:24:42.49 TjDGXANh.net
暴論w

726:デフォルトの名無しさん
17/03/26 13:28:02.28 WQ8v1gdY.net
みんなコード書くよりレッテル貼りの方が得意なんだな

727:デフォルトの名無しさん
17/03/26 13:48:27.23 7xcWRiGy.net
プログレスバーはカウントアップが面倒なのかいつからかグルグルするモードがついたね
ハングアップしてないかわかればまぁいいんでそればかりつかってる

728:デフォルトの名無しさん
17/03/26 13:59:10.19 TjDGXANh.net
いつ終わるか分からない処理もあるから。

729:デフォルトの名無しさん
17/03/26 14:02:35.77 Lixhnbpu.net
>>695
それ追加されたの.Net2.0だから10年以上前だよ

730:デフォルトの名無しさん
17/03/26 14:03:21.73 xbLciI4B.net
鬱陶しいから来週まで続けるなよ
でないとこのスレ埋め立てるからな

731:デフォルトの名無しさん
17/03/26 14:13:37.56 Lixhnbpu.net
4月1日までか…長いな

732:デフォルトの名無しさん
17/03/26 14:19:29.01 Uwt+/Suh.net
つかお前ら落ち着けw
俺は>>650だよ。そして>>640含むお前ら大多数よりは賢いことはもう示したろ。
で、>>670-671も同様にアホっぽく見える。
しかしマジでそう思っているのなら、それを示せば多少は教えてやるよ、ということだ。
何か最近、煽ったりカニンガムの法則を試しているような奴も多いんでね。
それに付き合わされるのはウザイ。
俺の意見は ID:Un9Q+jtZ とは完全には一致はしないが、
6割くらいは一致するし、彼が何を言いたいのかは分かる。
既に言ったとおり、650も>>589の代弁に近い訳でね。
お前らは>>597(重ねて言うが俺ではない)の意味を理解出来ていないように見える。
そこでお題を出してやる。
これをお前ら流の「美しい実装」をする方法を述べてみろ。
駄目出ししてやるよ。
フーリエ変換をする関数 calc_FFT があって、
計算に時間がかかるので、プログレスバーに進捗状況を表示したい。
参加する人はどうぞ。

733:デフォルトの名無しさん
17/03/26 14:24:02.60 13fTqv5I.net
>>700
まだやる気かよ。
だからねえ、そういうのは>>670に書いた2つのやり方のどちらかを選択するのが普通。

どんな方法論を取るにしろ、モデル側から直接UI部品をいじるとかありえない。
依存方向は一方通行にするなんて基本中の基本だろ

734:デフォルトの名無しさん
17/03/26 14:32:06.72 13fTqv5I.net
この元の話題、つまりUI部品のメンバーがUIスレッドからしかアクセスできないように
なっているのは不合理かどうかって話も、はっきりいって問題提起した奴が何も分かってない馬鹿なだけ。
こういう仕様は十分に合理的。

735:デフォルトの名無しさん
17/03/26 14:55:35.58 V5FfYo93.net
だからVB上がりにモデルなんて概念はないって言ってんだろが
通じない話を繰り返すな
壊れて向きが変わらなくなったチョロQかテメー

736:デフォルトの名無しさん
17/03/26 15:00:04.71 7VPGG3Vy.net
モデル概念�


737:mらないおじさんや初心者以前に エキスパートからしてみてもC#を使いたい動機は素早く手軽に組みたいという動機にあるからね。 時間をかけてガチガチにやらないかぎり上手くいかないとか、それは勘弁願い下げたよな。



738:デフォルトの名無しさん
17/03/26 15:09:11.18 N/oWszN2.net
うぇーゴミ虫の狭い観測範囲で勝手にC#ユーザーの動機を定めちゃう?
いくら寛容な人間様でも下等生物と一緒にされるんでは不愉快ですわ

739:デフォルトの名無しさん
17/03/26 15:14:26.60 7VPGG3Vy.net
お気に召さなければC++でも使ってみたらどうよ?
templateメタプログラミングならなんでもお望みの書き方でできるよ。

740:デフォルトの名無しさん
17/03/26 15:37:28.26 Uwt+/Suh.net
ちなみに、回答は後日ね。
こういうのは急いで出来る必要はないから、じっくり考えてみてよ。
当たり前だが俺は>>670-671よりもマシな解決方法を持っている(つもり)


>>701
採点結果: スタティックゆとり乙

君はどういう依存が悪いのかを理解出来ていない。
そしておそらくUIはスタティックだと信じている。

ただしMSも同様に馬鹿だった。だからFormは糞なのも事実。
しかし世の中には他の実装方法もあるって事さ。
君達がロックフリーの世界を知らなかったようにね。

ヒントとしては、
> どちらかを選択する
ここが間違っている。
何通りも用意するとか、ラップして変換するとかは、明らかに無駄だよね。

741:デフォルトの名無しさん
17/03/26 15:46:45.12 bdiJ1zQR.net
>壊れて向きが変わらなくなったチョロQかテメー
斬新な煽り方だなw

742:デフォルトの名無しさん
17/03/26 16:30:36.77 E6fNHh8L.net
ネトウヨとかもそうだけど、頭悪い奴に限って、
「この俺だけが世の中の真実に覚醒した!!!この世は嘘と欺瞞にまみれていて(笑)
俺以外の連中は馬鹿ばかりだ!!!」

ってなるのは何なのかね。
まあ2chにはこういう単細胞で自分を客観的に見られない奴いっぱいいるけど、
>>707みたいにそういうタイプはプログラマとか知的な仕事についてはいけない人だよな本来

743:デフォルトの名無しさん
17/03/26 16:33:32.75 7VPGG3Vy.net
彼が相手している誰かさんの方がむしろヤバイという客観的印象ありなんですけどねw

744:デフォルトの名無しさん
17/03/26 17:00:26.56 nZrkbKSG.net
ロックフリーおじさんはスタティックおじさんを馬鹿にできんだろ
○○おじさんが馬鹿にされる本質は金のハンマー信仰にあるのだから

745:デフォルトの名無しさん
17/03/26 17:09:41.70 E6fNHh8L.net
銀の弾丸を求める者は少なくとも倒すべき「怪物」の存在には気が付いているが、
彼はそのレベルにすら達してないよたぶん。

背後にあるトレードオフに気が付かないから不条理でないものが不条理に見えてしまう
自分の馬鹿さ加減を自覚できないだけ

746:デフォルトの名無しさん
17/03/26 18:57:25.59 iTS+fWTZ.net
>>700
ダメ出しなんて要らん
どや顔で語りたいならぐうの音もでない実装を晒しやがれ

747:デフォルトの名無しさん
17/03/26 19:11:26.31 iZtP8D0n.net
初歩的な内容ですが。
RxのISchedulerインターフェースを実装したいのですが、ScheduleメソッドのDateTimeOffsetを引数にとるオーバーロードとTimeSpanを引数にとるオーバーロードって
どのように実装すればいいのですか。
本家Rx.NETのリポジトリにあるコードをいくつか見ましたが、
なんとなく、指定された時間の分だけ遅延させて
デリゲートをInvokeさせるというのは分かりましたが、この2つのオーバーロードの具体的な実装方法を文章で書いてあるところを教えてください。
あと、戻り値がIDisposableなんですけど、これはスケジュールの解除を行うDisposableでいいですよね。

748:デフォルトの名無しさん
17/03/26 20:02:08.99 YTmW3NMW.net
>>707
利根川さんきたーーーーw

749:デフォルトの名無しさん
17/03/26 20:06:43.37 Uwt+/Suh.net
>>713
俺は語りたいわけじゃない。
だから君の意見を尊重して、俺の答えは書かないことにするよ。
君らは一生馬鹿なままで過ごせばいい。
C#にとどまっている限り、回りもみんな馬鹿だから、ばれないで済むだろう。
ただ、知っている奴が見たら、お前らは本当に間抜けなことをしている。
だけど、そういうのは自分でいろいろ考えないと身につかないんだよ。
だから自助努力する奴に対してはサポートしてやろうとしただけ。
とはいえ、俺の案も他言語では普通に使われる手だから、探せば出てくるはず。
それは君たちで探すんだね。

俺はくだらない煽りには本当に辟易している。
そのエネルギーは正しくプラスの方向に使うべきだよ。
マイナス方向に使って煽るのではなくてね。

君は何がしたかったんだ?
俺の面目を潰したかったのなら、俺より素晴らしい実装を先に言ってしまえばよかっただろ?
或いは他の人から、もっと素晴らしい実装が出てきたら、君にも糧になっただろ?
そうやってプラスの方向にお互いに高めていくべきなんだよ。
それを、「じゃあ教えてやらない」と言われる話の振り方をしてしまうから、
ゆとりはゆとりのままなんだよ。

聞くは一時の恥、聞かぬは一生の恥、だよ。
こんな匿名のところですら面子を重視しているうちは一生ゆとりだよ。

750:デフォルトの名無しさん
17/03/26 20:09:36.55 XWnO8Cg2.net
めっちゃ早口で言ってそう

751:デフォルトの名無しさん
17/03/26 20:52:30.96 iTS+fWTZ.net
なぜかバカって無駄な長文書くんだよな
こういう奴が書くコードも推して知るべしなんだろうな w

752:デフォルトの名無しさん
17/03/26 21:11:54.02 DeCVSWGu.net
そういうのも馬鹿っぽいよ。中学生か。
問題なのは言ってることが正しいかどうか、それだけ。
長文かどうかなんてそれとまったく関係がない。
彼はトンチンカンな勘違いをしてるから馬鹿にされてるだけ。

753:デフォルトの名無しさん
17/03/27 00:01:17.74 rNkb8v7V.net
日本語理解できないアホ?
頓珍漢なこと書く奴ってたいてい長文だろって話だぞ

754:デフォルトの名無しさん
17/03/27 00:14:45.53 qUMQbQ0X.net
馬鹿な奴だ。
馬鹿の世界ではきっとすべての事柄が三行以内の短文で表現できることになってるんだろうね。
己の無学を語るに落ちてるな

755:デフォルトの名無しさん
17/03/27 00:18:01.70 rNkb8v7V.net
誰もまともなこと書く奴が長文ではないって言ってないんだが w
逆とか裏とかを理解してないのってプログラマーとして致命的じゃね?

756:デフォルトの名無しさん
17/03/27 00:19:42.90 wneB9bMR.net
じゃあ一行で。スレタイ読め。

757:デフォルトの名無しさん
17/03/27 04:02:24.71 UZsp8jX5.net
>>716
せっかくなので教えて欲しい
ちょっと考えたけど、やっぱりMaximumとMinimumがValueの変換中に変わるときとかが結構めんどくさい
あと、オーナードローや継承が安全にできることも必要か

プログレスバーのValueだけどかならともかく、コントロール全部をスレッドセーフにとかは非現実的なんじゃないか?
実際近年やってるところは少し調べた限り無いし

758:デフォルトの名無しさん
17/03/27 04:51:00.01 FSqhbRGK.net
>>714
誰も触れてくれなくて草

759:デフォルトの名無しさん
17/03/27 05:02:30.31 rNkb8v7V.net
>>723
>>700 に言えよ w

760:デフォルトの名無しさん
17/03/27 14:11:21.66 H4MLQPNT.net
>>725
まあ正直今時Rxかよwwwwww
と草生えるからな
保守案件かも知らんが御愁傷様だ

761:デフォルトの名無しさん
17/03/27 15:09:08.98 OggmZorO.net
そもそもRxって今は.NETの一部じゃなくてサード扱いだからな
知ってるのが当然みたいに言われても困る
.NET Fx以外の個別のライブラリについてはスレ違い

762:デフォルトの名無しさん
17/03/27 22:59:41.60 ty5ByWfa.net
>>690
スタティックおじさんって誰よ?

763:デフォルトの名無しさん
17/03/27 23:14:42.86 53TkDvRN.net
スタティックジジバンドのリーダーだよ
知らなかったのか

764:デフォルトの名無しさん
17/03/27 23:28:21.19 c1Kh3EUH.net
もう今ならスタティックの悪い使い方を知ってるほうがおじさんな気がする……

765:デフォルトの名無しさん
17/03/27 23:52:27.87 dYBhOZra.net
性的

766:デフォルトの名無しさん
17/03/28 07:20:39.72 1WRXezaS.net
>>712
不二痛のノンプログラミングツールの
販促で 銀の弾丸を求めて とか
書いてあったの思い出した
あんな大手企業がスゲー認識してるなと思った

767:デフォルトの名無しさん
17/03/28 08:08:28.90 W2JaqSVc.net
ラズパイでMVCのwebアプリって動かせますか?

768:デフォルトの名無しさん
17/03/28 16:32:12.10 WR7Bj+dr.net
Windowsがまともに動きゃ動くだろ

769:デフォルトの名無しさん
17/03/30 00:54:43.35 8DsEMtOy.net
.NET CoreならWindowsじゃなくても動くんじゃね

770:デフォルトの名無しさん
17/03/30 01:35:10.25 DtnWdi8P.net
ARMで動くのか?

771:デフォルトの名無しさん
17/03/30 01:58:32.69 Qg6ZUcGU.net
Formのコントロールのイベントに紐づけしたFormのメソッドって
Formが閉じられた後も紐づけしたままだとお漏らしになるんだっけ?

772:デフォルトの名無しさん
17/03/30 02:50:16.54 DVY8Bk9i.net
>>737
動くよ、ググってみ

773:デフォルトの名無しさん
17/03/30 06:49:49.86 U97Tvha+.net
>>738
ならない

774:デフォルトの名無しさん
17/03/31 09:35:08.92 YcsHI68o.net
UI AutomationでVB6で書かれたレガシーなアプリのUIテストをしたいのですが、
操作したいコントロールの多くに一意のAutomatinIDが割り当てられていません。多くのコントロールのIDが1や2になっています。
一応、コントロールの順番が変わらないものと決め打ちして操作したいコントロールを特定することは可能なのですが、不便です。
もっとうまいやり方ってありますか?
後は表示位置を元に特定するくらいしか思いつかないのですが。

AutomationIDって、少なくともVB6では自分で設定できないのでしょうか。
一応このレガシーアプリのソースコードはあり、編集も可能なのですが、
AutomationIDというのを設定するところは見当たりません。

775:デフォルトの名無しさん
17/03/31 14:28:02.89 gIiQslt6.net
スレチ

776:デフォルトの名無しさん
17/03/31 19:34:04.77 BtloYTx6.net
ASP.NET MVCなんですが
DBに処理対象データがあるか確認
__ある場合:メッセージボックス(*件処理します。処理を続けますか?)
____はいの場合:データ更新処理
____いいえの場合:なにもしない
__ない場合:メッセージボックス(データがありません)
こういう処理を非同期リクエストを使わずに実装したいのですがどうすればいいでしょうか
入力フォームの内容もクリアされないようにしたいです

777:デフォルトの名無しさん
17/03/31 19:36:51.55 kI20EOUu.net
簡単だよ

778:デフォルトの名無しさん
17/03/31 20:45:16.64 BtloYTx6.net
>>744
教えてください
お願いします!

779:デフォルトの名無しさん
17/03/31 21:59:00.75 wAJQEnGm.net
なぜそんなことを他人に聞かないとわからないのかわからない。

780:デフォルトの名無しさん
17/03/31 22:08:53.88 PPRsLJ2Y.net
>>740
遅くなったけどありがとう
やっぱりそうか

781:デフォルトの名無しさん
17/03/31 22:10:11.37 9w4qNkVe.net
>>743
正直おまえキモイ

782:デフォルトの名無しさん
17/03/31 22:38:20.66 BKtRT3pJ.net
>>743
フォームの入力内容を書き戻すのに加えて、確認中であることを示す値を入れたhiddenフィールドと
$(function() { if (confirm(msg)) $("#form").submit(); });
みたいなスタートアップのスクリプトを仕込んで返せばいいんじゃないの
俺ならこんな汚物を出してきたら差し戻してAJAXで書き直させるけど

783:デフォルトの名無しさん
17/04/01 19:08:34.68 iJwskPQ3.net
while(true)
{
Console.Out.WriteLine("氏ね");
}

784:デフォルトの名無しさん
17/04/01 19:15:59.90 4r7Zvrb2.net
標準出力とか久々に見たわ

785:デフォルトの名無しさん
17/04/03 13:09:41.47 sZC7W3vJ.net
aspでviewだけをデザイナーに触らせたいんだけどどうすればいいの?
view以外(controllerとか)のソースを弄られたくないし見せたくもない

786:デフォルトの名無しさん
17/04/03 13:48:10.33 YcnJ2dMt.net
フォルダにアクセス権限でも付けとけや
スレ違い

787:デフォルトの名無しさん
17/04/03 14:12:13.73 sZC7W3vJ.net
こういうプロジェクトの共有(共同開発)は出来ないのですか?

788:デフォルトの名無しさん
17/04/03 14:18:51.99 G0J69e58.net
普通にできるが

789:デフォルトの名無しさん
17/04/03 15:39:57.58 sZC7W3vJ.net
普通にはできませんでした

790:デフォルトの名無しさん
17/04/03 19:12:16.74 zJguOVHN.net
>>752
それならREST APIで良いんじゃないか
RazorというかサーバーサイドのHTMLテンプレートはもう時代遅れだから思い切って捨ててしまえ

791:デフォルトの名無しさん
17/04/03 20:15:16.37 YcnJ2dMt.net
WebAPIを使った動的ページの開発ができる有能なデザイナならソース隠す必要ないだろ
むしろバックエンドも含めて全部そいつ一人に作らせた方が早いんじゃないか

792:デフォルトの名無しさん
17/04/03 20:38:02.81 DvppQH2R.net
わろたw
ビューのソースファイルだけ渡してデバッグできない状態で作らせるか
テンプレート関連の読み込み処理を自前にするしかないだろうな
もともとc#のtemplate使ってるから自前もわりと簡単だよ

793:デフォルトの名無しさん
17/04/03 22:10:44.51 zJguOVHN.net
冷静になって考えるとモックコントローラー作るだけだったわ

794:デフォルトの名無しさん
17/04/11 23:45:38.38 f9LqqWjR.net
バイト配列を並列で0クリアしようと思ったんだが、なんかほぼ変わらない
なにか間違ってるんだろうか?

public static void Main()
{
var methods = new Action<byte[]>[] { ArrayClear, ConcurrentClear };
for (var i = 0; i < 5; i++)
foreach (var method in methods)
{
var sw = Stopwatch.StartNew();
var buffer = new byte[64 * 1024 * 1024];
var random = new Random(0);
random.NextBytes(buffer);
method(buffer);
Console.WriteLine(method.GetMethodInfo().Name + ": " + sw.ElapsedMilliseconds);
}
}

private static void ArrayClear(byte[] buffer)
{ Array.Clear(buffer, 0, buffer.Length); }

private static void ConcurrentClear(byte[] buffer)
{ var t0 = Task.Run(() => Array.Clear(buffer, 0, buffer.Length / 2));
var t1 = Task.Run(() => Array.Clear(buffer, buffer.Length / 2, buffer.Length / 2));
Task.WaitAll(t0, t1); }

795:デフォルトの名無しさん
17/04/11 23:59:42.35 WDRtNXIn.net
>>761
なんでそんなクソ遠回りなことやってんのか知らんが
Taskでパラレルやるなら引数渡せ

796:デフォルトの名無しさん
17/04/12 00:22:54.01 QhQPiH2H.net
>>761
少し考え違いをしていると思う、並列処理は分割すればするだけ速くなるような代物じゃないし
粒度が細かすぎる、Taskは並列というより並行処理向け。同配列に対する処理などはCPUよりGPGPU向き
―だがそれより何より


797:、その計測された時間のほとんどは配列生成と乱数格納に費やした時間だ



798:デフォルトの名無しさん
17/04/12 00:52:15.63 PvBuykCK.net
毎度思うけど命令口調のバカ何なのかねw

799:761
17/04/12 02:52:03.74 E1U6B9R0.net
>>762
Parallel 使えってことかな?

>>763
あ、乱数生成の時間まで入れてたのか
でも乱数生成分入れないようにしても、どっちも同じような時間なのは変わらない

バイト配列キャッシュ作ってるんだけど、1GBぐらいの超巨大配列の初期化に
Task の生成や切り替えに数msec使っても、効果があると思ったんだ

分割すればするほど速くなるとは思ってないけど、
2分割程度なら速くなって当然と思ってるんだけど

800:デフォルトの名無しさん
17/04/12 03:38:43.21 QhQPiH2H.net
>>765
オーバーヘッドはご存じか、C#の場合はネイティブスレッドのそれほどでも無いだろうけど
ただ…結局この場合だと演算が皆無でメモリストアに割食って無意味って所だろうか(範囲が被るほど速い

801:デフォルトの名無しさん
17/04/12 06:57:20.84 uWep8obc.net
メモリーアクセスがボトルネックになってるだけじゃねーの?

802:デフォルトの名無しさん
17/04/12 07:57:27.76 A6XRqe5e.net
常識的に考えて、ボトルネックはNextBytesじゃないかなw

803:デフォルトの名無しさん
17/04/12 11:23:50.73 E1U6B9R0.net
>>766, 767
なるほどメモリアクセスかー

Taskの切り替えや待ち時間などのオーバーヘッドはご存知よ
書いたとおり、Taskをふたつ待つ程度のオーバーヘッドは数msec

NextBytesを計測から外し、1GBで0クリアを試してみたら、150msec前後かかった
レートだと 6700MB/sec ぐらい
実行環境は DDR3-1333 なんだけど、理論値 10667MB/sec
途中GC入ってたし、こんなもんかー

804:デフォルトの名無しさん
17/04/12 11:40:08.42 7YKbJJVc.net
byte(IntPtrじゃない)の配列のアクセスでそんなにHWの理論値に近い数字が
出る訳ないと思うよw

っていうか理論値はあくまで純粋にHWの転送能力であってCPUが介在する場合は
そんな値絶対出ないし

測定値、計算のどちらかまたは両方が間違いなく間違ってるw

805:デフォルトの名無しさん
17/04/12 12:09:07.27 E1U6B9R0.net
>> 770
Array.Clear() って .NET Core の内部ではポインタ幅(64bit?)で0クリアしてたよ
端っこはバイト単位での0クリアだったけど

// now write pointer sized pieces
size_t nPtrs = (endBytes - memBytes) / sizeof(PTR_PTR_VOID);
PTR_PTR_VOID memPtr = (PTR_PTR_VOID) memBytes;
for (size_t i = 0; i < nPtrs; i++)
*memPtr++ = 0;

GC発生しないようにバッファ使い回してみたら、7000~8000MB/sec くらいだった
理論値でるとも言ってないし、7~8割なら測定値、計算ともに妥当じゃない?

806:デフォルトの名無しさん
17/04/12 13:46:41.47 PeioJu3J.net
(byte配列ならnewした時点で既定値(則ち0)で埋められてるだろ、と言ったらあかんのか?)

807:デフォルトの名無しさん
17/04/12 14:05:20.61 OIzgc8H/.net
>>772
そりゃ実験のためのコードだからね
何のためにこんなこと試すのかわかんないけど

808:デフォルトの名無しさん
17/04/12 14:11:16.09 E1U6B9R0.net
>>772
LOH(約85000バイト以上のオブジェクト)は仮想メモリ空間のフラグメンテーションを発生させるので、
OutOfMemoryException が発生しやすくなる

巨大バッファをガンガン使いまわすアプリは OOMを防ぐため、
バッファをキャッシュして使いまわす必要があったのね

んで、キャッシュしてたバッファを使うときに高速�


809:ノ0クリアしたいってのが、今回の大元でした



810:デフォルトの名無しさん
17/04/12 18:50:16.39 IE9Tc5o9.net
配列のメモリークリアみたいな物はマルチスレッド化しても高速化しないだろうね
原理的にサイズが大きくても高速化しないと思われる

811:デフォルトの名無しさん
17/04/12 19:03:44.50 0XMPUeTg.net
15年前のシングルコアのプロセッサーが当たり前の時代ならその通りだけど、
今日的にはそんなこともないんじゃないの?

たとえ物理メモリーは排他的にしかアクセスできない制約があるにしろ、
並列化の効用がまったくないとも思えん

812:デフォルトの名無しさん
17/04/12 19:08:41.74 giyYheDf.net
むしろCPUキャッシュに左右されんじゃねのか
環境でばらつきまくって計測の意味もなさげ

813:デフォルトの名無しさん
17/04/12 19:51:51.86 QhQPiH2H.net
とりあえずWindowsマシン@4.6.2で色々試してみたら

[SuppressUnmanagedCodeSecurity, DllImport("kernel32")]
extern static void ZeroMemory(byte[] Destination, IntPtr Length);

[SuppressUnmanagedCodeSecurity, DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl)]
extern static void memset(byte[] _Dst, int _Val, IntPtr _Size);

とかした方が雀の涙ほど速かった、CILだと

ldarg.0
ldc.i4.0
ldelema uint8
ldc.i4.0
ldarg.0
ldlen
initblk

あたりで漸く同等、しかも64bitに限った話、32bitだとどれも誤差レベル

814:デフォルトの名無しさん
17/04/12 21:18:24.58 u533e0uw.net
>>776
ほとんどメモリーアクセスしかないのに高速化できるわけないだろ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch