[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 07:28 / Filesize : 292 KB / Number-of Response : 1049
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part92



1 名前:デフォルトの名無しさん mailto:sage [2017/01/28(土) 16:46:53.58 ID:op86qfG/.net]
■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/

■コードを貼る場合はこちら
ideone.com/

■前スレ
C#, C♯, C#相談室 Part91
echo.2ch.net/test/read.cgi/tech/1467211515/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。

471 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 18:42:37.52 ID:NraHDdZK.net]
そういうこった。俺には使えない。

472 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 18:43:15.86 ID:NraHDdZK.net]
使わなきゃ、使いにくいとこも分かんないからな。

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

474 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 18:49:44.85 ID:YN/8CtFT.net]
>>456
ADO.NET直書き?

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

476 名前:デフォルトの名無しさん mailto: []
[ここ壊れてます]

477 名前:sage mailto:2017/03/10(金) 19:44:07.45 ID:PPM6ZnbB.net [ DotNet CoreでバッサリWebFormsとDataSet切り捨ててくれたから
日本もこれからはMVCとPOCOにシフトしていくだろうね(希望) ]
[ここ壊れてます]

478 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 20:10:01.97 ID:cBCq3F3F.net]
>>445
基本的にはEntityFrameworkで、パフォーマンスほしいとこはDapper

479 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 20:35:03.91 ID:BdCDiQus.net]
dapperって何がいいの?



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

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

482 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 09:53:48.23 ID:h5T3JHpB.net]
>>464
ブラウザーがやってくれるんじゃないか?

483 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 13:46:01.01 ID:SoGUL2Zu.net]
VisualStudio2017お試しで使ってるんだけれど
タプルとか求めていたものが有ったので使おうとしたら
ValueTupleのライブラリが標準で入らずNuGetにしか無いとか
まだ安定しない無いとか何かあるんだろうか・・・
凄い作りかけ感あるコンパイラに仕上がってるwww

使うべきか暫く様子見すべきか?

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

485 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 14:02:34.64 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 14:40:42.15 ID:SoGUL2Zu.net]
ちらちら見ていると、ValueTaskの方はもっと状況が酷いのかなw

www.buildinsider.net/column/iwanaga-nobuyuki/008
言語みたいな基幹部分を小出しにするとか、頭おかしくなってるなw
今までそんな事をした言語の末路がどうなったか知らないわけじゃなかろうに・・・

NuGetにして普通にコードする人には使わせないようにするのは、これはヤバイと中の人が感じているのかもしれんね
マイクロソフトの技術力&組織力低下酷いな、半端に才能ある奴のスタンドプレーでグダクダなってるんだろうな。
Web系に翻弄され過ぎだろ

とりあえず使えそうなのは、ローカル関数と型switchくらいかな
この辺りなら変更あってもダメージ少ないだろうし。

タプルの実装に致命的問題があるならローカルclass&struct&enum宣言でもええんやでぇ
名前空間お腐れ問題はカッコイイ事しなくても、これでも解決するんや > microsoft

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

488 名前:でもないし難しい話じゃないなとも。

プログラムとは違うけれど
3Dモデラーでツリー構造とか法線とか難解な数学概念が見ての通りの操作で動かしたり創れたりするようになって
門外漢の3Dデザイナーが普通に使えるようになったように
一度概念をキッチリ整理する必要があるんだよ、あれは。
そして言語の作りこみがあの頃から甘くなってき始めてたな、ちょっと残念な感じになっていった時代だね。

とりあえず腐り過ぎのWin10をWin7の仕様に戻せや、ストアもユニバーサルアプリも使い物にならん、色使いも糞でUIが見ずらい > microsoft
あと、WindowsUpdateのタイミングはユーザーの自由にさせよ、お前がお前のタイミングで勝手にやったら業務はむちゃくちゃになる。
[]
[ここ壊れてます]

489 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 22:05:54.03 ID:h5T3JHpB.net]
>>466
タプルなんて昔からあるだろ



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

491 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 22:40:13.41 ID:7U1HyGmG.net]
>>472
いつからここが初心者用になったんだ

492 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 01:14:05.08 ID:+ulIycHH.net]
>>469
https://github.com/dotnet/roslyn/issues/13177
によると、.NET4.7に入れることにしたみたいだね
nugetで済むのに.NETのバージョンを上げるのは面倒が多いし、今後C#のリリース速度を早めるならある程度まとめて.NET4.7にしようって考えじゃないかなぁ

言語機能の小出しについても他の言語と比べれば遅いし、互換性と将来を考えて慎重に作ってるから完全な完成を待つと永遠にリリースできなくなっちゃうし、やむをえんだろ
CLRのバージョンを保ってくれれば文句は無い

493 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 02:13:23.38 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 02:33:41.68 ID:tHLqC2EA.net]
>>475
var result = String.Join( "", list.Skip(x).Take(y) );

495 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 05:07:11.99 ID:lK2SBg8L.net]
>>476
わー、短くて綺麗。
ありがとうございました。

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

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

498 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 09:23:31.23 ID:7tB+K/sW.net]
何でこの人キレてんの?あの日?

499 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 10:01:53.12 ID:RIOf9bqD.net]
みるからに自演臭くてキモイからじゃねw



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

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

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

503 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 07:01:39.19 ID:WHuP7MmV.net]
フォームのKeyPreviewプロパティをTrueにすると、すべてのキーイベントをまずフォームが受け取り、処理が終了してからフォーカスのあるコントロールに渡されるようになります。

ってdobon.netで見つけた
やったことはない

504 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 07:17:17.53 ID:o9PLbB2Z.net]
ありがとうございます
KeyPreviewについて調べてみます

505 名前:デフォルトの名無しさん mailto:sage [2017/03/15(水) 09:07:02.25 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/15(水) 09:27:37.16 ID:N2+3G59G.net]
>>487
そこまで分かってるなら解決策は簡単。
ModelIdで検索し直す。

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

508 名前:デフォルトの名無しさん [2017/03/16(木) 03:52:05.80 ID:l+qA2/0G.net]
C#でwebBrowserを使ってるんですが
以下のhtmlをwebBrowser.DocumentTextに突っ込んで表示させたいんですが
何故かwebBrowserではそのままjqueryを読み込むことが
できないようでスクリプトエラーが発生してしまいました
対処方法のわかる方いたら教えていただけますでしょうか?

↓以下のhtml

<!DOCTYPE html>
<head>
<meta charset=""utf8"">
<script src=""https://code.jquery.com/jquery-2.1.4

509 名前:.min.js""></script>
<script type=""text/javascript"">
$(function() {
alert(""test"")
});
</script>
</style>
</head>
<body>
[]
[ここ壊れてます]



510 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 11:36:09.87 ID:oyR0ujl0.net]
なんでダブルクォーテーション2つ続いてるの?

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

512 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 16:58:42.52 ID:Qa1xgsfZ.net]
<style>
<head>
<body>

</style>
</head>
</body>


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

513 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 17:03:26.21 ID:RyFuDdep.net]
>>493
君は冷静だな

514 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 17:05:05.86 ID:Qa1xgsfZ.net]
HTMLソース
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5サンプル</title>
</head>
<body>
<p>HTML5で作成しました!</p>
</body>
</html>

連投ですまん
もっと解り易いサンプル

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

516 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 18:38:16.89 ID:RyFuDdep.net]
>>496
君は詳しいな

517 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 20:09:32.60 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 20:16:08.57 ID:kgKaK9fl.net]
非同期処理の確実なテスト方法は存在しないのでどっかで妥協しなきゃならない

519 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 07:37:50.30 ID:gTyXrRTf.net]
よく分からんな
Taskなんだから結果が出るのを待機すればいいだろ
Progressは呼ばれたらcalledフラグを立てるようにしてそいつでAssetする
タイムアウトが必要かどうかは状況次第

2つめは、内部でFileStreamを使っているならだが
Streamを受け取るインターフェースを追加する
クッソ遅いStreamは自由に再現できる



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

521 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 21:11:54.40 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/18(土) 00:00:39.16 ID:3lIBsEeS.net]
惜しいところまでは行ってるな

Progressのインスタンスを渡すのではなく
IProgressを継承し同期のReportを実装したクラスのインスタンスを渡す

524 名前:デフォルトの名無しさん mailto:sage [2017/03/18(土) 10:58:29.15 ID: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 にも貼っておく
pastebin.com/QjF0XkH4

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

526 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 00:19:27.37 ID:8DI2TWvJ.net]
>>505
FileInfo

527 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 00:30:52.74 ID:VKtnwSVx.net]
「ファイルのタイムスタンプ」でグーグル先生に聞けば
www.atmarkit.co.jp/fdotnet/dotnettips/370timestamp/timestamp.html
が一発で出てくるんだけど掲示板で聞く方が面倒じゃないの

528 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 06:34:49.31 ID:bkt1N2YW.net]
検索知らないんでしょ

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



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

531 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 14:45:08.30 ID:1DEeFth3.net]
おまいらは回答する機械

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

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

534 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 15:04:25.29 ID:1DEeFth3.net]
それにしたって餌としてはしょぼすぎる

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

536 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 16:02:53.06 ID:T5IZ831S.net]
人力検索

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

538 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 18:48:36.73 ID:lJcyTqFl.net]
>>517
でも質問してくれないと寂しいんだろ?

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



540 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 21:56:16.72 ID:HC9gBYvT.net]
マ板行けって思うスレ多いよな

541 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 01:44:39.35 ID:SU/B8 ]
[ここ壊れてます]

542 名前:MWa.net mailto: アクセスアップとお小遣い稼ぎの裏技
トラフィックエクスチェンジ
http://tra-chan.jugem.jp/?eid=1
[]
[ここ壊れてます]

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

544 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 12:24:29.57 ID:y4a+UdUh.net]
>>522
マ板行け

545 名前:デフォルトの名無しさん [2017/03/20(月) 14:10:48.91 ID:pi/vFj6F.net]
>>523お前が行け

546 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 14:57:32.61 ID:98bjORSB.net]
ここは幼稚園じゃないんだが。

547 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 15:41:51.51 ID:4DDUMBY5.net]
似たようなもんよ

548 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 15:48:57.55 ID:LcNjV7jZ.net]
言い争いを見てたら幼稚園児とたいして変わらん気がする

549 名前:デフォルトの名無しさん [2017/03/20(月) 16:00:23.53 ID:pi/vFj6F.net]

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



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

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

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

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

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

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

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

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

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

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

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



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

561 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 23:05:57.08 ID:UqOt5XZ1.net]
マンコリング?

562 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 02:05:33.87 ID:Y ]
[ここ壊れてます]

563 名前:DOC/IGa.net mailto: オーバーロードがないのは多分キャプチャが原因だと思うよ
可能なら多分やってる、というかキャプチャ無しならオーバーロード可能にしてほしい感じ
さらにいうなら、キャプチャ無し指定をして普通のメソッドが単純に名前空間上に合わられないだけにして欲しい。
でもって、ローカル変数と被る名前OKにしてくれれば一番いい。
結局、ローカル関数にした理由はインテリセンスが機能不全になって欲しくないという話なだけだから。
[]
[ここ壊れてます]

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

565 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 11:28:29.87 ID:hks7EAC1.net]
C#の糞拡張はこれからが本番ですよ。

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

567 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 13:01:02.87 ID:+8Koiwe2.net]
基地外発想だな

568 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 13:23:33.31 ID:6nIA/xoV.net]
フジテレビ的発想

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



570 名前:デフォルトの名無しさん [2017/03/22(水) 14:47:13.98 ID:T50yqk9Q.net]
>>544
できらぁ!

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

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

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

574 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 20:41:21.23 ID:qEl3ed9E.net]
だれよ

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

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

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

578 名前:デフォルトの名無しさん mailto:sage [2017/03/22(水) 22:28:00.53 ID:MyrW3Mfd.net]
>>555
どんどんお前が老いていってるだけ

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



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

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

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

583 名前:っているのは年寄りだけだよw []
[ここ壊れてます]

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

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

586 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 02:04:38.43 ID:VjAjr2s9.net]
>>559
UI関連は、UIスレッドでのみ動作することを前提に設計することで、パフォーマンスを上げてる。
マルチスレッド対応にすると排他制御等が増えてしまい、パフォーマンスが下がる。

>>561
非同期処理とか書きやすくなったから、最近は割と楽だろ。
Invokeも使う必要ないし。

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

588 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 02:07:28.88 ID:Un9Q+jtZ.net]
>>563
Task作った奴はバカだと思うwww
Invokeの方がまだ誰にでも分かりやすい。

継続なにそれおいしいのwww
関数型言語面白いねって感じだね

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



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

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

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

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

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

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

596 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 02:30:27.90 ID:9gkqdxMB.net]
>>571
いるよね、こういう量的な進歩と質的な進歩の区別のつかない

597 名前:z
馬鹿な奴だ
[]
[ここ壊れてます]

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

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



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

601 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 02:36:32.46 ID:9gkqdxMB.net]
しかし、マルチコアっていうのは苦し紛れの「苦肉の策」であってポジティブな進歩じゃないって
パソヲタレベルでも知ってる常識だと思ったけどプログラマでもそういう認識がない奴がいるんだね。

そういう奴は「人月の神話」って言葉も聞いたことないんだろうな。
生産性は作業者の投入人数に比例しないのはコンピュータも同じだよ馬鹿

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

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

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

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

606 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 04:45:12.92 ID:0wLqn0eU.net]
ATLがいつ滅んだんだよw

607 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 07:10:17.81 ID:UmFjwc/F.net]
昔の名残とかじゃなく、単にマルチスレッドでUI部品を扱うのが大変だということだと思うんだが

ユーザーインターフェイススレッド - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

>例えば、Java の AWT では、1996年の最初の時点では、
>単純にスレッド間でデータ共有型のマルチスレッドになっていた。
>しかし、データ共有するには、ロックをかけないといけないが、
>親コンポーネントから子コンポーネントを呼んだり、
>コールバックで子から親を呼んだり、
>アプリケーションからGUIライブラリを呼んだり、
>GUIライブラリからアプリケーションをコールバックしたりと、
>双方向に呼び出すことが多く、
>異なるスレッド間で双方向に呼び合うときは、ロックの順番に注意を払う必要がある。
>これはソフトウェアが非常に複雑になる原因となってしまう。
>また、ロック順序のミスが引き起こすデッドロックは常にではなく
>たまに発生したりすることの多いバグ(時間的確率要因が関与する偶発性のあるバグ)であり、
>バグ取りが大変になるという問題があった[

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

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



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

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

612 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 10:27:00.68 ID:BTeOg9CT.net]
>>564
COMのアパートメント問題を解決するためじゃないの?
厳密にはInvokeしなくて良いケースもあるけど、それを保証する方法が皆無に等しいという。

ウインドウメッセージ云々とか、本質とはかけ離れている気が。

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

614 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 12:53:23.45 ID:Un9Q+jtZ.net]
>>586
UI側がバージョン管理システムみたいな扱いをすればいいんだと思うけどね
非ロック型で同期をとる方法としては有効だと思う。
いわゆる
読み込んで、内容を変更して、読み込み時点データとともにUIに返す。
UI側は、ロックして読み込み時点と現状が一致しているなら置換してアンロックそして処理終了。
ロックオブジェクトが自分自身に限られるからデッドロックの可能性はない。
この方法の場合、読み出すだけならロック不要でいつでも読み込めるしね。

俺は、UIに関してはそういう設計にして自分のメソッドはすべてスレッドセーフだ。
長年の実績ある方法だし、このやり方は非常に優れていると思う。
更新失敗とリトライは発生するが、並列度はかなり高くなる。
デッドロックは皆無で、見通しも良い。

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

616 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 17:07:47.97 ID:EtPn1ouj.net]
なんか酷いやり取りだね
マルチスレッドを根本的に理解してないのが何人かいるねw

スレッドセーフに作ることは高コストだから特に理由がない限りそうしないのは
マルチスレッド理解の初歩の初歩だと思うんだけど。

あれだ、UIは別スレッドからのアクセスを検出して例外投げるようになってるわけだけど、
例外が投げられなければ何も問題ないはずだ、っていうVBerな発想なのかねw

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

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

619 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 18:15:58.21 ID:ncdnXTN/.net]
マルチスレッド動作のformにとは言ってないんだよ・・・



620 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 18:57:02.57 ID:99dRkoLd.net]
>>592
そこでwpfのバインディングですよ

621 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 1 ]
[ここ壊れてます]

622 名前:9:28:24.32 ID:Un9Q+jtZ.net mailto: >>591
酷いやり方というのはある意味正しい
そもそもformsが腐っている以上綺麗な方法はハナから存在しない。
それでも誰にでもわかり、誰にでも修正可能なやり方っていうのが重要なんだよ。
それができなきゃ、一人で勝手にやっていろって話になる。
チームで作業は不可能だ。
[]
[ここ壊れてます]

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

624 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 19:32:40.10 ID:Ei+8urX3.net]
>>583
> GUIライブラリからアプリケーションをコールバックしたりと、
これってあるか?ピンとこない。

そもそも、UIってロックする必要があるか?
現状、UIスレッドとタスクスレッドは別で、結果的にプログレスバー等の更新にはinvokeを使うしかない。
これがウザイから「直に書き込みさせてくれ」というのが俺の希望。
そもそも、排他的な実装をしなければならない理由がないだろ。
プログレスバーなんて普通は共有しないし、
してたらしてたで「どちらの内容が表示されてもいい」が仕様になるのだから、
レーシングしたところで問題ない。
結果、リクエストがあったらただ更新すればいいだけ、それを表示すればいいだけ、で終わりじゃないか?
ファイルみたいにロックありきの物ではないと思うんだが。

625 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 19:35:54.46 ID:g/kXmQSp.net]
マルチスレッドアクセス可能なGUI採用してるシステムなんてあったっけ
UIスレッドモデルが遺産だというのなら
新しいシステム(Windowsに限らんぞ)ほど「そうなってはいない」はずだが
実際は最近のOS(やはりWindowsに限らない)でもUIスレッドモデルだ
何故だろうなあ

下手の考えなんぞ大抵は
「先人が思いついたけどあえてやらなかった」か「すでに失敗した」か

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

TaskもWPFもHaskellみたいな超絶技巧を目指しているだな、そんなものは要求されていないのに。

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

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

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



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

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

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

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

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

635 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 20:48:03.89 ID:Ei+8urX3.net]
>>606
今時GUIしかやらんだろ。
が、まあこっちの認識がずれていたのは分かった。

>アプリケーションからGUIライブラリを呼んだり、
>GUIライブラリからアプリケーションをコールバックしたりと、
>双方向に呼び出すことが多く、
前者が「プログレスバーの更新」で、
後者が「 XXX.click += YYYY;」か。
確かに双方向だ。

で、ロックは必要か?
プログレスバーの更新なんて、ロックする必要ないだろ。
他もそうだと思うが。

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

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

638 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:00:57.40 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:14:48.29 ID:Ei+8urX3.net]
>>610
いや、ロックの必要はないだろ。
正確に言えば、外部からの明示的なロックが必要無いように作れば作れるだろ。
今そうなってないだけで。

要するにプログレスバーを UI, Task_thread_A, Task_thread_B の
どこからも更新出来るようにしたいとして、
全部、 progressBar.value = x; と書かせろ、と言いたいだけで。

内部的に細かくロックして、順に処理するのはCLRが勝手にすればいい。
その結果、それぞれのスレッドが微妙にロックするのも仕方ない。
ただ、循環ロックにならない限り、デッドロックにはならないだろ。
そして普通に書けば、循環ロックにはならないだろ。



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

641 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:24:07.98 ID:NnBP2eXC.net]
>>608
GUIしかやらない?どこの世界の話だよ

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

643 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:30:44.46 ID:5A+rvbXC.net]
生兵法はケガの元だな
毛がなくて良かったね〜

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

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

646 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:33:06.10 ID:0wLqn0eU.net]
>>588
寝ぼけるのはいいかげんにしろ。

647 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 21:34:23.52 ID:5A+rvbXC.net]
3行以上はキチガイ

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

649 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 23:30:21.13 ID:u0oYY3Ci.net]
>>620
で、お前はどうやるんだい?



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

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

652 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 23:47:48.47 ID:Ei+8urX3.net]
てす

653 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 23:50:59.28 ID:Ei+8urX3.net]
>>617
ちげーよ。まあ結論としては、簡単に出来るけどC#はやらなかった、というだけだ。
そして俺はこの選択は間違いだったと見るね。
実装例としては以下。(C#の文法は知らないので真似てみた。適宜脳内修正よろしく)

//ここにコードを書いたのだが、403 Forbidden になるぜorz

mutexを使う場合、mutex確保中に他ロックを取りに行かなければデッドロックはしない。
或いはthread_IDを付けておいて、UIなら直接変更、その他ならinvokeにしてもいい。
いずれにしても、ユーザー側にはinvokeが見えなくなる(隠蔽される)
これの方が良かったと思うよ。いちいち混乱しなかった。

そちらの例は、2人のユーザ間でのデッドロックであって、
俺が今話しているUI/タスクスレッド間の例じゃないじゃん。
なお、解法は、普通に「両方取れなかった場合は一旦全部リリースしてリトライ」でいい。
ただし今時はそれはDB任せで、ユーザ側でのロック管理なんてしない(はず)

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

655 名前:デフォルトの名無しさん mailto:sage [2017/03/23(木) 23:53:41.78 ID:u0oYY3Ci.net]
>>622
ケースバイケースだろ
そもそも >>617 は説明のためのサンプルだから不満なら両方書き込みのケースを考えればいいだけ

>>623
マルチスレッドGUIフレームワークに夢見てる奴がいるからでしょ w

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

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

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

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



660 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 00:13:35.16 ID:OAgok+ci.net]
Windows Formsの場合は、単純にFormがActiveXコンテナになり得るから、
アパートメントの制限に対応するために用意された、実装上の都合による物だよ

おそらく、ロックの問題ではなく
リソースリークを根本的に解決する方法がないから用意された手続きなんだよ。
ラップして

661 名前:解決できると思うなら、それで良いんじゃないか []
[ここ壊れてます]

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

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

664 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 00:50:30.06 ID:RtKD05ZR.net]
>>630
俺は622じゃないけど。

従来型のロック機構だとコストが高すぎる場合もあるんだよ。
俺は詳しくないけど、多分Erlangとかの世界で。
mutex等は共有メモリへの書き込みが生じるから実はかなり重い。

665 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 02:13:48.63 ID:5bMFJR3b.net]
馬鹿にマルチスレッド。

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

667 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 02:44:50.15 ID:7cONiVN5.net]
ここはまだWinFormsの時代かw

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

669 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 03:11:50.24 ID:m/Lurhmo.net]
>>612
progressBar.Value+=1
としたときに
1.読み込み
2.加算して書き込み
の処理が必要とすると、1と2の間に別スレッドが書き換えを行うことで結果が矛盾する
Interlocked命令を使えばそれは防げるけど、MaxValueを超えないかとかの判定が入るので結局ロックが必要

この程度ならまだしも、裏でWin32やCOMを叩いてるコントロールはさらにややこしい



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

671 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 06:28:32.59 ID:Cpc8yNoh.net]
高速(で書ける)

672 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 07:23:36.10 ID:vGZXBTd1.net]
高速で壊れるの間違いだろ
馬鹿はphp書いてろ

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

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

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

問題は、それをすべての人に要求するのは難しい、自分の忙しくなったらきちんとせずにインクリメントしてるしなw
という事なんだな。

676 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 15:14:34.51 ID:suDsBIm1.net]
やっとまともなやつ来た

677 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 16:13:38.13 ID:m/Lurhmo.net]
>>646
今もそうなってるじゃん
ProgressBarクラスがカウンターを持ってて、ネイティブのmsctls_progress32にメッセージを送って表示を更新してる

ぜひスレッドセーフに再実装してみてくれ

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

679 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 19:42:33.91 ID: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なんて極限まで速い意味はないし。
ラップしてもいいし、上記のようにロックフリーにしてもいい。
(もちろんユーザがやってもいいんだが、そういう言語じゃないでしょ)

https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9A%E3%82%A2%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97
https://ja.wikipedia.org/wiki/Lock-free%E3%81%A8Wait-free%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
つかいつからお前らこんなに馬鹿になったんだ?ふらっとから混ざったのか?
ロックの設計の仕方を知らないのはお前ら全員じゃねーかよ。



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

馬鹿なのかほんと

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

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

683 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 20:07:48.70 ID:RtKD05ZR.net]
>>651
お前がinvokeをウザイと思わなければそれでいい。
俺はinvokeをウザイと思うからMSが隠蔽しとけ、と思う。
多分後者の方が多いだろ、この件に関しては。

>>652
ついにC#がGC言語だと知らない奴も出てきたか、、、

>>653
MSはこの程度ならきっちり実装出来るよ。
というかMSって比較的まともだと思うぞ。

684 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 20:09:50.64 ID:UKoqSEXl.net]
BeginInvokeはどうするの?

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

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

せめてProgressBarだけでも対応しとけよと思うだろ普通。

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

しかし、

688 名前:こういう馬鹿に限って偉そうなのは何なのかね []
[ここ壊れてます]

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



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

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

692 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 22:04:34.44 ID:vGZXBTd1.net]
ああでも今回はさすがにClickOnceは危険ニキを支持だな

>MSならこの程度はきっちり実装出来る

ここが一番面白かった

693 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 22:13:22.45 ID:RtKD05ZR.net]
つまり、俺が言いたいのは、以下ね。

>>559 > invokeってフォームに限ってどうして必要なのですか?
老害: それがしきたり。
ゆとり池沼連呼リアン>>658: スレッドセーフ!スレッドセーフ!
俺: MSが馬鹿だから。

ゆとりって連呼リアン程度の知能しかないよなマジで。
そもそも俺の>>650>>589(俺ではない)とほぼ同じ内容だぞ。
お前ら馬鹿が付いて来れてないから書き直しただけでね。
お前らが589を最初から理解していればもっとマシな議論だったろうさ。

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

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

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

697 名前:デフォルトの名無しさん mailto:sage [2017/03/24(金) 22:42:26.38 ID:9LJ2CaVF.net]
馬鹿な上にネトウヨって人生終わってるな

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

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



700 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 01:39:16.42 ID:O6oCv4KM.net]
>>668
そもそもコードの設計論から言ってもワーカースレッドからUIを操作するなんてありえない。
UIに依存するモデルってどんな糞設計だよ。

モデルにSynchronizationContextとか持たせてUIスレッドに同期したイベントで通知させるのは
設計としてありだけど、直接コントロールをいじるとかありえん。

それも気に入らないならUI側が能動的にタイマーでも使ってモデル側を読めばいいだけ。

701 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 04:16:02.72 ID:++OH//Pd.net]
VB上がりにモデルなんて概念ないからw

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

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

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

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

}

706 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 09:59:45.97 ID:swqPfyBg.net]
だと思った

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

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

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



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

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

712 名前:デフォルトの名無しさん [2017/03/25(土) 12:12:06.97 ID:AJzcpICN.net]
話題が長引いても安心な匿名掲示板「Anontown」 [無断転載禁止]?2ch.net
echo.2ch.net/test/read.cgi/tech/1490366833/

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

714 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 14:21:07.83 ID:pA2Zx06R.net]
馬鹿がプログラムを書かなければ解決

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

716 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 15:02:20.11 ID:OnvCww5G.net]
勝手にそういう言語とか決めないで欲しいな
糞袋の観測範囲で

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

718 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 18:18:23.98 ID:gz8AHGhh.net]
Data URIスキームで埋め込むとか

719 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 00:26:03.65 ID:b1vqxh2T.net]
HaskellといえばAI。つまりそういうこと。



720 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 11:09:36.56 ID:WUrKAJma.net]
こんな感じか?
livedoor.blogimg.jp/lad

721 名前:ymatome/imgs/7/6/76ec3c1e.jpg []
[ここ壊れてます]

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

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

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

725 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 13:24:42.49 ID:TjDGXANh.net]
暴論w

726 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 13:28:02.28 ID:WQ8v1gdY.net]
みんなコード書くよりレッテル貼りの方が得意なんだな

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

728 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 13:59:10.19 ID:TjDGXANh.net]
いつ終わるか分からない処理もあるから。

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



730 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 14:03:21.73 ID:xbLciI4B.net]
鬱陶しいから来週まで続けるなよ
でないとこのスレ埋め立てるからな

731 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 14:13:37.56 ID:Lixhnbpu.net]
4月1日までか…長いな

732 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 14:19:29.01 ID:Uwt+/Suh.net]
つかお前ら落ち着けw

俺は>>650だよ。そして>>640含むお前ら大多数よりは賢いことはもう示したろ。
で、>>670-671も同様にアホっぽく見える。
しかしマジでそう思っているのなら、それを示せば多少は教えてやるよ、ということだ。
何か最近、煽ったりカニンガムの法則を試しているような奴も多いんでね。
それに付き合わされるのはウザイ。

俺の意見は ID:Un9Q+jtZ とは完全には一致はしないが、
6割くらいは一致するし、彼が何を言いたいのかは分かる。
既に言ったとおり、650も>>589の代弁に近い訳でね。
お前らは>>597(重ねて言うが俺ではない)の意味を理解出来ていないように見える。

そこでお題を出してやる。
これをお前ら流の「美しい実装」をする方法を述べてみろ。
駄目出ししてやるよ。

フーリエ変換をする関数 calc_FFT があって、
計算に時間がかかるので、プログレスバーに進捗状況を表示したい。

参加する人はどうぞ。

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

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

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

こういう仕様は十分に合理的。

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

736 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 15:00:04.71 ID:7VPGG3Vy.net]
モデル概念

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

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

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



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


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

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

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

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

741 名前:デフォルトの名無しさん [2017/03/26(日) 15:46:45.12 ID:bdiJ1zQR.net]
>壊れて向きが変わらなくなったチョロQかテメー

斬新な煽り方だなw

742 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 16:30:36.77 ID:E6fNHh8L.net]
ネトウヨとかもそうだけど、頭悪い奴に限って、

「この俺だけが世の中の真実に覚醒した!!!この世は嘘と欺瞞にまみれていて(笑)
俺以外の連中は馬鹿ばかりだ!!!」

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

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

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

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

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

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

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

748 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 20:02:08.99 ID:YTmW3NMW.net]
>>707
利根川さんきたーーーーw

749 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 20:06:43.37 ID:Uwt+/Suh.net]
>>713
俺は語りたいわけじゃない。
だから君の意見を尊重して、俺の答えは書かないことにするよ。

君らは一生馬鹿なままで過ごせばいい。
C#にとどまっている限り、回りもみんな馬鹿だから、ばれないで済むだろう。

ただ、知っている奴が見たら、お前らは本当に間抜けなことをしている。
だけど、そういうのは自分でいろいろ考えないと身につかないんだよ。
だから自助努力する奴に対してはサポートしてやろうとしただけ。
とはいえ、俺の案も他言語では普通に使われる手だから、探せば出てくるはず。
それは君たちで探すんだね。

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

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

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



750 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 20:09:36.55 ID:XWnO8Cg2.net]
めっちゃ早口で言ってそう

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

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

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

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

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

756 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 00:19:42.90 ID:wneB9bMR.net]
じゃあ一行で。スレタイ読め。

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

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

758 名前:デフォルトの名無しさん [2017/03/27(月) 04:51:00.01 ID:FSqhbRGK.net]
>>714
誰も触れてくれなくて草

759 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 05:02:30.31 ID:rNkb8v7V.net]
>>723
>>700 に言えよ w



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

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

762 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 22:59:41.60 ID:ty5ByWfa.net]
>>690
スタティックおじさんって誰よ?

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

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

765 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 23:52:27.87 ID:dYBhOZra.net]
性的

766 名前:デフォルトの名無しさん [2017/03/28(火) 07:20:39.72 ID:1WRXezaS.net]
>>712
不二痛のノンプログラミングツールの
販促で 銀の弾丸を求めて とか
書いてあったの思い出した

あんな大手企業がスゲー認識してるなと思った

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

768 名前:デフォルトの名無しさん mailto:sage [2017/03/28(火) 16:32:12.10 ID:WR7Bj+dr.net]
Windowsがまともに動きゃ動くだろ

769 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 00:54:43.35 ID:8DsEMtOy.net]
.NET CoreならWindowsじゃなくても動くんじゃね



770 名前:デフォルトの名無しさん [2017/03/30(木) 01:35:10.25 ID:DtnWdi8P.net]
ARMで動くのか?

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

772 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 02:50:16.54 ID:DVY8Bk9i.net]
>>737
動くよ、ググってみ

773 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 06:49:49.86 ID:U97Tvha+.net]
>>738
ならない

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

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

775 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 14:28:02.89 ID:gIiQslt6.net]
スレチ

776 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 19:34:04.77 ID:BtloYTx6.net]
ASP.NET MVCなんですが

DBに処理対象データがあるか確認
__ある場合:メッセージボックス(*件処理します。処理を続けますか?)
____はいの場合:データ更新処理
____いいえの場合:なにもしない
__ない場合:メッセージボックス(データがありません)

こういう処理を非同期リクエストを使わずに実装したいのですがどうすればいいでしょうか
入力フォームの内容もクリアされないようにしたいです

777 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 19:36:51.55 ID:kI20EOUu.net]
簡単だよ

778 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 20:45:16.64 ID:BtloYTx6.net]
>>744
教えてください
お願いします!

779 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 21:59:00.75 ID:wAJQEnGm.net]
なぜそんなことを他人に聞かないとわからないのかわからない。



780 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 22:08:53.88 ID:PPRsLJ2Y.net]
>>740
遅くなったけどありがとう
やっぱりそうか

781 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 22:10:11.37 ID:9w4qNkVe.net]
>>743
正直おまえキモイ

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

783 名前:デフォルトの名無しさん mailto:sage [2017/04/01(土) 19:08:34.68 ID:iJwskPQ3.net]
while(true)
{
Console.Out.WriteLine("氏ね");
}

784 名前:デフォルトの名無しさん mailto:sage [2017/04/01(土) 19:15:59.90 ID:4r7Zvrb2.net]
標準出力とか久々に見たわ

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

786 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 13:48:10.33 ID:YcnJ2dMt.net]
フォルダにアクセス権限でも付けとけや
スレ違い

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

788 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 14:18:51.99 ID:G0J69e58.net]
普通にできるが

789 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 15:39:57.58 ID:sZC7W3vJ.net]
普通にはできませんでした



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

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

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

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

794 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 23:45:38.38 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/04/11(火) 23:59:42.35 ID:WDRtNXIn.net]
>>761
なんでそんなクソ遠回りなことやってんのか知らんが
Taskでパラレルやるなら引数渡せ

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

797 名前:、その計測された時間のほとんどは配列生成と乱数格納に費やした時間だ []
[ここ壊れてます]

798 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 00:52:15.63 ID:PvBuykCK.net]
毎度思うけど命令口調のバカ何なのかねw

799 名前:761 mailto:sage [2017/04/12(水) 02:52:03.74 ID:E1U6B9R0.net]
>>762
Parallel 使えってことかな?

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

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

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



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

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

802 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 07:57:27.76 ID:A6XRqe5e.net]
常識的に考えて、ボトルネックはNextBytesじゃないかなw

803 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 11:23:50.73 ID:E1U6B9R0.net]
>>766, 767
なるほどメモリアクセスかー

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

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

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

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

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

805 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 12:09:07.27 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 13:46:41.47 ID:PeioJu3J.net]
(byte配列ならnewした時点で既定値(則ち0)で埋められてるだろ、と言ったらあかんのか?)

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

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

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

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

809 名前:ノ0クリアしたいってのが、今回の大元でした []
[ここ壊れてます]



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

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

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

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

813 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 19:51:51.86 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:18:24.58 ID:u533e0uw.net]
>>776
ほとんどメモリーアクセスしかないのに高速化できるわけないだろ

815 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:45:31.51 ID:0XMPUeTg.net]
>>779
高級言語のコード上はそうでもCPUの実際の動作はそうじゃないよw

816 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:56:27.84 ID:5KMe1hi6.net]
どう動いてるんだ?

817 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 23:32:44.30 ID:7AJloho+.net]
>>780
はあ?
メモリーアクセス以外のどんな動作があるんだよ w

818 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 23:49:21.06 ID:fn4L3E2o.net]
仕組み判らないけどメモリをキャッシュしてる場合
同じキャッシュ単位内に同時に書き込みできるものなのか?

819 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:14:45.08 ID:Vv6BlwOK.net]
使うときに必要な分だけ0クリアじゃだめなんか?大量にバッファを0クリアする場面が思い付かん。



820 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:38:14.37 ID:px7lD0L1.net]
>>782
DMAでも使ってない限り、少なくともポインタのインクリメントとループの終了条件のチェックは入る

821 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:57:14.48 ID:G9tlFT6D.net]
>>785
x86にはストリング命令というチートが有ってだな

822 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:07:16.95 ID:px7lD0L1.net]
あ、ポインタは自動インクリメント付きの命令が使えるかも

823 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:22:49.09 ID:sVC5qkLg.net]
>>784
つ GC

>>783
Core i7 2600 4Core Sandy Bridge とかだと、CPU-Z とかのツールで見てみると
L3 キャッシュまで搭載していて、
・L2 は 256KB が 4コア分
・L3 は 8MBひとつ
なので、L2間でコア間のキャッシュコヒーレンシ(一貫性)を解決してるはず
キャッシュライン(64Byte)ごとに他のコアで書き込みがあるかとかをチェックしてる

同時の書き込みもちゃんと検知されている
キャッシュラインで競合すると書き戻しとかが発生するので、
重ならないようにするのがいいらしい

824 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:23:52.75 ID:DHabuNl5.net]
そもそもrep stosb云々とか以前に、命令のクロックサイクルなんかより
メモリレイテンシがデカすぎて取るに足らないって事よ、コヒーレンシの実装にも左右されそうだし
1つのバカでかいバッファより、バッファ自体を分割したほうが良いんでないか

825 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:44:29.44 ID:G9tlFT6D.net]
スレッドをいくつ作ろうが、単純な0クリアだからキャッシュ内のメモリーを処理する速度がキャッシュとメモリーの転送速度より早くなり
CPUはキャッシュが満たされるのを待つ必要があるから頭打ちになるってことかね

826 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 03:28:18.29 ID:NHsAQDrp.net]
WinFormsはif文やっと覚えましたってレベルでも
有名なサイトのコピペで目的のもの作れたが
WPFはデリゲートや非同期を熟知してないと一歩も進めない感じ
コピペしたくても自由度が高く手法が多すぎて無理

827 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 05:44:30.50 ID:FNNFGlTu.net]
今のCPUなら1CPUでも、連続0書き込みなんかしたらメモリーの速度を圧倒してしまうからな
マルチスレッドなんかにしたら、そのオーバーヘッドが邪魔してかえって遅くなるだろう

828 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:14:59.28 ID:wfOumNdE.net]
CPUの実際の動作がさっぱりわからん

829 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:22:05.68 ID:vvMMmk8r.net]
気にしなくていい



830 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:53:09.50 ID:DSZn496T.net]
>>785
おっさんいつの知識で語ってるんだよ w
そんなもん主記憶への書き込みに比べたらゴミにしかならんぞ

831 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 07:19:52.20 ID:FNNFGlTu.net]
>>793
CPUというよりも、CPUとメモリーのスピード差が決定的すぎるんだよ
メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
余りに待ちが長いので、その間に色々計算ができるようにCPUには工夫が入っていたり
マルチCPUにして、別のCPUが計算している間に書き込んでしまえといった方面で創意工夫がされているんだ。
境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
書き込みスレッドは一本にして、他のCPUは別のメモリーアクセス以外の仕事ができるように開けておいた方がトータル良い結果を出すって事。

832 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 08:39:19.14 ID:2TLG8dmE.net]
どうでも良いが、メモリーに書き込まないスレッドとかありえないと思うんだ・・・

833 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 10:17:04.48 ID:xhr4sxE5.net]
本当に小規模な計算ら、レジスタだけで解決できるだろう

834 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:14:58.98 ID:mVrmFNTT.net]
C++ならともかくC#で気にする必要のあることなんだろうか

835 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:31:22.91 ID:FNNFGlTu.net]
>>799
知っていれば無意味な並列化とかしなくて済むだろ
そうすればソースも分かりやすくすっきりするし
0フィル処理なんて詰まらない処理なら、効果はてきめんだ。

836 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:43:29.67 ID:xhr4sxE5.net]
無意味な並列化にかかる工数と、無意味な並列化は逆効果ということを検証する工数
どちらがよりコストがかかるんだろうか。

837 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:49:55.01 ID:FNNFGlTu.net]
高速化目的で並列化しなきゃならない程の状況なら、検証はするだろ。
で、並列化するときにどういう方向性が効果的かってのを知っておくことは
コードを手早く書く上での基本テクニックだよ
無意味なコードは、そもそも書かないし試さないというショートカットができるからね。
将棋の名人でもすべての手を読んでいる訳じゃない、効果的な枝だけを深読みしているみたいなもんだ。

838 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 14:09:41.46 ID:xhr4sxE5.net]
並列化をしたくなるのは、代替がそういう状況に陥る前の段階での思いつきなんだよねたとえば今回の0フィルとか。

839 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:09:48.66 ID:aK+zC0HQ.net]
並列化の基本はいかに粒度を上げるかだよ
極端な話、プロセスを2つに増やして2倍速くなるならそれでいい
ミクロな視点で考えるのはほとんどのケースにおいて時間の無駄



840 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:28:44.49 ID:FNNFGlTu.net]
>>803
こういうのってコンピュータの仕組みが分かってしまえば、高速化手法として頭に浮かぶことすらないですから。
考えるまでもなく除外なんですよ、脊髄反射。
よく似た物にページングのチューンなんかがあるね。
並列化したら、ずっと仮想メモリにページアウトページインばっかりするようになってしまうのが見え見えのコードとかね。
こういうケースが見えて居る時にマクロ視点でプロセス増やして・・・と考えることは無いねw

841 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:05:14.12 ID:sVC5qkLg.net]
>>805
コンピュータの仕組みなんて常に変わっていくもの
脊髄反射で手法を除外するのはよくない

あと一レス目で指摘するならともかく、問題点が整理されてから
後出しで手法をダメ出しするのはカッコ悪い

842 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:18:41.10 ID:xmE6C1ua.net]
>>796
それってCPUの実際の動作じゃなくて単なる考え方だよね・・・

843 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:34:37.22 ID:2TLG8dmE.net]
と、言うより>>796は思いっきり出鱈目ですわ
境界チェック云々はマルチCPUじゃなくてパイプラインで解決されるからプログラミング要らずだし

844 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 19:49:41.71 ID:woBc/tdN.net]
>>79
> メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
今時のメモリー(主記憶)のレイテンシーって10ns以下だと思うが10nsで1,000命令も実行できるCPU教えてくれ

845 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 20:53:44.12 ID:FNNFGlTu.net]
>>808
まぁ、その手の事を指摘したつもりだけれどそう読んではくれないみたいだね。
あと、最近のはパイプライン以外にも命令の並べ替えやら入っているからw

ホコポコ無意味に返信している内容は、多分自演なんだろうけど、そろそろやめたら。
こういうのはゲーム作ったことあるような人間なら常識の範囲なので、考えるまでもないような話の類。
俺以外のヤツもたくさん指摘しているが、それだけ普通に知っている人は多い話なのだよ。

846 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:04:00.56 ID:1tPgrneG.net]
いつの時代のどのハードのゲームだよ
アセンブラのバイトコード気にするとか20年前の話だろ

いっぽかたが計算してる間に他のCPUで書き込みするのは
同時にメモリに書き込もうとして競合するのを避けるためじゃないん

847 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:15:04.20 ID:FNNFGlTu.net]
しつこいねぇ
この手の話をゲーム屋が知ってるのは、何かの本で読んだとかではなくて
ソニーとか任天堂とかマイクロソフトとか今は逝ってしまっているセガとかハード屋が
セミナーで現在のハードの状況と止めた方が良いコードなんかのヒントとして教えてくれるからなんだよ。
その知識を持って、インテルの資料とかを読めば大体の事は分かるんよ。
もちろん素から勉強している人も居るだろうけどね。

今回の話はマシン語ではなく、最近のメモリー事情の話なんだよ。
連続アドレスの書き込みor読み出しには強いが、飛び飛びのアドレスにアクセスすると弱いダイナミックメモリー事情とかの話。
メモリフィルとか連続アドレスをアクセスしているのに、わざわざ壊すようなマルチスレッドはそういう点でも駄目なんだな。
決定的にはメモリーが遅いという点に尽きるが。
こんな風に駄目な理由に一つ以上のネタがあるんだよ、だからやるまでもないの。

848 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:29:31.37 ID:1tPgrneG.net]
ほんとに理解してるか?
パイプラインで境界チェックを解決って意味が分からん
どうやってんの

849 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:32:07.91 ID:3oML3qao.net]
そろそろ死ねよチンカス勢
これ以上口を聞くとスレを埋めるぞ



850 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:46:56.27 ID:2TLG8dmE.net]
>>813
パイプラインがRISC時代に進化して、レジスタが干渉しなければインストラクションを同時実行するようになったから
件の例だとメモリクリアと境界チェックを同時にヤるんだわ
だから一つのCPUは見かけ上メモリクリアを境界チェックの時間0で延々と実行する

コレを実行するのは一つのCPUだし、同時実行に人が介在すること

851 名前:無いのでプログラマーは何もヤることはありません
ホント>>796は酷い出鱈目ですわ
[]
[ここ壊れてます]

852 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:00:11.37 ID:oixKZUzL.net]
何を争ってるのかさっぱりわからんw
ただ昨日書いた>>776が間違ってることはよくわかった。
よく考えればこれ486の時代とかでも当たり前だw
すまんかった

853 名前:デフォルトの名無しさん [2017/04/13(木) 22:00:58.20 ID:FNNFGlTu.net]
>>815
>境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
これがパイプラインやらディレイスロットに相当する話として描いたんだよ
計算時間隠ぺいはパイプラインだけじゃないからな、不正確になるだろ。

854 名前:デフォルトの名無しさん [2017/04/13(木) 22:08:08.05 ID:FNNFGlTu.net]
ちなみに昨今のCPUは、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
この変換で色々な隠ぺい処理がされる。
パイプラインの直接関与は無い。

855 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:55:07.48 ID:UJp3daw4.net]
そういうのはC++使いにやらせとけ

856 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:32:52.23 ID:ZueE7S//.net]
CPUの種類もいっぱいあるし実装すらmonoとかあるんだから考えても無駄だよ
ふつーにヤレ

857 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:35:00.21 ID:8HEXXOrW.net]
.NET 4.7でTupleも標準で使えるようになったと思ったら
Windows Server 2016でまだ使えない

858 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:51:42.17 ID:qn5HP47l.net]
>>821
4.7がまだインストールできないってこと?

859 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 00:17:56.85 ID:SWEjH6Xz.net]
>>788
GCってガベージコレクタか?
メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。



860 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 07:19:22.25 ID:KckXzUzz.net]
>>822
4。7って自動で入るのか?

861 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 08:29:17.03 ID:pJlkTYEJ.net]
.NET Framework 4.7 is part of Windows 10 Creators Update. What about other Windows versions?
You can start using .NET Framework 4.7 today on Creators Update. It will be available on other Windows versions soon. .
NET Framework 4.7 will support the same Windows versions as .NET Framework 4.6.2. It is an in-place update.

Windows10だけらしい

862 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:41:38.09 ID:zACr9/Dt.net]
4.7なんて何に使う気なんだ

863 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:57:13.78 ID:vwaM1ek4.net]
NuGetで取ってこなくても最新の機能が使えるとか
ValueTupleとかValueTaskとか

自分も試しにアップデートしてみたがまだ使えないみたいだね
もうちょっと纏めてからアップデートしてくれた方がいいんだけど
アップデートが細かすぎる

864 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:03:25.72 ID:znF0F+kk.net]
>>826
何に使うのかは知らんけどtupleを使いたいんだろ

865 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:10:48.82 ID:pJlkTYEJ.net]
知っていると思うけど、VSインストーラ立ち上げて4.7を追加インストールします
Windows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが
多分それも必要です

866 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:19:05.97 ID:bLw6Whqv.net]
Tuple<T>ってC#4.0からあったと思ったがそれじゃなく?

867 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 02:12:01.30 ID:aGMB9daN.net]
>>830
それとは違う

868 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:12:37.06 ID:iCdjVYwG.net]
>>818
ペンティアム2を昨今のCPUって言う人初めて見たw
てか、それらはx86のRISC化なんだが、
RISCっても

869 名前:のはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ
パイプラインの関与と言うか、要です
[]
[ここ壊れてます]



870 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:16:28.45 ID:C33P0hB8.net]
アセンブラできない奴はまともに最適化はできない。これだけ。

871 名前:デフォルトの名無しさん [2017/04/15(土) 10:18:54.18 ID:3qBkA9st.net]
アセンブラとか老ガイジかな?

872 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:23:22.48 ID:C33P0hB8.net]
c#のデバッグでなんで機械語が表示できるようになってると思ってんだ? 低脳馬鹿デジタルネイティブさん >>834

873 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:35:26.60 ID:QicJR8ZP.net]
ValueTupleって最初はワクワクしたけど使い所あんましないな
どういう時に使うんだこれ

874 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:36:36.36 ID:qt9qpnGQ.net]
うわあ

875 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:43:55.01 ID:iCdjVYwG.net]
>>836
out 使って値を返しているやつを素直に書けるだろ

876 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:49:59.89 ID:3WGNKYp+.net]
>>832
まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。

言いたいことはわかるけどなw

877 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:50:24.08 ID:iCdjVYwG.net]
>>835
C#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換
更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな
せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・

878 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:57:05.83 ID:iCdjVYwG.net]
>>839
SIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ
で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を
複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす

まあ、それをどうやって実現しているのかさっぱり分からんけどな

879 名前: mailto:sage [2017/04/15(土) 10:57:43.50 ID:4VXj2s/u.net]
>>840
どこが効率悪いかはわからんか?
あー、アンボクシングかかっとるわ、とか、
これのせいでストールしよるな、とか。



880 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:00:42.88 ID:iCdjVYwG.net]
>>842
デバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です
最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと

881 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:34:57.52 ID:QicJR8ZP.net]
>>838
outはそもそも使わないし
TryXxx系はValueTupleよりout varの方がスマート

882 名前: mailto:sage [2017/04/15(土) 11:39:27.67 ID:4VXj2s/u.net]
>>843
コーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。
コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。
たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。

883 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:39:28.67 ID:UPL5S+RA.net]
そうそう

pythonでやってたことをc#でもできるようになったものって
実際使ってみてもいまいちなんだよな
めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない

884 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:44:51.81 ID:eeh5f4V4.net]
>>832
ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ
多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。
そろそろ死んでください。

885 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:49:23.70 ID:iCdjVYwG.net]
今回の拡張の中で
ref var a = hoge

886 名前:();
と言う、参照戻り値ってのの使い方が難しいわ
[]
[ここ壊れてます]

887 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:51:55.21 ID:iCdjVYwG.net]
>>847
>、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
コレはPen2とかK6辺りから始まりました
20年前の技術ですね

888 名前:デフォルトの名無しさん [2017/04/15(土) 11:52:06.28 ID:mE+AhP/n.net]
初心者です

C#はメモリ管理を気にしなくて良いと聞きました
本当でしょうか?

889 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:54:00.80 ID:eeh5f4V4.net]
たしかCore2以降は、VILW命令に変換していたと思った。
命令ストリームからVILW命令6スロット分に変換して
6命令ずつ同時実行する事で低クロックでも高速に動作とか。
x86系以外では、スーパースカラの採用も多いみたいだね。



890 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:55:39.30 ID:P11oDSMM.net]
本当だよ
2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ

891 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 12:00:32.47 ID:3WGNKYp+.net]
>>847
俺、死ぬんか?

892 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:12:21.09 ID:7hkWD0i5.net]
>>850
メモリ解放なんかは自動ってことになってるけど
メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による

893 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:18:16.99 ID:GC6K0tB8.net]
>>823
これ、まともに回答しようと思うとひどく大変なんだが……
823がGCの内部実装を把握しているうえでの指摘にも見えるし、
初心者の思いつきの質問にも見えるし……

初心者向け:
ヒープ確保したら0にクリアされてる
メモリを回収後、再利用されるまでに0クリアする必要があるってこと

把握してる人向け:
メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、
.NET Core のソースで確認しようと思ったけど
gc.cpp だけでも1.2MBあって挫折した

>>850
初心者のうちは気にしなくていいよ

894 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:43:04.38 ID:5VFPMUgC.net]
>>846
C#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ
可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい
そうすればC#7の仕様の意図するところは簡単に理解できる

895 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:29:19.96 ID:56TRC7nM.net]
みんな詳しすぎ
頭いいんだな

896 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:40:07.25 ID:3WGNKYp+.net]
>>842
>>843
思ったけど、あのVTuneってそんな機能あるんかな?

897 名前:デフォルトの名無しさん [2017/04/15(土) 15:19:31.88 ID:A0YDVHHt.net]
昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
シートやらブックやら解放してから最後にExcel本体解放してってやってたけど
今は一発で解放できるんだよね?
メモリ管理とか気にしないけど、こういうのは気になる。

898 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:29:43.17 ID:8JN0d/j3.net]
所謂アンマネージリソースを閉じてないとC#であってもゾンビ化することはたまにある

899 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:39:12.33 ID:eeh5f4V4.net]
>>859
Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。
残ってしまう事を前提に組むしかない



900 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:41:12.30 ID:aGMB9daN.net]
>>861
しても残る時は残る、はし足りないだけでは。

901 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:43:39.01 ID:eeh5f4V4.net]
>>857
自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。
もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。
それ以外の人は普通だよ。

902 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:58:16.95 ID:3WGNKYp+.net]
ちなみに俺は違うからな

903 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:02:07.82 ID:eeh5f4V4.net]
自分が得意じゃないと思う領域は黙っておけ、そして誰か

904 名前:詳しい人がレスするまで
その質問を流すなキチガイ
あと、自分の得意な領域に引き込もうと変な流れに作り替えるな。
掲示板が機能しなくなる
どうせなら死ね

とまあそんな所ですな
[]
[ここ壊れてます]

905 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:06:10.39 ID:OxStzCoo.net]
>>863
気づいてないみたいだけど、悪いけど君の態度も相当エキセントリックに見えるよww

少なくとも>>832は文脈的に妥当な反論をしているようにしか見えんけど、
「俺にたてつく奴はいつものキチガイ(って誰だよw)だ!!」って感じでかなり普通じゃない。

余計なお世話だろうけど、いい歳こいてるんだろうからもうちょっと自分を客観的かつ批判的に
見ることを覚えた方がいいんじゃないんだろうか。

906 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:07:40.04 ID:lvAT8XK9.net]
>>859
> 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
> 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
ちゃんと ReleaseComObject(comObject) 呼んでないだけだろ
なんで IDisposable にして Dispose で解放するようにしなかったのか謎

907 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:09:12.98 ID:eeh5f4V4.net]
駄目だな、このキチガイ・・・
はよ死ね

908 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:13:19.25 ID:C33P0hB8.net]
デストラクタの動作タイミングが制御できない時点で逆にいろいろ管理できなくなってトラブルの元になってる。

結局のところ欠陥言語なのだ。

909 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:16:13.49 ID:OxStzCoo.net]
>>867
根拠があるのかと言われれば正直ないけど、ぶっちゃけ全部のオブジェクトを
いちいちReleaseComObject呼ぶなんてやってられないし、やらなくてもそれで
「ゾンビ」が残ることはないようだから、必要ないんじゃないのかな。

そんなことよりプロパティが返すオブジェクトをメソッドチェーン的に使わない(面倒でもいちいち変数に
入れてから使う)とか、その手の基本が大事だね



910 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:18:04.02 ID:eeh5f4V4.net]
Excelのケースは多分デストラクタというより、Excelのスレッドモデルに問題があるんだと思う。
lock方式でもInvoke方式でもない、少々行き当たりばったりな排他制御をしてるようだ。
古いアプリなので今更改められないのだろうね。

911 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:31:33.32 ID:OxStzCoo.net]
エンゼルハートって映画あったな

探偵がロバートデニーロに殺人鬼を探すように依頼されるが、探していた
殺人鬼は探偵自身だったってオチ

「いつものキチガイ」も実は言ってる本人自(w

912 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:19.87 ID:3WGNKYp+.net]
はいはい、俺が悪かったってことで仲直り。
今後はこのスレ貢献に頑張ろう…でいいやん。



913 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:31.45 ID:nXYdKgHp.net]
ExcelCreatorが楽すぎて戻れない

914 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:36:28.32 ID:eeh5f4V4.net]
>>873
普通なら、それでOKなんだけどね
この人2000年頃にやってきて、際限なく荒らしまくって誰もいない状態にしやがったから。
たまーに戻って死んだかなとか見ているんだが、ご健在のようです。(はよ死ね

915 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:57:08.88 ID:aGMB9daN.net]
>>870
そんな基本は聞いたことが無いのだけど、
プロパティが返すオブジェクトをメソッドチェーン的に使うと、どういう問題があるの。

916 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:07:01.27 ID:mW9XRjOW.net]
Disposeされないオブジェクトが量産されてリソースリークするに決まってんだろ
一つプロパティにアクセスしたら結果を変数に入れて礼儀正しくDisposeする
これをすべてのメソッド呼び出しとプロパティ・インデクサーアクセスについて行う

917 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:09:24.07 ID:nXYdKgHp.net]
>>877
おもしろい冗談だな

918 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:16:22.23 ID:UPL5S+RA.net]
return a,b;で返したのを

こんな感じで受け取れれば楽なんだけどな
a,b=method(c);

919 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:31:49.05 ID:OxStzCoo.net]
>>876
ゾンビ

なんだかVBerチックなおまじないのように聞こえるけど



920 名前:そうじゃない。
もっとも、どうしてそうする必要があるのか、詳しい理屈は忘れちゃったけどw
明示的に変数で参照されてないCOMオブジェクトは相互運用アセンブリが適切に破棄できないとかなんとか

まあ、変数に入れなきゃReleaseComObjectを呼ぶこともできないよね
[]
[ここ壊れてます]

921 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:33:16.72 ID:7hkWD0i5.net]
excelはC++から使ってもゾンビるよ

922 名前:デフォルトの名無しさん [2017/04/15(土) 17:38:17.93 ID:A0YDVHHt.net]
>>867
昔の話だよ。

923 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:41:04.42 ID:aGMB9daN.net]
>>880
結局ReleaseComObjectは必要なのね。

924 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:47:17.96 ID:jssTx07C.net]
>>859
昔のプログラムメンテする必要が有って、丁度それに出くわして同じ方法で対応したわ
結局そのロジック切り捨ててOpenXMLで読み書きしちゃったけど

925 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:54:59.95 ID:OxStzCoo.net]
>>883
いやいらんと思うよ
https://web-beta.archive.org/web/20080306103320/jeanne.wankuma.com/tips/programing/releasecom.html
↑によるとReleaseComObjectは「保険」らしい

オブジェクトをちゃんと変数につっこんでから使えは一応ソースあった。
「仕様」の一言で、どうしてそうしなきゃらなんのかの理屈は書いてないが
https://support.microsoft.com/ja-jp/help/317109/office-application-does-not-quit-after-automation-from-visual-studio-.net-client

926 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:00:32.55 ID:OxStzCoo.net]
まあVB6みたいに参照カウント見てラッパーオブジェクトの破棄をやってるからってことなのかな
こま切れのレスで申し訳ない

927 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:14:19.64 ID:eeh5f4V4.net]
>>885
>ガベージ コレクションを実行して解放することができますが、こちらはあくまでも保険です
読んでみた限り、GCが保険でReleaseComObjectでやれという事に読めますね。

マイクロソフト公式も保証されるわけではないという感じですね。
実際、これはやってみたが上手くいかないケースはちょくちょく発生します。
次善策以上の対策は取れないと思われます。以前サポートに質問した時もそんな感じの回答でした。

928 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:33:54.48 ID:OxStzCoo.net]
>>887
あー確かにその通りだねw
適当なこと言ってごめん

929 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:36:26.65 ID:tyUWSBTM.net]
>>879
タプルに括弧が必要なのはやむを得ないかな。変数宣言の文法変えるわけにもいかないし。



930 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:56:40.40 ID:lvAT8XK9.net]
>>881
ちゃんと作ればゾンビったりしないよ
デストラクタで確実に解放できるからその点だけで言えば C# よりむしろ楽

>>885
> ↑によるとReleaseComObjectは「保険」らしい
それ、それページ書いた人がちゃんと理解してないだけ
そもそもGCはCOMなんて意識してないからCOMの解放なんてしないし
詳しくはここら辺を見て
https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/09/office-5/

931 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 23:54:44.22 ID:X3IC3wwW.net]
ググってもよくわからんのだけど
GetType()+typeof()で型判定と
isでやるのはどっちが速い?

932 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 00:20:09.43 ID:SqhlDt4o.net]
>>891
一時変数に入れたりしないで単純な GetType == typeof の形に限り前者
JITレベルで最適化がかかるみたい

933 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 01:16:43.35 ID:dwmihMuF.net]
>>855
GCのソースを見る気はしないけど0クリアはやってないと思う。
どう考えても時間の無駄。
変数を使用するタイミングで初期化が行われて、ものによってゼロクリアが行われるってだけじゃないんかね。
だから大量な領域をゼロクリアすることはそうそうないと思ってるんだけど。
例えばintの長い配列を確保したときとかくらい。

934 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 02:15:50.20 ID:UDjczAnn.net]
>>893
ヒープのオブジェクトは new した時点で内容が0クリアされてることは仕様

935 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 06:55:53.07 ID:dwmihMuF.net]
>>894
それはメモリ確保後に初期値で初期化されたってことででしょ。どっちにしろGCで大量にゼロクリアが必要にはならないよね。

936 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:00:22.29 ID:uS8rD07o.net]
どーせ、一番下でVirtualAlloc走ってんでしょ。そこで0クリアなんじゃね?

937 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:43:50.68 ID:dr2cdwts.net]
0クリアをどのタイミングでしているかは知らないが
早めの0クリアがセキュリティーに貢献するであろう事は予想できる。
今そうでなくても、そのうちに使用しなくなったタイミングで可能なら0クリアという形になったとしても驚かない。

938 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:49:20.74 ID:dr2cdwts.net]
ちなみに自分はガベコレが効率よく機能してくれるよう、使用しなくなったら0クリアはしている。
巨大なツリー構造を作って大量のヒープを使い始めると、参照を移動するだけでも結構なCPU時間を取られるようなので。

939 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:00:30.49 ID:nOhMz2bP.net]
破棄されるメモリへの(読まれない)書き込みを省略する最適化を行うコンパイラもあるし、
一律0クリアって方向にはならないだろうねぇ。
セキュリティ確保のためにわざわざ省略されない0クリアなんて機能を用意するくらいだし。



940 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:02:08.11 ID:H6tmXYoH.net]
0クリアとnull代入は別物だぞ

941 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 10:39:40.78 ID:yhNZe4vR.net]
>>897
> 0クリアをどのタイミングでしているかは知らないが

何のためにデバッガがついてると思ってんだ。

942 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:27:43.64 ID:UDjczAnn.net]
>>896
あー、それそれ
.NET Core の gc フォルダ内のコードに VirtualAlloc の RESET_MEM で
ゼロクリアしてる箇所がいくつかあった

たぶん、コンパクションした後に残ったゴミ領域を VirtualAlloc で
ゼロクリアしてると思うんだが、そこは探しきれなかった

>>895
初期値(0)で初期化されたってのはゼロクリアなんだが……
ttp://ufcpp.net/study/csharp/rm_default.html

お前の言う初期値は別のことを指してるのか?

> どっちにしろGCで大量にゼロクリアが必要にはならないよね。
メモリ確保時のゼロクリアってのはヒープ管理の行うこと
ヒープ管理はGCとは切り離せないの
だから .NET Core のゼロクリアのコードだって gc フォルダ内に配置されてるんだし

943 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:44:56.24 ID:EJt90aDw.net]
>>902
横からごめん。無知なので教えて。

・GC って概要として不要になったメモリを解放する機能って理解はあってる?
・メモリ確保時に初期化が実行されるとの理解はあってる?
・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある?
 ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと

自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。

944 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:08:09.86 ID:uS8rD07o.net]
>>903
君は正しい

945 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:11:25.63 ID:SqhlDt4o.net]
>>903
CLRの構造としては、GCはメモリ管理一般を担うコンポーネントである
だからメモリ確保も初期化するのもGC
GCってメモリの使用状況に応じてオブジェクトを動的に再配置したりとか色々裏で頑張ってるから、
単純に 確保/解放 と割り切れるもんじゃないんだよ

946 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:21:18.23 ID:qeC+G70E.net]
>>891
前者でもいいけどtypeof(シールクラス)にしないとダメだよ

947 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 13:21:57.61 ID:UDjczAnn.net]
>>903
>・GC って概要として不要になったメモリを解放する機能って理解はあってる?
はい

>・メモリ確保時に初期化が実行されるとの理解はあってる?
正確ではない
ヒープからオブジェクトを確保したら初期化されていることが決まっているだけで、
初期化

948 名前:フタイミングは決まってない
既に初期化済みの領域から割り当ててるはず

>・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある?
> ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと
誤りはない
ただし片方だけではメモリのシステムとして機能しない

>自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
.NET の実装によるので
「GCで大量にゼロクリアが必要にはならない」 は誤り
.NET Core の実装ではページングの機構を使って大量にゼロクリアしてる(と思う)

オレオレCLR実装でGC時ではなく、オブジェクト確保時にゼロクリアする実装というのはあり得る
[]
[ここ壊れてます]

949 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 14:12:52.31 ID:0ImhO/qF.net]
>>903
> GC と言う言葉の定義に初期化が含まれるかと言うこと
含まれていないけど、実質同じ。

GCってプログラマの負担を減らす為の物なのに、
いちいちゼロ初期化必要だとコンセプトとしておかしいでしょ。
まともなGCならゼロクリアされている。CLRもそう。

仕様としては、
△ > ・メモリ確保時に初期化が実行されるとの理解はあってる?
○ ・メモリ確保時には初期化済み
であって、どのタイミングで初期化するかはGCの実装による。
同じ事はOSでも行われていて、以下ページのZeroed参照。
nyaruru.hatenablog.com/entry/20080430/p2



950 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 15:02:23.81 ID:79m5iU1q.net]
なんかすごい重箱モードの議論だねw
いや批判はしてないですよ別に

951 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:44:26.20 ID:dr2cdwts.net]
粘着質な人が居ると困りますねw

952 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:59:23.11 ID:I10lJTDS.net]
>>892,906
そうかTHX.
isの方がなんとなく速そうだと思ってたが案外そうでもないんだな

953 名前:903 mailto:sage [2017/04/16(日) 20:38:49.89 ID:EJt90aDw.net]
>>904,905,907,908
教えてくれて、ありがとう。
自分も MSDN の文章を読んだりしてみました。
斜め読みだから読み落としてる可能性も高くそうしたらごめんなさい。

[一般的定義]
・GC は概要として不要になったメモリを解放する機能のこと
・一般的な挙動として、メモリ確保と GC は別物

[CLRの仕様]
・メモリの確保も解放も GC の機能の内
・確保されたメモリは初期化されている

[CLRの実装]
・GC 時にメモリを初期化してるっぽい


ふつう、挙動を考える際には仕様を元にすると思うから
「GC時(正確にはメモリの解放時)にはメモリの 0 クリアは期待しない/できない」と理解してよさそうな気がする。
>>895 の「GCで大量にゼロクリアが必要にはならない」が「GC時に 0 クリアしている訳ではない」との意味であれば
仕様としては正しいことから一般論としても正しい。
ただ、実際にはやってくれているけど、それは仕様に基づいているわけではないからいつ改変されるか分からないアテには出来ないもの、と理解しました。
自分もよくやるんですけどね。仕様にはないけど自分が考える安全のための後始末とか。

954 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:52:22.64 ID:3ec5aaGF.net]
勝手に0クリアしてもいいけどGCはそれがわからないから
またGCが0クリアするよ
つまり二度手間

高速化なんてのたまてってるけど馬鹿ばっか

955 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:53:23.50 ID:3ec5aaGF.net]
無能の馬鹿の議論は飽きたわ
どこか別でやってくれよ
個人のブログとか

956 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:55:58.52 ID:dr2cdwts.net]
正直議論に見えない、自演に見えてきた。

957 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:04:46.71 ID:wSkKKBMW.net]
>>912
もともとのガベコレの意味はざっくり言えば「確保/解放によって断片化したメモリのデフラグ」
だったはず

知らんけど

958 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:22:51.36 ID:0ImhO/qF.net]
>>912
GCは「アイドル時にやれ」というのは分かるよな?
実際はとりあえずこれを目指しているはず。

メモリ確保時にゼロ初期化するのはユーザ時間に直接影響する。
(メモリ確保のレイテンシが著しく増大する)
GC時に初期化するのはGC時間が長くなる。
CLRの場合は確かGC時にはユーザスレッドを凍結していたはずだから、
これもユーザに見えることになる。

だから、普通に考えて、
一旦GCした後、(ユーザスレッドと並行可能な)別スレッドでゼロ初期化だよ。

959 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 23:10:52.0 ]
[ここ壊れてます]



960 名前:0 ID:rt4ZW9V3.net mailto: 基本型の配列は0クリアされるのは仕様で決まっとる
どこのどいつが実際にやろうが関係ないだろ
[]
[ここ壊れてます]

961 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:40:45.89 ID:3B2OvgTj.net]
でも初期化するクセは付けた方がいいぞ
プログラマとして
そういう意味でゼロクリアされている事がわかっていても
明示的にやっておくのも間違いじゃない

962 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:53:33.58 ID:DRWzf9HM.net]
いいぞ

誰に向かって威張ってるのかね
そんな威張っていうような話か?w

963 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:59:35.59 ID:FPOa41qy.net]
一週間も馬鹿な話続けてる奴にそんな嫌み通じるかよ
お前も馬鹿か

964 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:28:28.26 ID:0+0M+jw7.net]
じゃぁ配列は、こう初期化すんの?

byte[] buff = (byte[])Enumerable.Empty<byte>();

965 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:37:56.61 ID:sNToWnIL.net]
自分のブログでヤレ

966 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:40:07.22 ID:sNToWnIL.net]
わかってないようだから書くけど

こいつがまず重度の馬鹿
>>919

967 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:18:50.28 ID:pEHnUlca.net]
924 はキチガイの類

968 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:22:01.64 ID:pEHnUlca.net]
これがキチガイの末路w
これこそが本物だ
www.int2.info/news1.htm

969 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:38:40.81 ID:YebzKHR/.net]
ここまで基地外だけ



970 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 00:27:01.11 ID:0Yq9p2Hl.net]
>>926
Microsoft相手に訴訟すると
こういう目に会うのか

971 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 00:36:27.92 ID:gic2i7xr.net]
んな訳ねぇだろ、てかお前本人だなw
そんな予感はしてたんだ、文体似てるし60代臭していたし
Delphi板荒らしていたヤツとよく似てたし、お前Delphiやってたし
もうじき親の財産次るんだろ?もう終わりだろ、はよ死ね

972 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 01:34:33.30 ID:4m6dsFPX.net]
client sideのvalidationがめんどくさすぎるのだけどVMからvalidator.jsを生成するサービスないのか?

973 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 06:15:21.44 ID:dwhcaFAX.net]
それは頭悪いだろ
サーバーサイドでやってるバリデーションと同じことがしたいならAPI作ってajaxが筋

974 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 06:39:33.82 ID:RUjuZHo6.net]
そのAPIとそれを使ったクライアントコードの生成サービスないかってことでしょ

975 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 07:40:17.90 ID:4m6dsFPX.net]
>>931
不要な通信を避けるためにclient side validationするわけでしょ
そのために通信をしてたら意味ないじゃん

976 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 07:51:25.03 ID:Su4pCCia.net]
あるわけねえだろ夢見んな

977 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 18:30:31.09 ID:dwhcaFAX.net]
>>933
client side validationの目的は一般的には通信を避けることではなくフィードバックの即時化によるUXの改善でしょ
よほどレイテンシの大きい糞NWを想定してるとか、サーバーに頻繁にリクエストが来るのがキャパシティ的に許容できないとかでない限りは
ajaxによるバリデーションは十分有効

978 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 18:34:28.24 ID:b4tf0yLR.net]
クライアントにidとパスハッシュのリスト送信しておけばおk

979 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 19:24:13.68 ID:T0vdTXyx.net]
>>935
なるほど
でもその説明じゃうちのロートル達が納得しないよ
もっと素人が喜びそうな説明はできないの?



980 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 19:34:36.94 ID:qpdySibv.net]
死ね

981 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 14:46:51.02 ID:ofUg/eB0.net]
EntityFramework で System.Data.SQLite 使ってるんだけど、
SaveChanges() が遅すぎるので、
CQRS( ttps://msdn.microsoft.com/magazine/

982 名前:mt788619 )をやってみようと思った

クエリ用にデータベースファースト、コマンド用にコードファーストで
DbContext を作ってみたんだけど、モデルファーストの DbContext を new すると
コマンド用の POCO と競合して曖昧と言われる

まだ試してないけど解決方法がなんか汚い
ttp://entityframework.codeplex.com/workitem/483

クエリ用、コマンド用ともにコードファーストにするのが普通なんだろうか?
SQLite はマイグレーションサポートしてないようなのでコードファーストはメジャーじゃない?
[]
[ここ壊れてます]

983 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 18:34:56.61 ID:9NLTwIyk.net]
>>939
DBからコードファーストじゃだめなん?

984 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 19:09:00.01 ID:ofUg/eB0.net]
>>940
そうね
データベース(モデル)ファーストにしてるのは、
ER図を見るために使ってるだけだからそれでもいいかぁ

クエリ用(Read)とコマンド用(Write)双方ともDBからコードファーストで作って
DB変更時には再度作り直す方法でやってみるかなー
(どこらへんがコードファースト? って使い方になっちゃうなw)

985 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 00:34:55.91 ID:IVDQeFzJ.net]
毎回迷うんだけど
VS2017ではどのデータベースを使うべき?
そしてEFはどのバージョンを使うことになって参考になるサイトはどこにあるんだ?

それそろ安定してほしいんだけど

986 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 01:26:41.50 ID:72Ff37pO.net]
>>942
MSDN: Introduction to Entity Framework
ttps://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx

上記ページは、なんか日本語表示にはできるけどインデックスやら、
ページのリンクが英語になってたりして、チグハグ

和書では、EFについて書かれた本がほとんどない
書いてあっても一章分でさらっと流す程度だし、
ネット上の情報だと EF を使うための VisualStudio の操作方法とか、
いくつかの落とし穴の回避方法がパラパラ載ってる程度なので、
英語の MSDN をブラウザの翻訳機能で読んだほうがいいと思う

EF Core (EF7として開発されてたらしい) ではクロスプラットフォームの
ための軽量化で一部の機能を削いでるらしい(モデルファーストとかはできなくなる)
EF6 は EF Core が出てからもしばらくはサポートされるので、
今入門するなら EF6 を使うのがいいと思う
(というか、必要でない限り移行はお勧めされていない)

987 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 06:35:38.36 ID:h0UgT1Ml.net]
EFはWeb系のノリで作られてるから安定することはないよ

988 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 07:48:39.88 ID:XjCRa8hg.net]
業務とデータベースに精通していて
全てを自由に弄れる立場にいて
時間をかけて生成されるデータ構造まで意識した精緻なモデル設計ができて
その案件の寿命までずっと面倒をみれるか同レベルの後継者を育てられる
そんな人がチームにいればモデルファーストは有りじゃないかな
そうでなければ使い捨てアプリぐらいにしか使えないよ

989 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 08:13:05.97 ID:dQDWETdW.net]
>Web系のノリ
どういうこと?



990 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 08:17:36.55 ID:lbMf26rv.net]
>>942
安定って具体的に何のことを言ってんの?とっくに枯れた技術だけど

991 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 09:12:06.55 ID:LWRI+6r2.net]
>>946
ヤマトのりかと

992 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:08:44.37 ID:U4JkC8YI.net]
EFとLinqのせいで生のSQL文が書けなくなっている。

993 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:45:09.91 ID:72Ff37pO.net]
まだサポートが十分でないDBとかあるし、ガンガン開発されてるのに枯れた

994 名前:とか言っちゃうんだ
Web系の人なんだろうなー

ttps://docs.microsoft.com/en-us/ef/efcore-and-ef6/features

EF1 2008/8 バージョン4.0までは ObjectContext を使ったプログラミング、データベースファースト
EF4.0 2010/4 セカンドリリース、POCOサポート、モデルファーストサポート
EF4.1 2011/4 DbContext が導入される、コードファーストサポート、NuGet配布
EF4.3.1 2012/2 マイグレーションのサポート
EF5.0 2012/8 .NET4.5 が対象、enum
EF6.0 2013/10 オープンソース化、async対応、細かな改善多数
EF6.1 2014/3 DBからコードファーストするウィザード
EF6.1.3 2015/3 EF6系の最新(EF6.2 が出る?)
EF Core 1.0(EF7) 2016/6 コードベースが新たになる、ObjectContext 非推奨
EF Core 1.1
EF Core 2.0 2017/Q3予定 準備中

GitHub のフォルダ構成見て初めて気づいたんだけど、
EF ってASP.NET の1モジュール扱いなんだな
964 の言ってるWeb系のノリ、納得
[]
[ここ壊れてます]

995 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:56:05.07 ID:8CN2PrPc.net]
開発されてないのが枯れてるのか。そりゃ確かに枯れてるなww

996 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 12:40:19.25 ID:dpyapAzz.net]
>>946
あくまでもイメージだが品質とか安定性より開発速度とかリリースを優先するって感じ

>>947
腐ったまま枯れてるってことはいくらでもあるし

997 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 17:42:09.62 ID:MpBIOwvX.net]
そういえば前から疑問なんだけど、フォームのイベント伝搬ってどう組むべきなんだ?

状況としてはよくある波形ビューワーで、表示先頭位置と倍率が変えられて、
カーソルが2つあって、フィットボタンを押すと画面にフィットするもの。
(カーソル0が画面の左端、カーソル1が画面の右端になるように、
自動的に表示先頭位置と倍率が調整され、再描画される)

(A) 表示先頭位置の変更→画面再描画
(B) 倍率の変更→画面再描画

とした場合、
フィットボタンを押す→
 表示先頭位置と倍率が自動的に変更される=普通は上記(A)または(B)に当たる
 →自動的に再描画される
となるのだが、ほとんどのケースで2回描画されてしまう。
そこで今は、倍率変更側はフォーカスを確認して

(B') 倍率の変更→(フォーカスがある時のみ)→画面再描画

として1回描画にしているが、
これだとフィットボタンを押したとき、結果的に倍率のみの変更の場合は再描画されない
(同じ値を上書きしてもChangedが発火しない)ので、フィットボタンのイベントの最後に
if (!changed_start_pos) redraw();
を付けている。
ただしこれはリファクタ時に久々に見たら「はて?」と思ってしまった。
この場合って、どう組むべきなんだ?

ちなみにJavaScriptの場合は、プログラムによる変更の場合はイベントが発火しないので、
全てのイベントの最後に redraw(); が必要になるが、全部書けば全く問題ない。
フォームの場合はプログラムによる変更でもイベントが発火するので、この問題が起きる。
ただ、特にレアケースでもないし、一般的なうまいやり方があるとは思うのだけど。
上手く繋げられれば記述が少なくて済むからこの仕様なんだろうし。

998 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 17:42:43.14 ID:MpBIOwvX.net]
なお、今のコードのイメージは以下。(CLIだけど)

void numericUpDown_fitButton_Clicked(Object^ sender, EventArgs^ e) { // フィットボタンクリック
// 倍率と表示先頭位置の再計算
numericUpDown_magnitude->Value = XXXX;
numericUpDown_startPos->Value = YYYY;
if (!changed_start_pos) redraw();
}
void numericUpDown_magnitude_ValueChanged(Object^ sender, EventArgs^ e){ // 倍率変更
// スクロールバー等の増減量等、他機能の整備もここでやっている
if (((NumericUpDown^)sender)->Focused) redraw();
}
void numericUpDown_startPos_ValueChanged(Object^ sender, EventArgs^ e){ // 表示先頭位置変更
redraw();
}

void redraw(); // 再描画

ぱっと思いつくのは全部 Focused を確認して redraw() だが、
それだとこの仕様(=フォームのイベントはプログラムによっても発火する)にした意味無いよね?
(その場合は明らかにJavaScriptの仕様の方がマシって事になってしまう)
多分何らかの上手いやり方があると思うのだが。
色々奇妙なのは後付でごちゃごちゃやっているから勘弁で。
今までは問題なく動作していたから放置していたが、ついでなのでリファクタしようとしている。

999 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:12:04.32 ID:FFGpioc0.net]
>>953-954
そもそもコントロールのイベントで再描画ってのはちょっとw

表示先頭位置とか表示倍率とかの値はFormなりUseControlなり
独立したクラスなりのプロパティになってるはずで、それらのプロパティの変更痔に
再描画されるようにしないと

無駄な再描画を避ける方法だけど、一番いいのは余程重いのでなければ
気にしないことだと思うw

どうしてもこだわるなら、直接再描画するんじゃなくて
タイマーのイベントに再描画を紐づけしてタイマーをスタートさせるだけにするか、
Application.Idleイベントをうまく使うかするとか



1000 名前: mailto:sage [2017/04/21(金) 18:18:11.06 ID:KFYgHFHL.net]
>>953
リドローが必要だとキューイングするかと。
どうせインプットのリフレッシュレートやら画面のリフレッシュレート越えてリフレッシュしても無駄なんだし、リフレッシュ時には再描画するんだし。
WindowsならWM_PAINTでやるとかが歴史的にいわゆる普通の方法では?

1001 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:23:10.98 ID:YZVNImgq.net]
>>950
EntityFrameworkとEntityFramework Coreを同一視してるおバカさん

1002 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:35:37.53 ID:RSu3z+zM.net]
フォームのように、SuspendLayout, ResumeLayoutみたいな設計もあるけどね

1003 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:51:51.53 ID:xzjZrHPt.net]
イベント毎にRedraw要求を行うのではなく、
イベント毎にRedrawイベントをどこかのキューにぶち込んで、タイマーや別スレッドで監視し、
描画時に複数のRedrawイベントがあれば最新の物を一度で済ませるようにすればいい。

1004 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:55:13.11 ID:MpBIOwvX.net]
>>955
別クラスのプロパティに分離しても本質的には同じだよね?
複数のプロパティが、
・どれかは変更される
・全てが変更されるとは限らない
・必ず変更される物があるわけではない
状況においては、内部的にOR取ることが必要で、一番単純なのはキューで上書きしてしまう方法。
つまりそちらのようにタイマーに要求を出して、
timer->start()は何度打っても同じだからそこでOR取ってしまうとか。
しかしこれだと余分にこの構造が必要なんだよね。
(ただし他の部分ではこの方法も使っている)

UIから変更された場合、60fpsとかにするくらいなら直接イベントで描画してもほぼ同じでしょ。
波形はwaveファイルで数百メガとかの場合もあり、このときは明らかにもたつくので2度描画はNG。

あるいは、独立クラスにフラグを持ってそこで上書き、
独立クラスのeventをサブスクライブしろ、ということ?
それは理想的な構造なのだろうけど、話が膨らみすぎて面倒だ。

Application.Idleは初耳だが素晴らしい。(JavaScriptではアイドルが取れない)
これってUIスレッドが、ってことで良いのか?
(ただしこれは今回は使えそうにはないが)

>>956
WM_PAINT見たがよく分からん。
システム側が再描画タイミング(おそらく60fps)を通知してくれるので、
それをサブスクライブして、そこで溜まっている

1005 名前:再描画を掃くのか?
それはゲームみたいに常に再描画する用で、
今回みたいにUIで変更された時のみの場合は常にイベントが呼ばれる分ウザくなる気が。
あるいは、自分で何かを再描画した時だけ、
システム側で60fps同期でWM_PAINTを打ってくるのなら、今回には使えない。
[]
[ここ壊れてます]

1006 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:57:50.94 ID:MpBIOwvX.net]
>>959
サンクス。まあみんな意見は同じか。

他に何か、「プログラムによる変更であってもイベントが発火する」という、
フォームの仕様を上手く使った方法はないかねえ?

1007 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:08:46.15 ID:xzjZrHPt.net]
>>961
>>958みたいな感じじゃないか。
WindowsのListViewとかも、大量のデータ挿入を想定してBeginUpdate/EndUpdateと言った手段を用意しているし、一般的な手法かと。

1008 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:19:20.39 ID:72Ff37pO.net]
>>957
違いを比較しているURL貼ってるのにレスを読みもしないで小馬鹿にする馬鹿

>>953
瑣末なことで悪いんだけど、どうしても気持ちがざわつくので指摘する
「リファクタする」は日本語としてあまり使われていない
refactor の訳としては「リファクタリングする」が使われている印象

どう間違っているのかはうまく説明できん
refactoring は造語で、それを元に refactor という動詞が造語として作られている
一般的な動詞ではないので注意

1009 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:50:01.08 ID:MpBIOwvX.net]
>>962
BeginUpdate/EndUpdateはいいとして、
SuspendLayout, ResumeLayoutは反応しなくないか?
(というか>>958は俺宛ではなくEFの件なのか?と思っていた)

俺の理解ではSuspendLayoutはレイアウト時、つまり、Control.AddRangeを止めるもので、
Graphics.DrawLinesとかを止めるものではないと思っているのだが。

>>963
了解。



1010 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:56:01.47 ID:FFGpioc0.net]
>>960
コントロールのイベント使うな、っていうのは無駄な再描画対策じゃなくて設計論ね
そういう設計だと、例えばプログラムで倍率を変更しても再描画されないよね。
まあ余計なお世話だよねw

Application.Idleは例えばこうやって使う

bool DrawOnIdle {get; set;}

void Application_Idle(object sender, EventArgs e}
{
  if (DrawOnIdle) redraw();
  DrawOnIdle = false;
}

1011 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:10:34.38 ID:Cei54Lla.net]
VS2017でどのデータベースとEFを使うべきか質問したものです
レスありがとう

完全に浦島太郎状態でした
こんなことになってるとは思っても見ませんでした
.net.core の方の知識もなくてググってみたらマニュフェストらしき設定ファイルが
xmlからjsonになってるんですね...

1012 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:16:45.24 ID:TbfEGS8v.net]
MSに関わると2,3年であっという間に浦島になるからな

1013 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:28:06.75 ID:MpBIOwvX.net]
>>965
ちょっと話が噛み合って無い感があるから整理すると、

JavaScript:
プログラムからの変更ではイベントが発火しないから、
全てのイベントハンドラは redraw(); で締めないといけないが、
イベントハンドラ内で他コントロールをどれだけ触ろうと何も考える必要なし。

.NET:
プログラムからの変更でもイベントが発火するから、
関連しているコントロールのイベント先をすべて redraw() にしておけば再描画される。
だから単純な再描画についてはこっちの方が記述はすっきりする。
ただし、今回のように複数コントロールを触るイベントハンドラがあった場合、
その回数だけ再描画される可能性がでてくるからそこを対策しようとすると、途端に汚くなる。
(JavaScriptのコードは redraw(); を書くしかないし、再描画だとはっきり分かるが、
.NET のコードは俺が今やっている妙な対策法だと???なコードになる)

再描画されればいいのなら、.NETの方が良いけど、
2度描画禁止とかにしたい場合、.NETの方が記述が余計に必要になる。←これって俺の勘違いか?
というのが今回の疑問。

> そういう設計だと、例えばプログラムで倍率を変更しても再描画されないよね。
違う。プログラムから各

1014 名前:コントロールのValueを変更することによって、自動的に再描画させてる。
というか、波形表示画面内容と表示開始位置と倍率は当然同期してないといけなくて、
逆に、表示開始位置と倍率が変わらないのなら再描画の必要がない。
それはコントロールの値を変更する構造によって自動的に達成される。
(.NETは同じValueを上書きしてもイベントが発火しない為)
だからFitボタン連打とかの場合の無駄な再描画はここで止められる。
多分.NETの仕様だとこういう事だと思うんだよ。(これがMVC的に云々というのはまた別の話)
それで、2度描画禁止の場合はどう実装するべきだという想定なのだろう?という疑問なんだ。
普通はキューイングするから問題ない、ってことなのかな?
(なお、明示的に再描画したい場合は redraw() を呼ぶだけだから問題ない)
[]
[ここ壊れてます]

1015 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:42:28.79 ID:MpBIOwvX.net]
ちなみにMVCの場合はモデルがイベントソースで、
コントロールの値を変更→モデルの値を変更→再描画
という流れになるけど、モデルの値をプログラムから変更する場合、
コントロールの値の表示を手動で合わせてやる必要がでてくる。
これが面倒だから、WPFではバインディングってことで自動化してる。

これはこれで良いとして、
.NET作った時に今回のようなケースが想定されていないはずもなく、
彼等の想定実装があるはずで、
その通り実装すれば綺麗に実装出来るはずなんだが、というのが俺の疑問。

1016 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:43:34.30 ID:FFGpioc0.net]
>>968
勘違いではないよね。
その認識であってると思う。

コントロールのプロパティを値の入れ物として利用するのは普通はよくない作法だと思う。
コントロールはあくまでUI(表示と入力)に徹するべきで、
表示先頭位置とか表示倍率とかの値はFormなりUseControlなり
独立したクラスなりのプロパティにするべきだというか、普通はすると思う。

で、再描画はコントロールのプロパティが変更されたタイミングではなく、
表示先頭位置なり表示倍率なりのプロパティが変更されたタイミングで行う。

当然、この場合も一度に複数のプロパティが変更されたときに
不要な再描画を回避する方法は考える必要がある

1017 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:04:34.72 ID:rPWpf+kQ.net]
n秒に1回描画フラグを監視する仕組みのが楽だなw
コントロールの挙動全部把握してるやつが触らないとぶっ壊れるって
モノ作ってんだろ?
それって設計悪くない?

1018 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:07:01.51 ID:MpBIOwvX.net]
>>970
> コントロールのプロパティを値の入れ物として利用するのは普通はよくない作法だと思う。
MVC的にはそうだね。ただ、この部分のUIなんて変更はないからどっちでもいいのも事実。
ところでその場合、バインディングはどう実現する?

(C) numericUpDownのValueChanged→モデルの値を変更

これはいい。ただFormの場合、

(D) モデルの値が変更された→イベント発火でnumericUpDownの表示値を変更

とすると、当然(D)の直後に(C)が発火して、
モデルの値を再度「同じ値」で上書きして、そこでイベントが止まる。
これって全くの無駄でしょ。

.NETの仕様を決めた時、これらが想定されていないはずもなく、
彼等なりの上手い使い方があったと思うんだよね。
(今現在それが良いとされる手法かどうかはともかく)

今のところ、表示とモデルの内容を同期するのに一番簡単な方法は、
「numericUpDownのValueをモデルの値として扱うこと」なんだよ。
そしてこれだと他クラスから見えないので、コピーを持ってる。
これは後付でこうなった、というのもある。
実装は、イベントハンドラに何個でも関連づけさせられるからそこでさせてる。

1019 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:13:36.92 ID:MpBIOwvX.net]
>>971
モデルをどこに置くか、という話なんだよ。
Formの仕様だと、numericUpDownのValueプロパティを「モデルの値」として扱えば
すべてすっきり行く仕様になってる。だからそうしてる。
ところが2度描画禁止だとすっきり行かない。だからこれが疑問。
それならJavaScriptみたいに、最初から
「必ず1回redraw()を書かないとダメだけど、1回書けばいいだけです」の方が良かった。
だから、彼等なりの想定実装があったはずで、それを考えてる。



1020 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:15:27.48 ID:rPWpf+kQ.net]
使って問題がある場面のバインディングなんて使わなきゃいーじゃん

マイクロソフトお作法病って損だと思う

1021 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:15:53.73 ID:Re4upQlq.net]
>>963
EntityFrameworkはもう十分枯れてるだろバカ
Coreは確かに発展途上だけどね
元のレスを読まないからこんな的はずれなURLを貼っちゃう

1022 名前: []
[ここ壊れてます]

1023 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:18:21.74 ID:lnct7jOB.net]
イベントがダブりそうなときはイベントを-して値代入後+しなおしているなあ
>>970の2段落目に賛成だな
見なおしたり他に移植するときにそっちの方が分かりやすいし

1024 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:33:34.84 ID:MpBIOwvX.net]
>>974
バインディングといったから分かりにくいが、放置した場合は表示が間違ってるんだよ。
これは完全にアウト。

Fitボタンが押された→
モデルの値が変更された→
再描画された

これで「波形表示」は最新になるけど、
「表示開始位置」と「倍率」の表示されている値が古いままでしょ。
そしてFormのイベントはそれ用になってないんだよ。

>>976
> イベントがダブりそうなときはイベントを-して値代入後+しなおしているなあ
これってかなり面倒でしょ。

今のところタイマで遅らせるのが一番すっきりするからそうしようかと思っている。
(これは他部分で既に実装済みなのを流用出来るというのが大きいが)
redraw()を呼んだら16ms後にredraw_implement()が呼ばれて実際に再描画とか。
ただこんなの.NET作った頃から想定してたのかな?という疑問はある。

1025 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:34:54.35 ID:h0UgT1Ml.net]
>>966
来年にはYAMLになってると思うよ

1026 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:37:01.31 ID:72Ff37pO.net]
>>975
なんだ、枯れてるとか言ってボコボコ叩かれて悔しかった奴か
「Coreは確かに発展途上だけどね」
Core の前になんかつくだろカス

1027 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:49:04.78 ID:rPWpf+kQ.net]
>>977
意味わからん
画面は自分が必要なときにデータを見て勝手に描画するじゃん
フォームはコントロールの操作によってデータを書き換えるじゃん
バインディングなんて使わなきゃ悩む要素皆無だったんでしょ?

1028 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:08:05.95 ID:Re4upQlq.net]
>>979
おや、ようやくCoreを認識できたんだね

1029 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:08:53.85 ID:1MuUAA6h.net]
>>979
自分が叩かれていることに気づいていないのは見苦しい



1030 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:09:14.20 ID:k73pGP5K.net]
>>977
そのへんはレンダリングスレッドがUIスレッドと分かれてるWPFでやろうとしてたと思われ。

1031 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:29:56.50 ID:MpBIOwvX.net]
>>983
え?WFPって描画はUIスレッドじゃなくていいのか?
それはすごくいい。
それだとスピンコントロールのボタン連打で描画が追いつかない時にも、
イベントが溜まることなく最新が常に表示されるね。
何もしなくても。

まあ何だかんだで新しい物は改良されてるってことだね。

1032 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:29:56.87 ID:Cei54Lla.net]
かずきが日本マイクロソフトに入社してる!
本当に浦島状態

1033 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:34:32.90 ID:baDy0zQG.net]
>>985
誰だよ?

1034 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:37:38.47 ID:k73pGP5K.net]
>>984
描画はUIスレッドなのは変わらない。
UIスレッドで同じところにポンポン書き込んでも適当に間引かれる。

1035 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:37:41.43 ID:h0UgT1Ml.net]
>>984
クソ重いから結果的にはWinFormsの方が遥かにレスポンス早いんだけどね

1036 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 23:07:08.58 ID:MpBIOwvX.net]
>>987-988
うーむ、やはりイマイチか。

回答くれた皆さんありがとう。
俺は>>970ではないけど、次スレ俺が立ててもいいけど。(>>1)

1037 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 01:19:50.97 ID:Af8PazvW.net]
>>954
なんか無茶苦茶だな。
クリックイベントの最中に描画処理を実行してるのか?
再描画させたいならInvalidateRectとかでWM_PAINTを発生させてそこでまとめて描画するのが作法だぞ

1038 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 03:39:27.34 ID:BJdj4TZ/.net]
>>990
御説ごもっともだけど、そんな偉そうに言うほどのことでもないよ

1039 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 04:54:36.82 ID:y5zvwDCw.net]
偉そうかどうかは関係なくない?w



1040 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:10:42.01 ID:4+2xx2Ut.net]
>>992
発言の正当性より自己満足度で正当性を確保しているので重要です

1041 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:23:09.19 ID:9wvnPEyC.net]
>>990
InvalidateRect発生させてもRect無視して全画面更新しちゃうよ。ふざけんな!
みたいな話だからな。ちょっと方向性が違うw

1042 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:45:50.45 ID:+hjaOcO8.net]
>>991
2ch初めてか? w

1043 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 08:50:41.11 ID:iVvswOrb.net]
次スレ立ててくる

1044 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 08:52:51.85 ID:iVvswOrb.net]

C#, C♯, C#相談室 Part93
echo.2ch.net/test/read.cgi/tech/1492818720/

1045 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 09:05:33.60 ID:/oxuzvQq.net]
ワッチョイなしで立て直して

1046 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 09:09:40.54 ID:AhKt2WIP.net]
やなこった

1047 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 13:34:52.68 ID:3nsKygnV.net]
1000

1048 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<292KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef