17/03/24 00:14:57.73 gW3AbLz/.net
だからUIスレッドが気になるなら、wpfでMVVMやれば解決でしょうに
663:デフォルトの名無しさん
17/03/24 00:38:36.13 9w5lj4S/.net
UWPで非同期メソッドとかTask使ってるけどすごい不毛。
非同期メソッドの完了を基本的にはawaitで待つから
非同期メソッドを複数回実行するような場合だと
全部同期呼び出しにして全部まとめてTask.Runしたい。
664:デフォルトの名無しさん
17/03/24 00:50:30.06 RtKD05ZR.net
>>630
俺は622じゃないけど。
従来型のロック機構だとコストが高すぎる場合もあるんだよ。
俺は詳しくないけど、多分Erlangとかの世界で。
mutex等は共有メモリへの書き込みが生じるから実はかなり重い。
665:デフォルトの名無しさん
17/03/24 02:13:48.63 5bMFJR3b.net
馬鹿にマルチスレッド。
666:デフォルトの名無しさん
17/03/24 02:33:18.25 99176uAd.net
結局少しでも重たい処理は全部ワーカーにしなけりゃならないから
UI弄る時だけInvokeした方が見通しすっきりするんだよねw
async/awaitとか使うよりは
ここがUIスレッドですってはっきりわかる。
667:デフォルトの名無しさん
17/03/24 02:44:50.15 7cONiVN5.net
ここはまだWinFormsの時代かw
668:デフォルトの名無しさん
17/03/24 02:50:50.13 99176uAd.net
WPF?誰が使うか
そんなもんが必要なモバイルなら普通にJavaScriptにWebアプリで行くわって感じだねw
669:デフォルトの名無しさん
17/03/24 03:11:50.24 m/Lurhmo.net
>>612
progressBar.Value+=1
としたときに
1.読み込み
2.加算して書き込み
の処理が必要とすると、1と2の間に別スレッドが書き換えを行うことで結果が矛盾する
Interlocked命令を使えばそれは防げるけど、MaxValueを超えないかとかの判定が入るので結局ロックが必要
この程度ならまだしも、裏でWin32やCOMを叩いてるコントロールはさらにややこしい
670:デフォルトの名無しさん
17/03/24 03:44:24.59 5bMFJR3b.net
レベル低すぎて引くわ C#、LINQ、WPFが高速とか言ってたおれ最先端君が戻ってきたのか?
671:デフォルトの名無しさん
17/03/24 06:28:32.59 Cpc8yNoh.net
高速(で書ける)
672:デフォルトの名無しさん
17/03/24 07:23:36.10 vGZXBTd1.net
高速で壊れるの間違いだろ
馬鹿はphp書いてろ
673:デフォルトの名無しさん
17/03/24 07:56:00.46 P/PrHj1p.net
>>640
壊れても遅くてもいいからとにかくプロパティで書きたいというのが要件
674:デフォルトの名無しさん
17/03/24 08:24:47.57 gW3AbLz/.net
データの保証がないコントロールなど、標準品ではありえないから
頑張って作ってくれとしか言いようがないな
675:デフォルトの名無しさん
17/03/24 12:55:58.77 99176uAd.net
>>645
横だけれど、そもそも問題としてValueをインクリメントする事自体が余り良くない考え方かもね。それは表示と処理が分離できていないから。
カウント処理のカウンターはUIがもっているべきじゃない。
別途カウンターを作って、結果だけをUIに代入すべきだ。
このように設計されているなら、破損無視で書き込んでもうまく動作するだろうと思う。
問題は、それをすべての人に要求するのは難しい、自分の忙しくなったらきちんとせずにインクリメントしてるしなw
という事なんだな。
676:デフォルトの名無しさん
17/03/24 15:14:34.51 suDsBIm1.net
やっとまともなやつ来た
677:デフォルトの名無しさん
17/03/24 16:13:38.13 m/Lurhmo.net
>>646
今もそうなってるじゃん
ProgressBarクラスがカウンターを持ってて、ネイティブのmsctls_progress32にメッセージを送って表示を更新してる
ぜひスレッドセーフに再実装してみてくれ
678:デフォルトの名無しさん
17/03/24 18:30:43.13 kZHdS/d5.net
>>646
> カウント処理のカウンターはUIがもっているべきじゃない。
そんな低レベルな話をしてるのは ID:Ei+8urX3 だけだから、お前らもうでてくるな
679:デフォルトの名無しさん
17/03/24 19:42:33.91 RtKD05ZR.net
>>640
> 結局ロックが必要
いや、要らん。正確には、要らない組み方はある。
アトミックはデータを構造体にして参照を持つことで解決出来る。(一発ライト)
レーシングはインミュータブルとCASで解決出来る。x86ならCMPXCHG命令。
具体的には以下。
1. まず有効な値かどうかを先に判定する。(これは今も先にやっているはず)
2. 書き換える場合、元データのポインタをローカルにまず確保する。
3. 上記旧ポインタから参照して、書き込むデータを
new ProgressBarData() で新しく作る。(インミュータブル)
4. 本体のポインタをCAS命令(LOCK付き)で差し替える。
5. 失敗した場合は3からリトライする。(CAS命令の結果に最新ポインタが入っている)
この方法だとメモリを余分に食うけど、ロックは要らなくなる。
(なおErlangは共有メモリ無しで全て通信という別解決方法だった)
いずれにしても、やりようはあるんだよ。どこにコストを掛けるかという話で。
そもそもGUIなんてレーシングしても問題ないようにも組めるし。
(ProgressBar.value += なんて要らない。 = だけでも組める。>>646に同意)
その上で、invokeなんてユーザーに見せる必要あったのか?というのが疑問。
.NETはVC++でも使うから少しでも速い方がいいという需要もあるのかもしれんが、
C#のノリならここは隠蔽して欲しいところでしょ。GUIなんて極限まで速い意味はないし。
ラップしてもいいし、上記のようにロックフリーにしてもいい。
(もちろんユーザがやってもいいんだが、そういう言語じゃないでしょ)
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
つかいつからお前らこんなに馬鹿になったんだ?ふらっとから混ざったのか?
ロックの設計の仕方を知らないのはお前ら全員じゃねーかよ。
680:デフォルトの名無しさん
17/03/24 19:51:21.19 9LJ2CaVF.net
>>650
なーんかしょうもない話を延々続けて頭悪そうだけど、
特に理由がない限りわざわざスレッドセーフに作らないのはGUIに限らんって何度言えばわかるの?
馬鹿なのかほんと
681:デフォルトの名無しさん
17/03/24 19:54:06.25 HsxCjAja.net
>>650
2と3もロックされなければ既に破棄され別の領域として
再利用された誤った情報を読み出す可能性があるだろ
682:デフォルトの名無しさん
17/03/24 19:54:24.48 9VMQOfeX.net
MSにとっての実装コストの問題でもあるしな
MSが苦労するのはいいとしても、その結果激増したバグに悩まされるのはお前らだぞ
683:デフォルトの名無しさん
17/03/24 20:07:48.70 RtKD05ZR.net
>>651
お前がinvokeをウザイと思わなければそれでいい。
俺はinvokeをウザイと思うからMSが隠蔽しとけ、と思う。
多分後者の方が多いだろ、この件に関しては。
>>652
ついにC#がGC言語だと知らない奴も出てきたか、、、
>>653
MSはこの程度ならきっちり実装出来るよ。
というかMSって比較的まともだと思うぞ。
684:デフォルトの名無しさん
17/03/24 20:09:50.64 UKoqSEXl.net
BeginInvokeはどうするの?
685:デフォルトの名無しさん
17/03/24 20:15:53.11 RtKD05ZR.net
というかここでも単発は池沼なんだな。
いちいち言ってることがアレだし。
686:デフォルトの名無しさん
17/03/24 20:24:26.17 RtKD05ZR.net
つかまあ、百歩譲って他のコントロールならいいよ。
ただ、ProgressBarなんてどう考えてもタスクスレッドから書き換えられるのが仕様だろ。
(むしろUIスレッドから書き換えることがない)
それをいちいちinvokeはねーだろ。
せめてProgressBarだけでも対応しとけよと思うだろ普通。
687:デフォルトの名無しさん
17/03/24 20:27:59.45 9LJ2CaVF.net
>>656
アレなのはお前だよ馬鹿...
しかも重症のな。
何度も言うけど、こんなのはweb上にあるようなマルチスレッドの入門記事レベルの話だ。
そもそもスレッドセーフってどういうことなのかすら理解してないし、自分でそういうコードを書いたこともないだろお前。
しかし、
688:こういう馬鹿に限って偉そうなのは何なのかね
689:デフォルトの名無しさん
17/03/24 20:32:42.95 RtKD05ZR.net
皆さん、今からスレッドセーフ大先生の講義が始まります。ご静聴下さい。
ではよろしく>>658
690:デフォルトの名無しさん
17/03/24 20:57:32.53 UKoqSEXl.net
>せめてProgressBarだけでも対応しとけよと思うだろ普通。
ProgressBarを対応させたら○○も対応させろとか言い出す人が出ると思うでしょ普通
691:デフォルトの名無しさん
17/03/24 21:56:51.21 vGZXBTd1.net
馬鹿+偉そうときたから例外を握りつぶすニキだな
692:デフォルトの名無しさん
17/03/24 22:04:34.44 vGZXBTd1.net
ああでも今回はさすがにClickOnceは危険ニキを支持だな
>MSならこの程度はきっちり実装出来る
ここが一番面白かった
693:デフォルトの名無しさん
17/03/24 22:13:22.45 RtKD05ZR.net
つまり、俺が言いたいのは、以下ね。
>>559 > invokeってフォームに限ってどうして必要なのですか?
老害: それがしきたり。
ゆとり池沼連呼リアン>>658: スレッドセーフ!スレッドセーフ!
俺: MSが馬鹿だから。
ゆとりって連呼リアン程度の知能しかないよなマジで。
そもそも俺の>>650は>>589(俺ではない)とほぼ同じ内容だぞ。
お前ら馬鹿が付いて来れてないから書き直しただけでね。
お前らが589を最初から理解していればもっとマシな議論だったろうさ。
694:デフォルトの名無しさん
17/03/24 22:24:18.31 9LJ2CaVF.net
だからスレッドセーフじゃないのはControlのメンバだけじゃないって言ってるのに懲りない奴だな
馬鹿なのはMSじゃなくてお前だっての馬鹿
695:デフォルトの名無しさん
17/03/24 22:36:30.53 9LJ2CaVF.net
Control「だけ」がメンバをUIスレッドからしか呼べないとか訳の分からん錯覚をしているのは、
Controlのメンバが非ユーザーコードからも呼ばれることを理解してないからだろうなたぶん
696:デフォルトの名無しさん
17/03/24 22:41:45.59 RtKD05ZR.net
スレッドセーフ君はやはり連呼リアンであったか、、、
お前がそう思うんなら(ry
697:デフォルトの名無しさん
17/03/24 22:42:26.38 9LJ2CaVF.net
馬鹿な上にネトウヨって人生終わってるな
698:デフォルトの名無しさん
17/03/25 01:12:27.10 66tFvNtY.net
>>657
こんなもんで余計なパフォーマンス食われるのも嫌な感じだしね
スレッド無視で叩きこめるならその方がありがたい物ではある。
インクリメント問題くらいならこっちで対処するわって感じですな。
699:デフォルトの名無しさん
17/03/25 01:17:38.46 66tFvNtY.net
ああ、そういえば高負荷バックグラウンドスレッドで
progreassBarの操作をasync/awaitでブチかましてスレッドプール爆発させてた新人いたな(笑)
凄い困ってたけど、きっと何が何だか分からなかったんだろうな。
700:デフォルトの名無しさん
17/03/25 01:39:16.42 O6oCv4KM.net
>>668
そもそもコードの設計論から言ってもワーカースレッドからUIを操作するなんてありえない。
UIに依存するモデルってどんな糞設計だよ。
モデルにSynchronizationContextとか持たせてUIスレッドに同期したイベントで通知させるのは
設計としてありだけど、直接コントロールをいじるとかありえん。
それも気に入らないならUI側が能動的にタイマーでも使ってモデル側を読めばいいだけ。
701:デフォルトの名無しさん
17/03/25 04:16:02.72 ++OH//Pd.net
VB上がりにモデルなんて概念ないからw
702:デフォルトの名無しさん
17/03/25 09:54:01.33 QDpQza6M.net
.NETの質問したいんですがここで大丈夫でしょうか?
とりあえずします。
PictureBoxのPaintイベントでImageプロパティを再設定する処理などをしてるんですが
どうもMessageBoxの挙動がおかしくなってます。
フォームより後ろに表示されてしまって操作不能になってます。
とりあえず通常のメッセージボックスの場合はパラメータを弄って強制的に全面に表示させてますが
困るがSaveFileDialogなどで上書き確認のメッセージボックスが表示された時です。
この場合も後ろに表示されてしまって操作できない
703:のでどうしようもないです。 これを回避する方法はどうやればよいんでしょうか? Paintイベントの中身を消去すれば普通に表示されますが出来ればそのままでメッセージボックスも前面に表示させたいです。
704:デフォルトの名無しさん
17/03/25 09:57:11.64 iGx2aDuI.net
Paintイベント内の処理がおかしいんだろ
俺たちはエスパーじゃないんだから、まずそれがどんなコードか教えてくれよ
705:672
17/03/25 09:57:40.89 QDpQza6M.net
すいません。自己解決しました。
Paintイベントで毎回PictureBoxのImageプロパティを再設定してるのが原因でした
下記のように条件を入れてやるだけで回避できました。
if(pic.Image != img){
…
}
706:デフォルトの名無しさん
17/03/25 09:59:45.97 swqPfyBg.net
だと思った
707:デフォルトの名無しさん
17/03/25 10:45:00.80 omxknQTj.net
DataReaderを使って
while(await ReadAsync().ConfigureAwait(false)) {
...
}
って書いてるライブラリがあるんだけど
件数が多くなりそうなループでasync/awaitするとタスク生成とコンテキスト切り替えのオーバーヘッドで逆にパフォーマンス悪くなったりしないもんなの?
708:デフォルトの名無しさん
17/03/25 11:08:32.17 oe75j5bC.net
>>676
ReadAsync使う時点でそれらよりデータソース読み取りの方がコスト大と作者が判断しているんじゃないかね
MemoryStreamに対してReadAsyncとか使っているなら知らんけど
709:デフォルトの名無しさん
17/03/25 11:09:13.59 kGpqWpaU.net
>>676
そりゃ呼び出しのオーバーヘッドは増えるだろうけど、それが問題になるかどうかは別だ
パフォーマンスという言葉を安易に使うのはやめよう
君はバッチ処理をしてるのかオンライン処理をしてるのかストリーミング処理をしてるのか、
そのライブラリの方はどういう使われ方を想定してるのか、
処理の規模はどれくらいか
パフォーマンスってのは結果的に目的をどれだけうまく達成できたかであり、一面だけを見て判断できるものじゃない
710:デフォルトの名無しさん
17/03/25 11:11:43.78 2T3avjLL.net
パフォーマンスって何を指してるんだ
処理速度出すためにasync/await使うわけじゃないのは理解しているよな?
711:デフォルトの名無しさん
17/03/25 11:13:12.94 2T3avjLL.net
具体的に何を指すんだと問い詰めたい単語
パフォーマンス
スマート
712:デフォルトの名無しさん
17/03/25 12:12:06.97 AJzcpICN.net
話題が長引いても安心な匿名掲示板「Anontown」 [無断転載禁止]?2ch.net
スレリンク(tech板)
713:デフォルトの名無しさん
17/03/25 13:35:04.97 66tFvNtY.net
>>671
とりあえず動くもの作るからな、クリックして必要な事をかける構造になっている以上
次に起こる事は、必然的にスレッドプール爆発なんだわw
714:デフォルトの名無しさん
17/03/25 14:21:07.83 pA2Zx06R.net
馬鹿がプログラムを書かなければ解決
715:デフォルトの名無しさん
17/03/25 14:49:04.12 66tFvNtY.net
そういうヤツはHaskellでもやってろって話だよ
C#はそういう言語じゃない
716:デフォルトの名無しさん
17/03/25 15:02:20.11 OnvCww5G.net
勝手にそういう言語とか決めないで欲しいな
糞袋の観測範囲で
717:デフォルトの名無しさん
17/03/25 17:12:28.65 P4wL6N6L.net
webbrowserのdocumenttextでhtmlを文字列で直接埋め込みたいんですが
ローカルに設置したcssやjsファイルを読み込む方法がわかりません。
どこに配置してどのように読み込めば良いか
ご存じの方教えていただけますでしょうか?
どうぞよろしくお願いします。
718:デフォルトの名無しさん
17/03/25 18:18:23.98 gz8AHGhh.net
Data URIスキームで埋め込むとか
719:デフォルトの名無しさん
17/03/26 00:26:03.65 b1vqxh2T.net
HaskellといえばAI。つまりそういうこと。
720:デフォルトの名無しさん
17/03/26 11:09:36.56 WUrKAJma.net
こんな感じか?
URLリンク(livedoor.blogimg.jp)
721:ymatome/imgs/7/6/76ec3c1e.jpg
722:デフォルトの名無しさん
17/03/26 12:41:56.97 Uwt+/Suh.net
>>670-671
釣りか?マジで言ってるのなら
お前ら別の意味でのスタティックおじさんになってるぞ。
まあC#erなんてそんなもんだと今回思い知ったが。
723:デフォルトの名無しさん
17/03/26 13:20:23.73 x9SVAeuT.net
progressbarなど、多くても100回程度書き換えれば充分なわけで
たかが100回のUIスレッド切り替えでオーバーヘッドとか笑っちまうな
スレッドを無視するより書き換え回数減らしたほうが余程生産的だし簡単だ
724:デフォルトの名無しさん
17/03/26 13:20:26.49 hVl7ZVni.net
>>690
そもそも今時Windowsのデスクトップアプリなんか作ってる時点で
スタティックおじさんであることを自覚したほうがいいよ
725:デフォルトの名無しさん
17/03/26 13:24:42.49 TjDGXANh.net
暴論w
726:デフォルトの名無しさん
17/03/26 13:28:02.28 WQ8v1gdY.net
みんなコード書くよりレッテル貼りの方が得意なんだな
727:デフォルトの名無しさん
17/03/26 13:48:27.23 7xcWRiGy.net
プログレスバーはカウントアップが面倒なのかいつからかグルグルするモードがついたね
ハングアップしてないかわかればまぁいいんでそればかりつかってる
728:デフォルトの名無しさん
17/03/26 13:59:10.19 TjDGXANh.net
いつ終わるか分からない処理もあるから。
729:デフォルトの名無しさん
17/03/26 14:02:35.77 Lixhnbpu.net
>>695
それ追加されたの.Net2.0だから10年以上前だよ
730:デフォルトの名無しさん
17/03/26 14:03:21.73 xbLciI4B.net
鬱陶しいから来週まで続けるなよ
でないとこのスレ埋め立てるからな
731:デフォルトの名無しさん
17/03/26 14:13:37.56 Lixhnbpu.net
4月1日までか…長いな
732:デフォルトの名無しさん
17/03/26 14:19:29.01 Uwt+/Suh.net
つかお前ら落ち着けw
俺は>>650だよ。そして>>640含むお前ら大多数よりは賢いことはもう示したろ。
で、>>670-671も同様にアホっぽく見える。
しかしマジでそう思っているのなら、それを示せば多少は教えてやるよ、ということだ。
何か最近、煽ったりカニンガムの法則を試しているような奴も多いんでね。
それに付き合わされるのはウザイ。
俺の意見は ID:Un9Q+jtZ とは完全には一致はしないが、
6割くらいは一致するし、彼が何を言いたいのかは分かる。
既に言ったとおり、650も>>589の代弁に近い訳でね。
お前らは>>597(重ねて言うが俺ではない)の意味を理解出来ていないように見える。
そこでお題を出してやる。
これをお前ら流の「美しい実装」をする方法を述べてみろ。
駄目出ししてやるよ。
フーリエ変換をする関数 calc_FFT があって、
計算に時間がかかるので、プログレスバーに進捗状況を表示したい。
参加する人はどうぞ。
733:デフォルトの名無しさん
17/03/26 14:24:02.60 13fTqv5I.net
>>700
まだやる気かよ。
だからねえ、そういうのは>>670に書いた2つのやり方のどちらかを選択するのが普通。
どんな方法論を取るにしろ、モデル側から直接UI部品をいじるとかありえない。
依存方向は一方通行にするなんて基本中の基本だろ
734:デフォルトの名無しさん
17/03/26 14:32:06.72 13fTqv5I.net
この元の話題、つまりUI部品のメンバーがUIスレッドからしかアクセスできないように
なっているのは不合理かどうかって話も、はっきりいって問題提起した奴が何も分かってない馬鹿なだけ。
こういう仕様は十分に合理的。
735:デフォルトの名無しさん
17/03/26 14:55:35.58 V5FfYo93.net
だからVB上がりにモデルなんて概念はないって言ってんだろが
通じない話を繰り返すな
壊れて向きが変わらなくなったチョロQかテメー
736:デフォルトの名無しさん
17/03/26 15:00:04.71 7VPGG3Vy.net
モデル概念�
737:mらないおじさんや初心者以前に エキスパートからしてみてもC#を使いたい動機は素早く手軽に組みたいという動機にあるからね。 時間をかけてガチガチにやらないかぎり上手くいかないとか、それは勘弁願い下げたよな。
738:デフォルトの名無しさん
17/03/26 15:09:11.18 N/oWszN2.net
うぇーゴミ虫の狭い観測範囲で勝手にC#ユーザーの動機を定めちゃう?
いくら寛容な人間様でも下等生物と一緒にされるんでは不愉快ですわ
739:デフォルトの名無しさん
17/03/26 15:14:26.60 7VPGG3Vy.net
お気に召さなければC++でも使ってみたらどうよ?
templateメタプログラミングならなんでもお望みの書き方でできるよ。
740:デフォルトの名無しさん
17/03/26 15:37:28.26 Uwt+/Suh.net
ちなみに、回答は後日ね。
こういうのは急いで出来る必要はないから、じっくり考えてみてよ。
当たり前だが俺は>>670-671よりもマシな解決方法を持っている(つもり)
>>701
採点結果: スタティックゆとり乙
君はどういう依存が悪いのかを理解出来ていない。
そしておそらくUIはスタティックだと信じている。
ただしMSも同様に馬鹿だった。だからFormは糞なのも事実。
しかし世の中には他の実装方法もあるって事さ。
君達がロックフリーの世界を知らなかったようにね。
ヒントとしては、
> どちらかを選択する
ここが間違っている。
何通りも用意するとか、ラップして変換するとかは、明らかに無駄だよね。
741:デフォルトの名無しさん
17/03/26 15:46:45.12 bdiJ1zQR.net
>壊れて向きが変わらなくなったチョロQかテメー
斬新な煽り方だなw
742:デフォルトの名無しさん
17/03/26 16:30:36.77 E6fNHh8L.net
ネトウヨとかもそうだけど、頭悪い奴に限って、
「この俺だけが世の中の真実に覚醒した!!!この世は嘘と欺瞞にまみれていて(笑)
俺以外の連中は馬鹿ばかりだ!!!」
ってなるのは何なのかね。
まあ2chにはこういう単細胞で自分を客観的に見られない奴いっぱいいるけど、
>>707みたいにそういうタイプはプログラマとか知的な仕事についてはいけない人だよな本来
743:デフォルトの名無しさん
17/03/26 16:33:32.75 7VPGG3Vy.net
彼が相手している誰かさんの方がむしろヤバイという客観的印象ありなんですけどねw
744:デフォルトの名無しさん
17/03/26 17:00:26.56 nZrkbKSG.net
ロックフリーおじさんはスタティックおじさんを馬鹿にできんだろ
○○おじさんが馬鹿にされる本質は金のハンマー信仰にあるのだから
745:デフォルトの名無しさん
17/03/26 17:09:41.70 E6fNHh8L.net
銀の弾丸を求める者は少なくとも倒すべき「怪物」の存在には気が付いているが、
彼はそのレベルにすら達してないよたぶん。
背後にあるトレードオフに気が付かないから不条理でないものが不条理に見えてしまう
自分の馬鹿さ加減を自覚できないだけ
746:デフォルトの名無しさん
17/03/26 18:57:25.59 iTS+fWTZ.net
>>700
ダメ出しなんて要らん
どや顔で語りたいならぐうの音もでない実装を晒しやがれ
747:デフォルトの名無しさん
17/03/26 19:11:26.31 iZtP8D0n.net
初歩的な内容ですが。
RxのISchedulerインターフェースを実装したいのですが、ScheduleメソッドのDateTimeOffsetを引数にとるオーバーロードとTimeSpanを引数にとるオーバーロードって
どのように実装すればいいのですか。
本家Rx.NETのリポジトリにあるコードをいくつか見ましたが、
なんとなく、指定された時間の分だけ遅延させて
デリゲートをInvokeさせるというのは分かりましたが、この2つのオーバーロードの具体的な実装方法を文章で書いてあるところを教えてください。
あと、戻り値がIDisposableなんですけど、これはスケジュールの解除を行うDisposableでいいですよね。
748:デフォルトの名無しさん
17/03/26 20:02:08.99 YTmW3NMW.net
>>707
利根川さんきたーーーーw
749:デフォルトの名無しさん
17/03/26 20:06:43.37 Uwt+/Suh.net
>>713
俺は語りたいわけじゃない。
だから君の意見を尊重して、俺の答えは書かないことにするよ。
君らは一生馬鹿なままで過ごせばいい。
C#にとどまっている限り、回りもみんな馬鹿だから、ばれないで済むだろう。
ただ、知っている奴が見たら、お前らは本当に間抜けなことをしている。
だけど、そういうのは自分でいろいろ考えないと身につかないんだよ。
だから自助努力する奴に対してはサポートしてやろうとしただけ。
とはいえ、俺の案も他言語では普通に使われる手だから、探せば出てくるはず。
それは君たちで探すんだね。
俺はくだらない煽りには本当に辟易している。
そのエネルギーは正しくプラスの方向に使うべきだよ。
マイナス方向に使って煽るのではなくてね。
君は何がしたかったんだ?
俺の面目を潰したかったのなら、俺より素晴らしい実装を先に言ってしまえばよかっただろ?
或いは他の人から、もっと素晴らしい実装が出てきたら、君にも糧になっただろ?
そうやってプラスの方向にお互いに高めていくべきなんだよ。
それを、「じゃあ教えてやらない」と言われる話の振り方をしてしまうから、
ゆとりはゆとりのままなんだよ。
聞くは一時の恥、聞かぬは一生の恥、だよ。
こんな匿名のところですら面子を重視しているうちは一生ゆとりだよ。
750:デフォルトの名無しさん
17/03/26 20:09:36.55 XWnO8Cg2.net
めっちゃ早口で言ってそう
751:デフォルトの名無しさん
17/03/26 20:52:30.96 iTS+fWTZ.net
なぜかバカって無駄な長文書くんだよな
こういう奴が書くコードも推して知るべしなんだろうな w
752:デフォルトの名無しさん
17/03/26 21:11:54.02 DeCVSWGu.net
そういうのも馬鹿っぽいよ。中学生か。
問題なのは言ってることが正しいかどうか、それだけ。
長文かどうかなんてそれとまったく関係がない。
彼はトンチンカンな勘違いをしてるから馬鹿にされてるだけ。
753:デフォルトの名無しさん
17/03/27 00:01:17.74 rNkb8v7V.net
日本語理解できないアホ?
頓珍漢なこと書く奴ってたいてい長文だろって話だぞ
754:デフォルトの名無しさん
17/03/27 00:14:45.53 qUMQbQ0X.net
馬鹿な奴だ。
馬鹿の世界ではきっとすべての事柄が三行以内の短文で表現できることになってるんだろうね。
己の無学を語るに落ちてるな
755:デフォルトの名無しさん
17/03/27 00:18:01.70 rNkb8v7V.net
誰もまともなこと書く奴が長文ではないって言ってないんだが w
逆とか裏とかを理解してないのってプログラマーとして致命的じゃね?
756:デフォルトの名無しさん
17/03/27 00:19:42.90 wneB9bMR.net
じゃあ一行で。スレタイ読め。
757:デフォルトの名無しさん
17/03/27 04:02:24.71 UZsp8jX5.net
>>716
せっかくなので教えて欲しい
ちょっと考えたけど、やっぱりMaximumとMinimumがValueの変換中に変わるときとかが結構めんどくさい
あと、オーナードローや継承が安全にできることも必要か
プログレスバーのValueだけどかならともかく、コントロール全部をスレッドセーフにとかは非現実的なんじゃないか?
実際近年やってるところは少し調べた限り無いし
758:デフォルトの名無しさん
17/03/27 04:51:00.01 FSqhbRGK.net
>>714
誰も触れてくれなくて草
759:デフォルトの名無しさん
17/03/27 05:02:30.31 rNkb8v7V.net
>>723
>>700 に言えよ w
760:デフォルトの名無しさん
17/03/27 14:11:21.66 H4MLQPNT.net
>>725
まあ正直今時Rxかよwwwwww
と草生えるからな
保守案件かも知らんが御愁傷様だ
761:デフォルトの名無しさん
17/03/27 15:09:08.98 OggmZorO.net
そもそもRxって今は.NETの一部じゃなくてサード扱いだからな
知ってるのが当然みたいに言われても困る
.NET Fx以外の個別のライブラリについてはスレ違い
762:デフォルトの名無しさん
17/03/27 22:59:41.60 ty5ByWfa.net
>>690
スタティックおじさんって誰よ?
763:デフォルトの名無しさん
17/03/27 23:14:42.86 53TkDvRN.net
スタティックジジバンドのリーダーだよ
知らなかったのか
764:デフォルトの名無しさん
17/03/27 23:28:21.19 c1Kh3EUH.net
もう今ならスタティックの悪い使い方を知ってるほうがおじさんな気がする……
765:デフォルトの名無しさん
17/03/27 23:52:27.87 dYBhOZra.net
性的
766:デフォルトの名無しさん
17/03/28 07:20:39.72 1WRXezaS.net
>>712
不二痛のノンプログラミングツールの
販促で 銀の弾丸を求めて とか
書いてあったの思い出した
あんな大手企業がスゲー認識してるなと思った
767:デフォルトの名無しさん
17/03/28 08:08:28.90 W2JaqSVc.net
ラズパイでMVCのwebアプリって動かせますか?
768:デフォルトの名無しさん
17/03/28 16:32:12.10 WR7Bj+dr.net
Windowsがまともに動きゃ動くだろ
769:デフォルトの名無しさん
17/03/30 00:54:43.35 8DsEMtOy.net
.NET CoreならWindowsじゃなくても動くんじゃね
770:デフォルトの名無しさん
17/03/30 01:35:10.25 DtnWdi8P.net
ARMで動くのか?
771:デフォルトの名無しさん
17/03/30 01:58:32.69 Qg6ZUcGU.net
Formのコントロールのイベントに紐づけしたFormのメソッドって
Formが閉じられた後も紐づけしたままだとお漏らしになるんだっけ?
772:デフォルトの名無しさん
17/03/30 02:50:16.54 DVY8Bk9i.net
>>737
動くよ、ググってみ
773:デフォルトの名無しさん
17/03/30 06:49:49.86 U97Tvha+.net
>>738
ならない
774:デフォルトの名無しさん
17/03/31 09:35:08.92 YcsHI68o.net
UI AutomationでVB6で書かれたレガシーなアプリのUIテストをしたいのですが、
操作したいコントロールの多くに一意のAutomatinIDが割り当てられていません。多くのコントロールのIDが1や2になっています。
一応、コントロールの順番が変わらないものと決め打ちして操作したいコントロールを特定することは可能なのですが、不便です。
もっとうまいやり方ってありますか?
後は表示位置を元に特定するくらいしか思いつかないのですが。
AutomationIDって、少なくともVB6では自分で設定できないのでしょうか。
一応このレガシーアプリのソースコードはあり、編集も可能なのですが、
AutomationIDというのを設定するところは見当たりません。
775:デフォルトの名無しさん
17/03/31 14:28:02.89 gIiQslt6.net
スレチ
776:デフォルトの名無しさん
17/03/31 19:34:04.77 BtloYTx6.net
ASP.NET MVCなんですが
DBに処理対象データがあるか確認
__ある場合:メッセージボックス(*件処理します。処理を続けますか?)
____はいの場合:データ更新処理
____いいえの場合:なにもしない
__ない場合:メッセージボックス(データがありません)
こういう処理を非同期リクエストを使わずに実装したいのですがどうすればいいでしょうか
入力フォームの内容もクリアされないようにしたいです
777:デフォルトの名無しさん
17/03/31 19:36:51.55 kI20EOUu.net
簡単だよ
778:デフォルトの名無しさん
17/03/31 20:45:16.64 BtloYTx6.net
>>744
教えてください
お願いします!
779:デフォルトの名無しさん
17/03/31 21:59:00.75 wAJQEnGm.net
なぜそんなことを他人に聞かないとわからないのかわからない。
780:デフォルトの名無しさん
17/03/31 22:08:53.88 PPRsLJ2Y.net
>>740
遅くなったけどありがとう
やっぱりそうか
781:デフォルトの名無しさん
17/03/31 22:10:11.37 9w4qNkVe.net
>>743
正直おまえキモイ
782:デフォルトの名無しさん
17/03/31 22:38:20.66 BKtRT3pJ.net
>>743
フォームの入力内容を書き戻すのに加えて、確認中であることを示す値を入れたhiddenフィールドと
$(function() { if (confirm(msg)) $("#form").submit(); });
みたいなスタートアップのスクリプトを仕込んで返せばいいんじゃないの
俺ならこんな汚物を出してきたら差し戻してAJAXで書き直させるけど
783:デフォルトの名無しさん
17/04/01 19:08:34.68 iJwskPQ3.net
while(true)
{
Console.Out.WriteLine("氏ね");
}
784:デフォルトの名無しさん
17/04/01 19:15:59.90 4r7Zvrb2.net
標準出力とか久々に見たわ
785:デフォルトの名無しさん
17/04/03 13:09:41.47 sZC7W3vJ.net
aspでviewだけをデザイナーに触らせたいんだけどどうすればいいの?
view以外(controllerとか)のソースを弄られたくないし見せたくもない
786:デフォルトの名無しさん
17/04/03 13:48:10.33 YcnJ2dMt.net
フォルダにアクセス権限でも付けとけや
スレ違い
787:デフォルトの名無しさん
17/04/03 14:12:13.73 sZC7W3vJ.net
こういうプロジェクトの共有(共同開発)は出来ないのですか?
788:デフォルトの名無しさん
17/04/03 14:18:51.99 G0J69e58.net
普通にできるが
789:デフォルトの名無しさん
17/04/03 15:39:57.58 sZC7W3vJ.net
普通にはできませんでした
790:デフォルトの名無しさん
17/04/03 19:12:16.74 zJguOVHN.net
>>752
それならREST APIで良いんじゃないか
RazorというかサーバーサイドのHTMLテンプレートはもう時代遅れだから思い切って捨ててしまえ
791:デフォルトの名無しさん
17/04/03 20:15:16.37 YcnJ2dMt.net
WebAPIを使った動的ページの開発ができる有能なデザイナならソース隠す必要ないだろ
むしろバックエンドも含めて全部そいつ一人に作らせた方が早いんじゃないか
792:デフォルトの名無しさん
17/04/03 20:38:02.81 DvppQH2R.net
わろたw
ビューのソースファイルだけ渡してデバッグできない状態で作らせるか
テンプレート関連の読み込み処理を自前にするしかないだろうな
もともとc#のtemplate使ってるから自前もわりと簡単だよ
793:デフォルトの名無しさん
17/04/03 22:10:44.51 zJguOVHN.net
冷静になって考えるとモックコントローラー作るだけだったわ
794:デフォルトの名無しさん
17/04/11 23:45:38.38 f9LqqWjR.net
バイト配列を並列で0クリアしようと思ったんだが、なんかほぼ変わらない
なにか間違ってるんだろうか?
public static void Main()
{
var methods = new Action<byte[]>[] { ArrayClear, ConcurrentClear };
for (var i = 0; i < 5; i++)
foreach (var method in methods)
{
var sw = Stopwatch.StartNew();
var buffer = new byte[64 * 1024 * 1024];
var random = new Random(0);
random.NextBytes(buffer);
method(buffer);
Console.WriteLine(method.GetMethodInfo().Name + ": " + sw.ElapsedMilliseconds);
}
}
private static void ArrayClear(byte[] buffer)
{ Array.Clear(buffer, 0, buffer.Length); }
private static void ConcurrentClear(byte[] buffer)
{ var t0 = Task.Run(() => Array.Clear(buffer, 0, buffer.Length / 2));
var t1 = Task.Run(() => Array.Clear(buffer, buffer.Length / 2, buffer.Length / 2));
Task.WaitAll(t0, t1); }
795:デフォルトの名無しさん
17/04/11 23:59:42.35 WDRtNXIn.net
>>761
なんでそんなクソ遠回りなことやってんのか知らんが
Taskでパラレルやるなら引数渡せ
796:デフォルトの名無しさん
17/04/12 00:22:54.01 QhQPiH2H.net
>>761
少し考え違いをしていると思う、並列処理は分割すればするだけ速くなるような代物じゃないし
粒度が細かすぎる、Taskは並列というより並行処理向け。同配列に対する処理などはCPUよりGPGPU向き
―だがそれより何より
797:、その計測された時間のほとんどは配列生成と乱数格納に費やした時間だ
798:デフォルトの名無しさん
17/04/12 00:52:15.63 PvBuykCK.net
毎度思うけど命令口調のバカ何なのかねw
799:761
17/04/12 02:52:03.74 E1U6B9R0.net
>>762
Parallel 使えってことかな?
>>763
あ、乱数生成の時間まで入れてたのか
でも乱数生成分入れないようにしても、どっちも同じような時間なのは変わらない
バイト配列キャッシュ作ってるんだけど、1GBぐらいの超巨大配列の初期化に
Task の生成や切り替えに数msec使っても、効果があると思ったんだ
分割すればするほど速くなるとは思ってないけど、
2分割程度なら速くなって当然と思ってるんだけど
800:デフォルトの名無しさん
17/04/12 03:38:43.21 QhQPiH2H.net
>>765
オーバーヘッドはご存じか、C#の場合はネイティブスレッドのそれほどでも無いだろうけど
ただ…結局この場合だと演算が皆無でメモリストアに割食って無意味って所だろうか(範囲が被るほど速い
801:デフォルトの名無しさん
17/04/12 06:57:20.84 uWep8obc.net
メモリーアクセスがボトルネックになってるだけじゃねーの?
802:デフォルトの名無しさん
17/04/12 07:57:27.76 A6XRqe5e.net
常識的に考えて、ボトルネックはNextBytesじゃないかなw
803:デフォルトの名無しさん
17/04/12 11:23:50.73 E1U6B9R0.net
>>766, 767
なるほどメモリアクセスかー
Taskの切り替えや待ち時間などのオーバーヘッドはご存知よ
書いたとおり、Taskをふたつ待つ程度のオーバーヘッドは数msec
NextBytesを計測から外し、1GBで0クリアを試してみたら、150msec前後かかった
レートだと 6700MB/sec ぐらい
実行環境は DDR3-1333 なんだけど、理論値 10667MB/sec
途中GC入ってたし、こんなもんかー
804:デフォルトの名無しさん
17/04/12 11:40:08.42 7YKbJJVc.net
byte(IntPtrじゃない)の配列のアクセスでそんなにHWの理論値に近い数字が
出る訳ないと思うよw
っていうか理論値はあくまで純粋にHWの転送能力であってCPUが介在する場合は
そんな値絶対出ないし
測定値、計算のどちらかまたは両方が間違いなく間違ってるw
805:デフォルトの名無しさん
17/04/12 12:09:07.27 E1U6B9R0.net
>> 770
Array.Clear() って .NET Core の内部ではポインタ幅(64bit?)で0クリアしてたよ
端っこはバイト単位での0クリアだったけど
// now write pointer sized pieces
size_t nPtrs = (endBytes - memBytes) / sizeof(PTR_PTR_VOID);
PTR_PTR_VOID memPtr = (PTR_PTR_VOID) memBytes;
for (size_t i = 0; i < nPtrs; i++)
*memPtr++ = 0;
GC発生しないようにバッファ使い回してみたら、7000~8000MB/sec くらいだった
理論値でるとも言ってないし、7~8割なら測定値、計算ともに妥当じゃない?
806:デフォルトの名無しさん
17/04/12 13:46:41.47 PeioJu3J.net
(byte配列ならnewした時点で既定値(則ち0)で埋められてるだろ、と言ったらあかんのか?)
807:デフォルトの名無しさん
17/04/12 14:05:20.61 OIzgc8H/.net
>>772
そりゃ実験のためのコードだからね
何のためにこんなこと試すのかわかんないけど
808:デフォルトの名無しさん
17/04/12 14:11:16.09 E1U6B9R0.net
>>772
LOH(約85000バイト以上のオブジェクト)は仮想メモリ空間のフラグメンテーションを発生させるので、
OutOfMemoryException が発生しやすくなる
巨大バッファをガンガン使いまわすアプリは OOMを防ぐため、
バッファをキャッシュして使いまわす必要があったのね
んで、キャッシュしてたバッファを使うときに高速�
809:ノ0クリアしたいってのが、今回の大元でした
810:デフォルトの名無しさん
17/04/12 18:50:16.39 IE9Tc5o9.net
配列のメモリークリアみたいな物はマルチスレッド化しても高速化しないだろうね
原理的にサイズが大きくても高速化しないと思われる
811:デフォルトの名無しさん
17/04/12 19:03:44.50 0XMPUeTg.net
15年前のシングルコアのプロセッサーが当たり前の時代ならその通りだけど、
今日的にはそんなこともないんじゃないの?
たとえ物理メモリーは排他的にしかアクセスできない制約があるにしろ、
並列化の効用がまったくないとも思えん
812:デフォルトの名無しさん
17/04/12 19:08:41.74 giyYheDf.net
むしろCPUキャッシュに左右されんじゃねのか
環境でばらつきまくって計測の意味もなさげ
813:デフォルトの名無しさん
17/04/12 19:51:51.86 QhQPiH2H.net
とりあえずWindowsマシン@4.6.2で色々試してみたら
[SuppressUnmanagedCodeSecurity, DllImport("kernel32")]
extern static void ZeroMemory(byte[] Destination, IntPtr Length);
[SuppressUnmanagedCodeSecurity, DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl)]
extern static void memset(byte[] _Dst, int _Val, IntPtr _Size);
とかした方が雀の涙ほど速かった、CILだと
ldarg.0
ldc.i4.0
ldelema uint8
ldc.i4.0
ldarg.0
ldlen
initblk
あたりで漸く同等、しかも64bitに限った話、32bitだとどれも誤差レベル
814:デフォルトの名無しさん
17/04/12 21:18:24.58 u533e0uw.net
>>776
ほとんどメモリーアクセスしかないのに高速化できるわけないだろ
815:デフォルトの名無しさん
17/04/12 21:45:31.51 0XMPUeTg.net
>>779
高級言語のコード上はそうでもCPUの実際の動作はそうじゃないよw
816:デフォルトの名無しさん
17/04/12 21:56:27.84 5KMe1hi6.net
どう動いてるんだ?
817:デフォルトの名無しさん
17/04/12 23:32:44.30 7AJloho+.net
>>780
はあ?
メモリーアクセス以外のどんな動作があるんだよ w
818:デフォルトの名無しさん
17/04/12 23:49:21.06 fn4L3E2o.net
仕組み判らないけどメモリをキャッシュしてる場合
同じキャッシュ単位内に同時に書き込みできるものなのか?
819:デフォルトの名無しさん
17/04/13 00:14:45.08 Vv6BlwOK.net
使うときに必要な分だけ0クリアじゃだめなんか?大量にバッファを0クリアする場面が思い付かん。
820:デフォルトの名無しさん
17/04/13 00:38:14.37 px7lD0L1.net
>>782
DMAでも使ってない限り、少なくともポインタのインクリメントとループの終了条件のチェックは入る
821:デフォルトの名無しさん
17/04/13 00:57:14.48 G9tlFT6D.net
>>785
x86にはストリング命令というチートが有ってだな
822:デフォルトの名無しさん
17/04/13 01:07:16.95 px7lD0L1.net
あ、ポインタは自動インクリメント付きの命令が使えるかも
823:デフォルトの名無しさん
17/04/13 01:22:49.09 sVC5qkLg.net
>>784
つ GC
>>783
Core i7 2600 4Core Sandy Bridge とかだと、CPU-Z とかのツールで見てみると
L3 キャッシュまで搭載していて、
・L2 は 256KB が 4コア分
・L3 は 8MBひとつ
なので、L2間でコア間のキャッシュコヒーレンシ(一貫性)を解決してるはず
キャッシュライン(64Byte)ごとに他のコアで書き込みがあるかとかをチェックしてる
同時の書き込みもちゃんと検知されている
キャッシュラインで競合すると書き戻しとかが発生するので、
重ならないようにするのがいいらしい
824:デフォルトの名無しさん
17/04/13 01:23:52.75 DHabuNl5.net
そもそもrep stosb云々とか以前に、命令のクロックサイクルなんかより
メモリレイテンシがデカすぎて取るに足らないって事よ、コヒーレンシの実装にも左右されそうだし
1つのバカでかいバッファより、バッファ自体を分割したほうが良いんでないか
825:デフォルトの名無しさん
17/04/13 01:44:29.44 G9tlFT6D.net
スレッドをいくつ作ろうが、単純な0クリアだからキャッシュ内のメモリーを処理する速度がキャッシュとメモリーの転送速度より早くなり
CPUはキャッシュが満たされるのを待つ必要があるから頭打ちになるってことかね
826:デフォルトの名無しさん
17/04/13 03:28:18.29 NHsAQDrp.net
WinFormsはif文やっと覚えましたってレベルでも
有名なサイトのコピペで目的のもの作れたが
WPFはデリゲートや非同期を熟知してないと一歩も進めない感じ
コピペしたくても自由度が高く手法が多すぎて無理
827:デフォルトの名無しさん
17/04/13 05:44:30.50 FNNFGlTu.net
今のCPUなら1CPUでも、連続0書き込みなんかしたらメモリーの速度を圧倒してしまうからな
マルチスレッドなんかにしたら、そのオーバーヘッドが邪魔してかえって遅くなるだろう
828:デフォルトの名無しさん
17/04/13 06:14:59.28 wfOumNdE.net
CPUの実際の動作がさっぱりわからん
829:デフォルトの名無しさん
17/04/13 06:22:05.68 vvMMmk8r.net
気にしなくていい
830:デフォルトの名無しさん
17/04/13 06:53:09.50 DSZn496T.net
>>785
おっさんいつの知識で語ってるんだよ w
そんなもん主記憶への書き込みに比べたらゴミにしかならんぞ
831:デフォルトの名無しさん
17/04/13 07:19:52.20 FNNFGlTu.net
>>793
CPUというよりも、CPUとメモリーのスピード差が決定的すぎるんだよ
メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
余りに待ちが長いので、その間に色々計算ができるようにCPUには工夫が入っていたり
マルチCPUにして、別のCPUが計算している間に書き込んでしまえといった方面で創意工夫がされているんだ。
境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
書き込みスレッドは一本にして、他のCPUは別のメモリーアクセス以外の仕事ができるように開けておいた方がトータル良い結果を出すって事。
832:デフォルトの名無しさん
17/04/13 08:39:19.14 2TLG8dmE.net
どうでも良いが、メモリーに書き込まないスレッドとかありえないと思うんだ・・・
833:デフォルトの名無しさん
17/04/13 10:17:04.48 xhr4sxE5.net
本当に小規模な計算ら、レジスタだけで解決できるだろう
834:デフォルトの名無しさん
17/04/13 13:14:58.98 mVrmFNTT.net
C++ならともかくC#で気にする必要のあることなんだろうか
835:デフォルトの名無しさん
17/04/13 13:31:22.91 FNNFGlTu.net
>>799
知っていれば無意味な並列化とかしなくて済むだろ
そうすればソースも分かりやすくすっきりするし
0フィル処理なんて詰まらない処理なら、効果はてきめんだ。
836:デフォルトの名無しさん
17/04/13 13:43:29.67 xhr4sxE5.net
無意味な並列化にかかる工数と、無意味な並列化は逆効果ということを検証する工数
どちらがよりコストがかかるんだろうか。
837:デフォルトの名無しさん
17/04/13 13:49:55.01 FNNFGlTu.net
高速化目的で並列化しなきゃならない程の状況なら、検証はするだろ。
で、並列化するときにどういう方向性が効果的かってのを知っておくことは
コードを手早く書く上での基本テクニックだよ
無意味なコードは、そもそも書かないし試さないというショートカットができるからね。
将棋の名人でもすべての手を読んでいる訳じゃない、効果的な枝だけを深読みしているみたいなもんだ。
838:デフォルトの名無しさん
17/04/13 14:09:41.46 xhr4sxE5.net
並列化をしたくなるのは、代替がそういう状況に陥る前の段階での思いつきなんだよねたとえば今回の0フィルとか。
839:デフォルトの名無しさん
17/04/13 16:09:48.66 aK+zC0HQ.net
並列化の基本はいかに粒度を上げるかだよ
極端な話、プロセスを2つに増やして2倍速くなるならそれでいい
ミクロな視点で考えるのはほとんどのケースにおいて時間の無駄
840:デフォルトの名無しさん
17/04/13 16:28:44.49 FNNFGlTu.net
>>803
こういうのってコンピュータの仕組みが分かってしまえば、高速化手法として頭に浮かぶことすらないですから。
考えるまでもなく除外なんですよ、脊髄反射。
よく似た物にページングのチューンなんかがあるね。
並列化したら、ずっと仮想メモリにページアウトページインばっかりするようになってしまうのが見え見えのコードとかね。
こういうケースが見えて居る時にマクロ視点でプロセス増やして・・・と考えることは無いねw
841:デフォルトの名無しさん
17/04/13 18:05:14.12 sVC5qkLg.net
>>805
コンピュータの仕組みなんて常に変わっていくもの
脊髄反射で手法を除外するのはよくない
あと一レス目で指摘するならともかく、問題点が整理されてから
後出しで手法をダメ出しするのはカッコ悪い
842:デフォルトの名無しさん
17/04/13 18:18:41.10 xmE6C1ua.net
>>796
それってCPUの実際の動作じゃなくて単なる考え方だよね・・・
843:デフォルトの名無しさん
17/04/13 18:34:37.22 2TLG8dmE.net
と、言うより>>796は思いっきり出鱈目ですわ
境界チェック云々はマルチCPUじゃなくてパイプラインで解決されるからプログラミング要らずだし
844:デフォルトの名無しさん
17/04/13 19:49:41.71 woBc/tdN.net
>>79
> メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
今時のメモリー(主記憶)のレイテンシーって10ns以下だと思うが10nsで1,000命令も実行できるCPU教えてくれ
845:デフォルトの名無しさん
17/04/13 20:53:44.12 FNNFGlTu.net
>>808
まぁ、その手の事を指摘したつもりだけれどそう読んではくれないみたいだね。
あと、最近のはパイプライン以外にも命令の並べ替えやら入っているからw
ホコポコ無意味に返信している内容は、多分自演なんだろうけど、そろそろやめたら。
こういうのはゲーム作ったことあるような人間なら常識の範囲なので、考えるまでもないような話の類。
俺以外のヤツもたくさん指摘しているが、それだけ普通に知っている人は多い話なのだよ。
846:デフォルトの名無しさん
17/04/13 21:04:00.56 1tPgrneG.net
いつの時代のどのハードのゲームだよ
アセンブラのバイトコード気にするとか20年前の話だろ
いっぽかたが計算してる間に他のCPUで書き込みするのは
同時にメモリに書き込もうとして競合するのを避けるためじゃないん
847:デフォルトの名無しさん
17/04/13 21:15:04.20 FNNFGlTu.net
しつこいねぇ
この手の話をゲーム屋が知ってるのは、何かの本で読んだとかではなくて
ソニーとか任天堂とかマイクロソフトとか今は逝ってしまっているセガとかハード屋が
セミナーで現在のハードの状況と止めた方が良いコードなんかのヒントとして教えてくれるからなんだよ。
その知識を持って、インテルの資料とかを読めば大体の事は分かるんよ。
もちろん素から勉強している人も居るだろうけどね。
今回の話はマシン語ではなく、最近のメモリー事情の話なんだよ。
連続アドレスの書き込みor読み出しには強いが、飛び飛びのアドレスにアクセスすると弱いダイナミックメモリー事情とかの話。
メモリフィルとか連続アドレスをアクセスしているのに、わざわざ壊すようなマルチスレッドはそういう点でも駄目なんだな。
決定的にはメモリーが遅いという点に尽きるが。
こんな風に駄目な理由に一つ以上のネタがあるんだよ、だからやるまでもないの。
848:デフォルトの名無しさん
17/04/13 21:29:31.37 1tPgrneG.net
ほんとに理解してるか?
パイプラインで境界チェックを解決って意味が分からん
どうやってんの
849:デフォルトの名無しさん
17/04/13 21:32:07.91 3oML3qao.net
そろそろ死ねよチンカス勢
これ以上口を聞くとスレを埋めるぞ
850:デフォルトの名無しさん
17/04/13 21:46:56.27 2TLG8dmE.net
>>813
パイプラインがRISC時代に進化して、レジスタが干渉しなければインストラクションを同時実行するようになったから
件の例だとメモリクリアと境界チェックを同時にヤるんだわ
だから一つのCPUは見かけ上メモリクリアを境界チェックの時間0で延々と実行する
コレを実行するのは一つのCPUだし、同時実行に人が介在すること
851:無いのでプログラマーは何もヤることはありません ホント>>796は酷い出鱈目ですわ
852:デフォルトの名無しさん
17/04/13 22:00:11.37 oixKZUzL.net
何を争ってるのかさっぱりわからんw
ただ昨日書いた>>776が間違ってることはよくわかった。
よく考えればこれ486の時代とかでも当たり前だw
すまんかった
853:デフォルトの名無しさん
17/04/13 22:00:58.20 FNNFGlTu.net
>>815
>境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
これがパイプラインやらディレイスロットに相当する話として描いたんだよ
計算時間隠ぺいはパイプラインだけじゃないからな、不正確になるだろ。
854:デフォルトの名無しさん
17/04/13 22:08:08.05 FNNFGlTu.net
ちなみに昨今のCPUは、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
この変換で色々な隠ぺい処理がされる。
パイプラインの直接関与は無い。
855:デフォルトの名無しさん
17/04/13 22:55:07.48 UJp3daw4.net
そういうのはC++使いにやらせとけ
856:デフォルトの名無しさん
17/04/13 23:32:52.23 ZueE7S//.net
CPUの種類もいっぱいあるし実装すらmonoとかあるんだから考えても無駄だよ
ふつーにヤレ
857:デフォルトの名無しさん
17/04/13 23:35:00.21 8HEXXOrW.net
.NET 4.7でTupleも標準で使えるようになったと思ったら
Windows Server 2016でまだ使えない
858:デフォルトの名無しさん
17/04/13 23:51:42.17 qn5HP47l.net
>>821
4.7がまだインストールできないってこと?
859:デフォルトの名無しさん
17/04/14 00:17:56.85 SWEjH6Xz.net
>>788
GCってガベージコレクタか?
メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。
860:デフォルトの名無しさん
17/04/14 07:19:22.25 KckXzUzz.net
>>822
4。7って自動で入るのか?
861:デフォルトの名無しさん
17/04/14 08:29:17.03 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:デフォルトの名無しさん
17/04/14 19:41:38.09 zACr9/Dt.net
4.7なんて何に使う気なんだ
863:デフォルトの名無しさん
17/04/14 19:57:13.78 vwaM1ek4.net
NuGetで取ってこなくても最新の機能が使えるとか
ValueTupleとかValueTaskとか
自分も試しにアップデートしてみたがまだ使えないみたいだね
もうちょっと纏めてからアップデートしてくれた方がいいんだけど
アップデートが細かすぎる
864:デフォルトの名無しさん
17/04/14 20:03:25.72 znF0F+kk.net
>>826
何に使うのかは知らんけどtupleを使いたいんだろ
865:デフォルトの名無しさん
17/04/14 20:10:48.82 pJlkTYEJ.net
知っていると思うけど、VSインストーラ立ち上げて4.7を追加インストールします
Windows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが
多分それも必要です
866:デフォルトの名無しさん
17/04/14 20:19:05.97 bLw6Whqv.net
Tuple<T>ってC#4.0からあったと思ったがそれじゃなく?
867:デフォルトの名無しさん
17/04/15 02:12:01.30 aGMB9daN.net
>>830
それとは違う
868:デフォルトの名無しさん
17/04/15 10:12:37.06 iCdjVYwG.net
>>818
ペンティアム2を昨今のCPUって言う人初めて見たw
てか、それらはx86のRISC化なんだが、
RISCっても
869:のはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ パイプラインの関与と言うか、要です
870:デフォルトの名無しさん
17/04/15 10:16:28.45 C33P0hB8.net
アセンブラできない奴はまともに最適化はできない。これだけ。
871:デフォルトの名無しさん
17/04/15 10:18:54.18 3qBkA9st.net
アセンブラとか老ガイジかな?
872:デフォルトの名無しさん
17/04/15 10:23:22.48 C33P0hB8.net
c#のデバッグでなんで機械語が表示できるようになってると思ってんだ? 低脳馬鹿デジタルネイティブさん >>834
873:デフォルトの名無しさん
17/04/15 10:35:26.60 QicJR8ZP.net
ValueTupleって最初はワクワクしたけど使い所あんましないな
どういう時に使うんだこれ
874:デフォルトの名無しさん
17/04/15 10:36:36.36 qt9qpnGQ.net
うわあ
875:デフォルトの名無しさん
17/04/15 10:43:55.01 iCdjVYwG.net
>>836
out 使って値を返しているやつを素直に書けるだろ
876:デフォルトの名無しさん
17/04/15 10:49:59.89 3WGNKYp+.net
>>832
まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。
言いたいことはわかるけどなw
877:デフォルトの名無しさん
17/04/15 10:50:24.08 iCdjVYwG.net
>>835
C#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換
更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな
せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・
878:デフォルトの名無しさん
17/04/15 10:57:05.83 iCdjVYwG.net
>>839
SIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ
で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を
複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす
まあ、それをどうやって実現しているのかさっぱり分からんけどな
879:あ
17/04/15 10:57:43.50 4VXj2s/u.net
>>840
どこが効率悪いかはわからんか?
あー、アンボクシングかかっとるわ、とか、
これのせいでストールしよるな、とか。
880:デフォルトの名無しさん
17/04/15 11:00:42.88 iCdjVYwG.net
>>842
デバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です
最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと
881:デフォルトの名無しさん
17/04/15 11:34:57.52 QicJR8ZP.net
>>838
outはそもそも使わないし
TryXxx系はValueTupleよりout varの方がスマート
882:あ
17/04/15 11:39:27.67 4VXj2s/u.net
>>843
コーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。
コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。
たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。
883:デフォルトの名無しさん
17/04/15 11:39:28.67 UPL5S+RA.net
そうそう
pythonでやってたことをc#でもできるようになったものって
実際使ってみてもいまいちなんだよな
めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない
884:デフォルトの名無しさん
17/04/15 11:44:51.81 eeh5f4V4.net
>>832
ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ
多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。
そろそろ死んでください。
885:デフォルトの名無しさん
17/04/15 11:49:23.70 iCdjVYwG.net
今回の拡張の中で
ref var a = hoge
886:(); と言う、参照戻り値ってのの使い方が難しいわ
887:デフォルトの名無しさん
17/04/15 11:51:55.21 iCdjVYwG.net
>>847
>、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
コレはPen2とかK6辺りから始まりました
20年前の技術ですね
888:デフォルトの名無しさん
17/04/15 11:52:06.28 mE+AhP/n.net
初心者です
C#はメモリ管理を気にしなくて良いと聞きました
本当でしょうか?
889:デフォルトの名無しさん
17/04/15 11:54:00.80 eeh5f4V4.net
たしかCore2以降は、VILW命令に変換していたと思った。
命令ストリームからVILW命令6スロット分に変換して
6命令ずつ同時実行する事で低クロックでも高速に動作とか。
x86系以外では、スーパースカラの採用も多いみたいだね。
890:デフォルトの名無しさん
17/04/15 11:55:39.30 P11oDSMM.net
本当だよ
2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ
891:デフォルトの名無しさん
17/04/15 12:00:32.47 3WGNKYp+.net
>>847
俺、死ぬんか?
892:デフォルトの名無しさん
17/04/15 13:12:21.09 7hkWD0i5.net
>>850
メモリ解放なんかは自動ってことになってるけど
メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による
893:デフォルトの名無しさん
17/04/15 13:18:16.99 GC6K0tB8.net
>>823
これ、まともに回答しようと思うとひどく大変なんだが……
823がGCの内部実装を把握しているうえでの指摘にも見えるし、
初心者の思いつきの質問にも見えるし……
初心者向け:
ヒープ確保したら0にクリアされてる
メモリを回収後、再利用されるまでに0クリアする必要があるってこと
把握してる人向け:
メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、
.NET Core のソースで確認しようと思ったけど
gc.cpp だけでも1.2MBあって挫折した
>>850
初心者のうちは気にしなくていいよ
894:デフォルトの名無しさん
17/04/15 13:43:04.38 5VFPMUgC.net
>>846
C#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ
可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい
そうすればC#7の仕様の意図するところは簡単に理解できる
895:デフォルトの名無しさん
17/04/15 14:29:19.96 56TRC7nM.net
みんな詳しすぎ
頭いいんだな
896:デフォルトの名無しさん
17/04/15 14:40:07.25 3WGNKYp+.net
>>842
>>843
思ったけど、あのVTuneってそんな機能あるんかな?
897:デフォルトの名無しさん
17/04/15 15:19:31.88 A0YDVHHt.net
昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
シートやらブックやら解放してから最後にExcel本体解放してってやってたけど
今は一発で解放できるんだよね?
メモリ管理とか気にしないけど、こういうのは気になる。
898:デフォルトの名無しさん
17/04/15 15:29:43.17 8JN0d/j3.net
所謂アンマネージリソースを閉じてないとC#であってもゾンビ化することはたまにある
899:デフォルトの名無しさん
17/04/15 15:39:12.33 eeh5f4V4.net
>>859
Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。
残ってしまう事を前提に組むしかない
900:デフォルトの名無しさん
17/04/15 15:41:12.30 aGMB9daN.net
>>861
しても残る時は残る、はし足りないだけでは。
901:デフォルトの名無しさん
17/04/15 15:43:39.01 eeh5f4V4.net
>>857
自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。
もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。
それ以外の人は普通だよ。
902:デフォルトの名無しさん
17/04/15 15:58:16.95 3WGNKYp+.net
ちなみに俺は違うからな
903:デフォルトの名無しさん
17/04/15 16:02:07.82 eeh5f4V4.net
自分が得意じゃないと思う領域は黙っておけ、そして誰か
904:詳しい人がレスするまで その質問を流すなキチガイ あと、自分の得意な領域に引き込もうと変な流れに作り替えるな。 掲示板が機能しなくなる どうせなら死ね とまあそんな所ですな
905:デフォルトの名無しさん
17/04/15 16:06:10.39 OxStzCoo.net
>>863
気づいてないみたいだけど、悪いけど君の態度も相当エキセントリックに見えるよww
少なくとも>>832は文脈的に妥当な反論をしているようにしか見えんけど、
「俺にたてつく奴はいつものキチガイ(って誰だよw)だ!!」って感じでかなり普通じゃない。
余計なお世話だろうけど、いい歳こいてるんだろうからもうちょっと自分を客観的かつ批判的に
見ることを覚えた方がいいんじゃないんだろうか。
906:デフォルトの名無しさん
17/04/15 16:07:40.04 lvAT8XK9.net
>>859
> 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
> 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
ちゃんと ReleaseComObject(comObject) 呼んでないだけだろ
なんで IDisposable にして Dispose で解放するようにしなかったのか謎
907:デフォルトの名無しさん
17/04/15 16:09:12.98 eeh5f4V4.net
駄目だな、このキチガイ・・・
はよ死ね
908:デフォルトの名無しさん
17/04/15 16:13:19.25 C33P0hB8.net
デストラクタの動作タイミングが制御できない時点で逆にいろいろ管理できなくなってトラブルの元になってる。
結局のところ欠陥言語なのだ。
909:デフォルトの名無しさん
17/04/15 16:16:13.49 OxStzCoo.net
>>867
根拠があるのかと言われれば正直ないけど、ぶっちゃけ全部のオブジェクトを
いちいちReleaseComObject呼ぶなんてやってられないし、やらなくてもそれで
「ゾンビ」が残ることはないようだから、必要ないんじゃないのかな。
そんなことよりプロパティが返すオブジェクトをメソッドチェーン的に使わない(面倒でもいちいち変数に
入れてから使う)とか、その手の基本が大事だね
910:デフォルトの名無しさん
17/04/15 16:18:04.02 eeh5f4V4.net
Excelのケースは多分デストラクタというより、Excelのスレッドモデルに問題があるんだと思う。
lock方式でもInvoke方式でもない、少々行き当たりばったりな排他制御をしてるようだ。
古いアプリなので今更改められないのだろうね。
911:デフォルトの名無しさん
17/04/15 16:31:33.32 OxStzCoo.net
エンゼルハートって映画あったな
探偵がロバートデニーロに殺人鬼を探すように依頼されるが、探していた
殺人鬼は探偵自身だったってオチ
「いつものキチガイ」も実は言ってる本人自(w
912:デフォルトの名無しさん
17/04/15 16:33:19.87 3WGNKYp+.net
はいはい、俺が悪かったってことで仲直り。
今後はこのスレ貢献に頑張ろう…でいいやん。
な
913:デフォルトの名無しさん
17/04/15 16:33:31.45 nXYdKgHp.net
ExcelCreatorが楽すぎて戻れない
914:デフォルトの名無しさん
17/04/15 16:36:28.32 eeh5f4V4.net
>>873
普通なら、それでOKなんだけどね
この人2000年頃にやってきて、際限なく荒らしまくって誰もいない状態にしやがったから。
たまーに戻って死んだかなとか見ているんだが、ご健在のようです。(はよ死ね
915:デフォルトの名無しさん
17/04/15 16:57:08.88 aGMB9daN.net
>>870
そんな基本は聞いたことが無いのだけど、
プロパティが返すオブジェクトをメソッドチェーン的に使うと、どういう問題があるの。
916:デフォルトの名無しさん
17/04/15 17:07:01.27 mW9XRjOW.net
Disposeされないオブジェクトが量産されてリソースリークするに決まってんだろ
一つプロパティにアクセスしたら結果を変数に入れて礼儀正しくDisposeする
これをすべてのメソッド呼び出しとプロパティ・インデクサーアクセスについて行う
917:デフォルトの名無しさん
17/04/15 17:09:24.07 nXYdKgHp.net
>>877
おもしろい冗談だな
918:デフォルトの名無しさん
17/04/15 17:16:22.23 UPL5S+RA.net
return a,b;で返したのを
こんな感じで受け取れれば楽なんだけどな
a,b=method(c);
919:デフォルトの名無しさん
17/04/15 17:31:49.05 OxStzCoo.net
>>876
ゾンビ
なんだかVBerチックなおまじないのように聞こえるけど
920:そうじゃない。 もっとも、どうしてそうする必要があるのか、詳しい理屈は忘れちゃったけどw 明示的に変数で参照されてないCOMオブジェクトは相互運用アセンブリが適切に破棄できないとかなんとか まあ、変数に入れなきゃReleaseComObjectを呼ぶこともできないよね
921:デフォルトの名無しさん
17/04/15 17:33:16.72 7hkWD0i5.net
excelはC++から使ってもゾンビるよ
922:デフォルトの名無しさん
17/04/15 17:38:17.93 A0YDVHHt.net
>>867
昔の話だよ。
923:デフォルトの名無しさん
17/04/15 17:41:04.42 aGMB9daN.net
>>880
結局ReleaseComObjectは必要なのね。
924:デフォルトの名無しさん
17/04/15 17:47:17.96 jssTx07C.net
>>859
昔のプログラムメンテする必要が有って、丁度それに出くわして同じ方法で対応したわ
結局そのロジック切り捨ててOpenXMLで読み書きしちゃったけど
925:デフォルトの名無しさん
17/04/15 17:54:59.95 OxStzCoo.net
>>883
いやいらんと思うよ
URLリンク(web-beta.archive.org)URLリンク(jeanne.wankuma.com)
↑によるとReleaseComObjectは「保険」らしい
オブジェクトをちゃんと変数につっこんでから使えは一応ソースあった。
「仕様」の一言で、どうしてそうしなきゃらなんのかの理屈は書いてないが
URLリンク(support.microsoft.com)
926:デフォルトの名無しさん
17/04/15 18:00:32.55 OxStzCoo.net
まあVB6みたいに参照カウント見てラッパーオブジェクトの破棄をやってるからってことなのかな
こま切れのレスで申し訳ない
927:デフォルトの名無しさん
17/04/15 18:14:19.64 eeh5f4V4.net
>>885
>ガベージ コレクションを実行して解放することができますが、こちらはあくまでも保険です
読んでみた限り、GCが保険でReleaseComObjectでやれという事に読めますね。
マイクロソフト公式も保証されるわけではないという感じですね。
実際、これはやってみたが上手くいかないケースはちょくちょく発生します。
次善策以上の対策は取れないと思われます。以前サポートに質問した時もそんな感じの回答でした。
928:デフォルトの名無しさん
17/04/15 18:33:54.48 OxStzCoo.net
>>887
あー確かにその通りだねw
適当なこと言ってごめん
929:デフォルトの名無しさん
17/04/15 22:36:26.65 tyUWSBTM.net
>>879
タプルに括弧が必要なのはやむを得ないかな。変数宣言の文法変えるわけにもいかないし。
930:デフォルトの名無しさん
17/04/15 22:56:40.40 lvAT8XK9.net
>>881
ちゃんと作ればゾンビったりしないよ
デストラクタで確実に解放できるからその点だけで言えば C# よりむしろ楽
>>885
> ↑によるとReleaseComObjectは「保険」らしい
それ、それページ書いた人がちゃんと理解してないだけ
そもそもGCはCOMなんて意識してないからCOMの解放なんてしないし
詳しくはここら辺を見て
URLリンク(blogs.msdn.microsoft.com)
931:デフォルトの名無しさん
17/04/15 23:54:44.22 X3IC3wwW.net
ググってもよくわからんのだけど
GetType()+typeof()で型判定と
isでやるのはどっちが速い?
932:デフォルトの名無しさん
17/04/16 00:20:09.43 SqhlDt4o.net
>>891
一時変数に入れたりしないで単純な GetType == typeof の形に限り前者
JITレベルで最適化がかかるみたい
933:デフォルトの名無しさん
17/04/16 01:16:43.35 dwmihMuF.net
>>855
GCのソースを見る気はしないけど0クリアはやってないと思う。
どう考えても時間の無駄。
変数を使用するタイミングで初期化が行われて、ものによってゼロクリアが行われるってだけじゃないんかね。
だから大量な領域をゼロクリアすることはそうそうないと思ってるんだけど。
例えばintの長い配列を確保したときとかくらい。
934:デフォルトの名無しさん
17/04/16 02:15:50.20 UDjczAnn.net
>>893
ヒープのオブジェクトは new した時点で内容が0クリアされてることは仕様
935:デフォルトの名無しさん
17/04/16 06:55:53.07 dwmihMuF.net
>>894
それはメモリ確保後に初期値で初期化されたってことででしょ。どっちにしろGCで大量にゼロクリアが必要にはならないよね。
936:デフォルトの名無しさん
17/04/16 08:00:22.29 uS8rD07o.net
どーせ、一番下でVirtualAlloc走ってんでしょ。そこで0クリアなんじゃね?
937:デフォルトの名無しさん
17/04/16 08:43:50.68 dr2cdwts.net
0クリアをどのタイミングでしているかは知らないが
早めの0クリアがセキュリティーに貢献するであろう事は予想できる。
今そうでなくても、そのうちに使用しなくなったタイミングで可能なら0クリアという形になったとしても驚かない。
938:デフォルトの名無しさん
17/04/16 08:49:20.74 dr2cdwts.net
ちなみに自分はガベコレが効率よく機能してくれるよう、使用しなくなったら0クリアはしている。
巨大なツリー構造を作って大量のヒープを使い始めると、参照を移動するだけでも結構なCPU時間を取られるようなので。
939:デフォルトの名無しさん
17/04/16 09:00:30.49 nOhMz2bP.net
破棄されるメモリへの(読まれない)書き込みを省略する最適化を行うコンパイラもあるし、
一律0クリアって方向にはならないだろうねぇ。
セキュリティ確保のためにわざわざ省略されない0クリアなんて機能を用意するくらいだし。
940:デフォルトの名無しさん
17/04/16 09:02:08.11 H6tmXYoH.net
0クリアとnull代入は別物だぞ
941:デフォルトの名無しさん
17/04/16 10:39:40.78 yhNZe4vR.net
>>897
> 0クリアをどのタイミングでしているかは知らないが
何のためにデバッガがついてると思ってんだ。
942:デフォルトの名無しさん
17/04/16 11:27:43.64 UDjczAnn.net
>>896
あー、それそれ
.NET Core の gc フォルダ内のコードに VirtualAlloc の RESET_MEM で
ゼロクリアしてる箇所がいくつかあった
たぶん、コンパクションした後に残ったゴミ領域を VirtualAlloc で
ゼロクリアしてると思うんだが、そこは探しきれなかった
>>895
初期値(0)で初期化されたってのはゼロクリアなんだが……
URLリンク(ufcpp.net)
お前の言う初期値は別のことを指してるのか?
> どっちにしろGCで大量にゼロクリアが必要にはならないよね。
メモリ確保時のゼロクリアってのはヒープ管理の行うこと
ヒープ管理はGCとは切り離せないの
だから .NET Core のゼロクリアのコードだって gc フォルダ内に配置されてるんだし
943:デフォルトの名無しさん
17/04/16 11:44:56.24 EJt90aDw.net
>>902
横からごめん。無知なので教えて。
・GC って概要として不要になったメモリを解放する機能って理解はあってる?
・メモリ確保時に初期化が実行されるとの理解はあってる?
・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある?
※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと
自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
944:デフォルトの名無しさん
17/04/16 12:08:09.86 uS8rD07o.net
>>903
君は正しい
945:デフォルトの名無しさん
17/04/16 12:11:25.63 SqhlDt4o.net
>>903
CLRの構造としては、GCはメモリ管理一般を担うコンポーネントである
だからメモリ確保も初期化するのもGC
GCってメモリの使用状況に応じてオブジェクトを動的に再配置したりとか色々裏で頑張ってるから、
単純に 確保/解放 と割り切れるもんじゃないんだよ
946:デフォルトの名無しさん
17/04/16 12:21:18.23 qeC+G70E.net
>>891
前者でもいいけどtypeof(シールクラス)にしないとダメだよ
947:デフォルトの名無しさん
17/04/16 13:21:57.61 UDjczAnn.net
>>903
>・GC って概要として不要になったメモリを解放する機能って理解はあってる?
はい
>・メモリ確保時に初期化が実行されるとの理解はあってる?
正確ではない
ヒープからオブジェクトを確保したら初期化されていることが決まっているだけで、
初期化�
948:フタイミングは決まってない 既に初期化済みの領域から割り当ててるはず >・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある? > ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと 誤りはない ただし片方だけではメモリのシステムとして機能しない >自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。 .NET の実装によるので 「GCで大量にゼロクリアが必要にはならない」 は誤り .NET Core の実装ではページングの機構を使って大量にゼロクリアしてる(と思う) オレオレCLR実装でGC時ではなく、オブジェクト確保時にゼロクリアする実装というのはあり得る
949:デフォルトの名無しさん
17/04/16 14:12:52.31 0ImhO/qF.net
>>903
> GC と言う言葉の定義に初期化が含まれるかと言うこと
含まれていないけど、実質同じ。
GCってプログラマの負担を減らす為の物なのに、
いちいちゼロ初期化必要だとコンセプトとしておかしいでしょ。
まともなGCならゼロクリアされている。CLRもそう。
仕様としては、
△ > ・メモリ確保時に初期化が実行されるとの理解はあってる?
○ ・メモリ確保時には初期化済み
であって、どのタイミングで初期化するかはGCの実装による。
同じ事はOSでも行われていて、以下ページのZeroed参照。
URLリンク(nyaruru.hatenablog.com)
950:デフォルトの名無しさん
17/04/16 15:02:23.81 79m5iU1q.net
なんかすごい重箱モードの議論だねw
いや批判はしてないですよ別に
951:デフォルトの名無しさん
17/04/16 18:44:26.20 dr2cdwts.net
粘着質な人が居ると困りますねw
952:デフォルトの名無しさん
17/04/16 18:59:23.11 I10lJTDS.net
>>892,906
そうかTHX.
isの方がなんとなく速そうだと思ってたが案外そうでもないんだな
953:903
17/04/16 20:38:49.89 EJt90aDw.net
>>904,905,907,908
教えてくれて、ありがとう。
自分も MSDN の文章を読んだりしてみました。
斜め読みだから読み落としてる可能性も高くそうしたらごめんなさい。
[一般的定義]
・GC は概要として不要になったメモリを解放する機能のこと
・一般的な挙動として、メモリ確保と GC は別物
[CLRの仕様]
・メモリの確保も解放も GC の機能の内
・確保されたメモリは初期化されている
[CLRの実装]
・GC 時にメモリを初期化してるっぽい
ふつう、挙動を考える際には仕様を元にすると思うから
「GC時(正確にはメモリの解放時)にはメモリの 0 クリアは期待しない/できない」と理解してよさそうな気がする。
>>895 の「GCで大量にゼロクリアが必要にはならない」が「GC時に 0 クリアしている訳ではない」との意味であれば
仕様としては正しいことから一般論としても正しい。
ただ、実際にはやってくれているけど、それは仕様に基づいているわけではないからいつ改変されるか分からないアテには出来ないもの、と理解しました。
自分もよくやるんですけどね。仕様にはないけど自分が考える安全のための後始末とか。
954:デフォルトの名無しさん
17/04/16 20:52:22.64 3ec5aaGF.net
勝手に0クリアしてもいいけどGCはそれがわからないから
またGCが0クリアするよ
つまり二度手間
高速化なんてのたまてってるけど馬鹿ばっか
955:デフォルトの名無しさん
17/04/16 20:53:23.50 3ec5aaGF.net
無能の馬鹿の議論は飽きたわ
どこか別でやってくれよ
個人のブログとか
956:デフォルトの名無しさん
17/04/16 20:55:58.52 dr2cdwts.net
正直議論に見えない、自演に見えてきた。
957:デフォルトの名無しさん
17/04/16 21:04:46.71 wSkKKBMW.net
>>912
もともとのガベコレの意味はざっくり言えば「確保/解放によって断片化したメモリのデフラグ」
だったはず
知らんけど
958:デフォルトの名無しさん
17/04/16 21:22:51.36 0ImhO/qF.net
>>912
GCは「アイドル時にやれ」というのは分かるよな?
実際はとりあえずこれを目指しているはず。
メモリ確保時にゼロ初期化するのはユーザ時間に直接影響する。
(メモリ確保のレイテンシが著しく増大する)
GC時に初期化するのはGC時間が長くなる。
CLRの場合は確かGC時にはユーザスレッドを凍結していたはずだから、
これもユーザに見えることになる。
だから、普通に考えて、
一旦GCした後、(ユーザスレッドと並行可能な)別スレッドでゼロ初期化だよ。
959:デフォルトの名無しさん
17/04/16 23:10:52.0
960:0 ID:rt4ZW9V3.net
961:デフォルトの名無しさん
17/04/17 21:40:45.89 3B2OvgTj.net
でも初期化するクセは付けた方がいいぞ
プログラマとして
そういう意味でゼロクリアされている事がわかっていても
明示的にやっておくのも間違いじゃない
962:デフォルトの名無しさん
17/04/17 21:53:33.58 DRWzf9HM.net
いいぞ
誰に向かって威張ってるのかね
そんな威張っていうような話か?w
963:デフォルトの名無しさん
17/04/17 21:59:35.59 FPOa41qy.net
一週間も馬鹿な話続けてる奴にそんな嫌み通じるかよ
お前も馬鹿か
964:デフォルトの名無しさん
17/04/17 22:28:28.26 0+0M+jw7.net
じゃぁ配列は、こう初期化すんの?
byte[] buff = (byte[])Enumerable.Empty<byte>();
965:デフォルトの名無しさん
17/04/17 22:37:56.61 sNToWnIL.net
自分のブログでヤレ
966:デフォルトの名無しさん
17/04/17 22:40:07.22 sNToWnIL.net
わかってないようだから書くけど
こいつがまず重度の馬鹿
>>919
967:デフォルトの名無しさん
17/04/17 23:18:50.28 pEHnUlca.net
924 はキチガイの類
968:デフォルトの名無しさん
17/04/17 23:22:01.64 pEHnUlca.net
これがキチガイの末路w
これこそが本物だ
URLリンク(www.int2.info)
969:デフォルトの名無しさん
17/04/17 23:38:40.81 YebzKHR/.net
ここまで基地外だけ
970:デフォルトの名無しさん
17/04/18 00:27:01.11 0Yq9p2Hl.net
>>926
Microsoft相手に訴訟すると
こういう目に会うのか
971:デフォルトの名無しさん
17/04/18 00:36:27.92 gic2i7xr.net
んな訳ねぇだろ、てかお前本人だなw
そんな予感はしてたんだ、文体似てるし60代臭していたし
Delphi板荒らしていたヤツとよく似てたし、お前Delphiやってたし
もうじき親の財産次るんだろ?もう終わりだろ、はよ死ね
972:デフォルトの名無しさん
17/04/18 01:34:33.30 4m6dsFPX.net
client sideのvalidationがめんどくさすぎるのだけどVMからvalidator.jsを生成するサービスないのか?
973:デフォルトの名無しさん
17/04/18 06:15:21.44 dwhcaFAX.net
それは頭悪いだろ
サーバーサイドでやってるバリデーションと同じことがしたいならAPI作ってajaxが筋
974:デフォルトの名無しさん
17/04/18 06:39:33.82 RUjuZHo6.net
そのAPIとそれを使ったクライアントコードの生成サービスないかってことでしょ
975:デフォルトの名無しさん
17/04/18 07:40:17.90 4m6dsFPX.net
>>931
不要な通信を避けるためにclient side validationするわけでしょ
そのために通信をしてたら意味ないじゃん
976:デフォルトの名無しさん
17/04/18 07:51:25.03 Su4pCCia.net
あるわけねえだろ夢見んな
977:デフォルトの名無しさん
17/04/18 18:30:31.09 dwhcaFAX.net
>>933
client side validationの目的は一般的には通信を避けることではなくフィードバックの即時化によるUXの改善でしょ
よほどレイテンシの大きい糞NWを想定してるとか、サーバーに頻繁にリクエストが来るのがキャパシティ的に許容できないとかでない限りは
ajaxによるバリデーションは十分有効
978:デフォルトの名無しさん
17/04/18 18:34:28.24 b4tf0yLR.net
クライアントにidとパスハッシュのリスト送信しておけばおk
979:デフォルトの名無しさん
17/04/18 19:24:13.68 T0vdTXyx.net
>>935
なるほど
でもその説明じゃうちのロートル達が納得しないよ
もっと素人が喜びそうな説明はできないの?
980:デフォルトの名無しさん
17/04/18 19:34:36.94 qpdySibv.net
死ね
981:デフォルトの名無しさん
17/04/20 14:46:51.02 ofUg/eB0.net
EntityFramework で System.Data.SQLite 使ってるんだけど、
SaveChanges() が遅すぎるので、
CQRS( URLリンク(msdn.microsoft.com)
982:mt788619 )をやってみようと思った クエリ用にデータベースファースト、コマンド用にコードファーストで DbContext を作ってみたんだけど、モデルファーストの DbContext を new すると コマンド用の POCO と競合して曖昧と言われる まだ試してないけど解決方法がなんか汚い ttp://entityframework.codeplex.com/workitem/483 クエリ用、コマンド用ともにコードファーストにするのが普通なんだろうか? SQLite はマイグレーションサポートしてないようなのでコードファーストはメジャーじゃない?
983:デフォルトの名無しさん
17/04/20 18:34:56.61 9NLTwIyk.net
>>939
DBからコードファーストじゃだめなん?
984:デフォルトの名無しさん
17/04/20 19:09:00.01 ofUg/eB0.net
>>940
そうね
データベース(モデル)ファーストにしてるのは、
ER図を見るために使ってるだけだからそれでもいいかぁ
クエリ用(Read)とコマンド用(Write)双方ともDBからコードファーストで作って
DB変更時には再度作り直す方法でやってみるかなー
(どこらへんがコードファースト? って使い方になっちゃうなw)
985:デフォルトの名無しさん
17/04/21 00:34:55.91 IVDQeFzJ.net
毎回迷うんだけど
VS2017ではどのデータベースを使うべき?
そしてEFはどのバージョンを使うことになって参考になるサイトはどこにあるんだ?
それそろ安定してほしいんだけど
986:デフォルトの名無しさん
17/04/21 01:26:41.50 72Ff37pO.net
>>942
MSDN: Introduction to Entity Framework
URLリンク(msdn.microsoft.com)(v=vs.113).aspx
上記ページは、なんか日本語表示にはできるけどインデックスやら、
ページのリンクが英語になってたりして、チグハグ
和書では、EFについて書かれた本がほとんどない
書いてあっても一章分でさらっと流す程度だし、
ネット上の情報だと EF を使うための VisualStudio の操作方法とか、
いくつかの落とし穴の回避方法がパラパラ載ってる程度なので、
英語の MSDN をブラウザの翻訳機能で読んだほうがいいと思う
EF Core (EF7として開発されてたらしい) ではクロスプラットフォームの
ための軽量化で一部の機能を削いでるらしい(モデルファーストとかはできなくなる)
EF6 は EF Core が出てからもしばらくはサポートされるので、
今入門するなら EF6 を使うのがいいと思う
(というか、必要でない限り移行はお勧めされていない)
987:デフォルトの名無しさん
17/04/21 06:35:38.36 h0UgT1Ml.net
EFはWeb系のノリで作られてるから安定することはないよ
988:デフォルトの名無しさん
17/04/21 07:48:39.88 XjCRa8hg.net
業務とデータベースに精通していて
全てを自由に弄れる立場にいて
時間をかけて生成されるデータ構造まで意識した精緻なモデル設計ができて
その案件の寿命までずっと面倒をみれるか同レベルの後継者を育てられる
そんな人がチームにいればモデルファーストは有りじゃないかな
そうでなければ使い捨てアプリぐらいにしか使えないよ
989:デフォルトの名無しさん
17/04/21 08:13:05.97 dQDWETdW.net
>Web系のノリ
どういうこと?
990:デフォルトの名無しさん
17/04/21 08:17:36.55 lbMf26rv.net
>>942
安定って具体的に何のことを言ってんの?とっくに枯れた技術だけど
991:デフォルトの名無しさん
17/04/21 09:12:06.55 LWRI+6r2.net
>>946
ヤマトのりかと
992:デフォルトの名無しさん
17/04/21 11:08:44.37 U4JkC8YI.net
EFとLinqのせいで生のSQL文が書けなくなっている。
993:デフォルトの名無しさん
17/04/21 11:45:09.91 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:デフォルトの名無しさん
17/04/21 11:56:05.07 8CN2PrPc.net
開発されてないのが枯れてるのか。そりゃ確かに枯れてるなww
996:デフォルトの名無しさん
17/04/21 12:40:19.25 dpyapAzz.net
>>946
あくまでもイメージだが品質とか安定性より開発速度とかリリースを優先するって感じ
>>947
腐ったまま枯れてるってことはいくらでもあるし
997:デフォルトの名無しさん
17/04/21 17:42:09.62 MpBIOwvX.net
そういえば前から疑問なんだけど、フォームのイベント伝搬ってどう組むべきなんだ?
状況としてはよくある波形ビューワーで、表示先頭位置と倍率が変えられて、
カーソルが2つあって、フィットボタンを押すと画面にフィットするもの。
(カーソル0が画面の左端、カーソル1が画面の右端になるように、
自動的に表示先頭位置と倍率が調整され、再描画される)
(A) 表示先頭位置の変更→画面再描画
(B) 倍率の変更→画面再描画
とした場合、
フィットボタンを押す→
表示先頭位置と倍率が自動的に変更される=普通は上記(A)または(B)に当たる
→自動的に再描画される
となるのだが、ほとんどのケースで2回描画されてしまう。
そこで今は、倍率変更側はフォーカスを確認して
(B') 倍率の変更→(フォーカスがある時のみ)→画面再描画
として1回描画にしているが、
これだとフィットボタンを押したとき、結果的に倍率のみの変更の場合は再描画されない
(同じ値を上書きしてもChangedが発火しない)ので、フィットボタンのイベントの最後に
if (!changed_start_pos) redraw();
を付けている。
ただしこれはリファクタ時に久々に見たら「はて?」と思ってしまった。
この場合って、どう組むべきなんだ?
ちなみにJavaScriptの場合は、プログラムによる変更の場合はイベントが発火しないので、
全てのイベントの最後に redraw(); が必要になるが、全部書けば全く問題ない。
フォームの場合はプログラムによる変更でもイベントが発火するので、この問題が起きる。
ただ、特にレアケースでもないし、一般的なうまいやり方があるとは思うのだけど。
上手く繋げられれば記述が少なくて済むからこの仕様なんだろうし。
998:デフォルトの名無しさん
17/04/21 17:42:43.14 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:デフォルトの名無しさん
17/04/21 18:12:04.32 FFGpioc0.net
>>953-954
そもそもコントロールのイベントで再描画ってのはちょっとw
表示先頭位置とか表示倍率とかの値はFormなりUseControlなり
独立したクラスなりのプロパティになってるはずで、それらのプロパティの変更痔に
再描画されるようにしないと
無駄な再描画を避ける方法だけど、一番いいのは余程重いのでなければ
気にしないことだと思うw
どうしてもこだわるなら、直接再描画するんじゃなくて
タイマーのイベントに再描画を紐づけしてタイマーをスタートさせるだけにするか、
Application.Idleイベントをうまく使うかするとか
1000:あ
17/04/21 18:18:11.06 KFYgHFHL.net
>>953
リドローが必要だとキューイングするかと。
どうせインプットのリフレッシュレートやら画面のリフレッシュレート越えてリフレッシュしても無駄なんだし、リフレッシュ時には再描画するんだし。
WindowsならWM_PAINTでやるとかが歴史的にいわゆる普通の方法では?
1001:デフォルトの名無しさん
17/04/21 18:23:10.98 YZVNImgq.net
>>950
EntityFrameworkとEntityFramework Coreを同一視してるおバカさん
1002:デフォルトの名無しさん
17/04/21 18:35:37.53 RSu3z+zM.net
フォームのように、SuspendLayout, ResumeLayoutみたいな設計もあるけどね
1003:デフォルトの名無しさん
17/04/21 18:51:51.53 xzjZrHPt.net
イベント毎にRedraw要求を行うのではなく、
イベント毎にRedrawイベントをどこかのキューにぶち込んで、タイマーや別スレッドで監視し、
描画時に複数のRedrawイベントがあれば最新の物を一度で済ませるようにすればいい。
1004:デフォルトの名無しさん
17/04/21 18:55:13.11 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:デフォルトの名無しさん
17/04/21 18:57:50.94 MpBIOwvX.net
>>959
サンクス。まあみんな意見は同じか。
他に何か、「プログラムによる変更であってもイベントが発火する」という、
フォームの仕様を上手く使った方法はないかねえ?
1007:デフォルトの名無しさん
17/04/21 19:08:46.15 xzjZrHPt.net
>>961
>>958みたいな感じじゃないか。
WindowsのListViewとかも、大量のデータ挿入を想定してBeginUpdate/EndUpdateと言った手段を用意しているし、一般的な手法かと。
1008:デフォルトの名無しさん
17/04/21 19:19:20.39 72Ff37pO.net
>>957
違いを比較しているURL貼ってるのにレスを読みもしないで小馬鹿にする馬鹿
>>953
瑣末なことで悪いんだけど、どうしても気持ちがざわつくので指摘する
「リファクタする」は日本語としてあまり使われていない
refactor の訳としては「リファクタリングする」が使われている印象
どう間違っているのかはうまく説明できん
refactoring は造語で、それを元に refactor という動詞が造語として作られている
一般的な動詞ではないので注意
1009:デフォルトの名無しさん
17/04/21 19:50:01.08 MpBIOwvX.net
>>962
BeginUpdate/EndUpdateはいいとして、
SuspendLayout, ResumeLayoutは反応しなくないか?
(というか>>958は俺宛ではなくEFの件なのか?と思っていた)
俺の理解ではSuspendLayoutはレイアウト時、つまり、Control.AddRangeを止めるもので、
Graphics.DrawLinesとかを止めるものではないと思っているのだが。
>>963
了解。
1010:デフォルトの名無しさん
17/04/21 19:56:01.47 FFGpioc0.net
>>960
コントロールのイベント使うな、っていうのは無駄な再描画対策じゃなくて設計論ね
そういう設計だと、例えばプログラムで倍率を変更しても再描画されないよね。
まあ余計なお世話だよねw
Application.Idleは例えばこうやって使う
bool DrawOnIdle {get; set;}
void Application_Idle(object sender, EventArgs e}
{
if (DrawOnIdle) redraw();
DrawOnIdle = false;
}
1011:デフォルトの名無しさん
17/04/21 20:10:34.38 Cei54Lla.net
VS2017でどのデータベースとEFを使うべきか質問したものです
レスありがとう
完全に浦島太郎状態でした
こんなことになってるとは思っても見ませんでした
.net.core の方の知識もなくてググってみたらマニュフェストらしき設定ファイルが
xmlからjsonになってるんですね...
1012:デフォルトの名無しさん
17/04/21 20:16:45.24 TbfEGS8v.net
MSに関わると2,3年であっという間に浦島になるからな