ふらっと C#,C♯,C#(初心者用) Part141

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2317-qMUn)
垢版 |
2018/12/15(土) 11:07:07.89ID:0aSEF/I+0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/01/21(月) 16:35:43.35ID:trZhU3Ina
Labelを貼って、そのTextを空白にしたらデザイン画面でクリックできなくなってしまったのですが
どうやって選択状態にしたらいいのでしょうか
2019/01/21(月) 17:01:29.53ID:NM3vIbDMa
>>382
デザイナで以下のどれかの操作をする
(a) [ctrl] + z
(b) マウスでそのラベルがあったあたりをドラッグ
(c) [ctrl] + [alt] + t
(d) プロパティウィンドウの上部のドロップダウンで選択
2019/01/21(月) 17:54:05.53ID:trZhU3Ina
>>383
ありがとうございます
C案でやらせていただきました
2019/01/21(月) 18:26:05.83ID:1DQQx7qk0
PM的にはVBのが簡単で人員の確保が容易との理由ですが、イベントリスナにクラスレスで全処理書くベテランエンジニアの意向を汲んでるんだと思います

自分はサンプルの多さとC系で無い記述に不慣れという理由でC#を希望しましたが、ベテランに寄せられるんだろうなと諦めムードです

ちなみにベテランのスマートUIは芸術の域で若輩の自分には追従不可です

コード量も多く見積りが高く出来るとPMからも信頼されています
2019/01/21(月) 18:37:52.16ID:PrrgsGFM0
今2019年やぞ……。
生産性を上げる技術を入れる気が無い、そのPMにはC#のメリットはメリットに見えないだろうなぁ。
ベテランは古い技術と心中できるけども……
2019/01/21(月) 19:12:08.60ID:R3pW/ayE0
ループ内で一時変数宣言したらコストが増えるってのを知って
新しいブロック作って変数宣言してみたけどなんか見た目がすっきりしない
ループ内の変数宣言の新機能とかないのかな
2019/01/21(月) 19:14:47.05ID:FhYMYDcaa
>>386
生産性って言葉は立場や状況によって指してるものが変わるんやで
2019/01/21(月) 19:26:17.46ID:tYy/rBPTM
ソフトウェア作れると言うとソフト作って売って大儲けできるんじゃないかと
よく言われる

世間はそういう感じで見てる
2019/01/21(月) 19:27:19.80ID:0j7Aeluod
権力持ってる人がVB推しなら決定でしょ
できることはほぼ同じだし諦めな
2019/01/21(月) 19:36:49.44ID:lF845d4L0
>>387
コストが増えるってローカル変数が増える事?
初期化するスタックの増加やレジスタに乗りづらくなるとか?
さほど気にするもんでも…とりあえずAnyCPUで64bit優先オヌヌヌ
2019/01/21(月) 19:59:33.83ID:2/OM9doDa
>>386
意識高めても虚しいだけだよ
10年この仕事して啓蒙もしたけどなにも変わらなかった
9割5分の人材はそもそもシステム開発に興味ないから啓蒙しても無駄
転職するか割り切るかどちらかしかない
環境を変えようと思ったら負け
2019/01/22(火) 05:26:41.64ID:1xYsQegz0
正規表現パズルやってたのか・・・参加したかった
2019/01/22(火) 12:26:50.15ID:vFo5wc3/a
パズル言うほど難しい問題出てない気が...
どっちかっていうと質問自体の方がハズ(

正規表現便利だけど他人の書いたの読むのキツいよねw
しょっちゅう使ってれば違うのかもしれんが
2019/01/22(火) 15:21:12.16ID:pHhZylOrM
ややこい正規表現の場合
コメントで想定okパターンくらいは書くようにしてる
2019/01/22(火) 15:22:14.22ID:pHhZylOrM
あとテストコード入れとく場合も
2019/01/22(火) 17:14:18.11ID:4H8Bkb5P0
フォームアプリケーションにtrackbarを2つ用意して、
pcに接続されたモノラルマイクの音量(感度?)とパンニングをそれぞれ操作したいんですが
適当な検索ワードがわからずにたどり着けませんでした
できるだけシンプルに、どう書けば可能でしょうか?
2019/01/22(火) 17:49:02.10ID:vFo5wc3/a
ググったらこんなのが出てきた
読んでないけどなんかすごい面倒くさそう...
https://web.archive.org/web/20060712054058/http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html
2019/01/22(火) 18:36:37.95ID:NN+MTXVc0
質問です
ファイルの移動を扱う自作メソッドの結果を扱うクラス(Aとする)を作りました
このクラスに
class A{
...
public static A Output_IsCanceled(string 元のファイル) {
//引数を受けて動作をキャンセルしたことを示す結果を返す。
}
}

のように典型的な結果を出力するメソッドを追加したのですが、
このAを継承したクラスBにこのメソッドもこのメソッドを上書きしたメソッドも実装させたくありません。
なにかスマートな解決方法はあるでしょうか。

私には大人しく別のクラスに移すくらいしか思いつかないのですが。
2019/01/22(火) 18:49:41.50ID:P5rqpQdz0
>>399
そのメソッドを外したクラスを作ってクラスAとクラスBに継承させる
2019/01/22(火) 18:49:53.30ID:lqDMGVH00
親作って別々に継承
2019/01/22(火) 19:00:35.92ID:NN+MTXVc0
なるほど 言われてみれば簡単でしたね
ありがとうございます
403デフォルトの名無しさん (ワッチョイ 21e5-zveU)
垢版 |
2019/01/22(火) 22:12:29.98ID:ttdon+q40
object型の変数に入れた匿名クラスのプロパティを取得する方法で
詰まっております。

object hoge = new { fuga = 1 };
int a = hoge.fuga ←こういうイメージで取得したかったのですが。。。

ご教授よろしくお願いいたします。
2019/01/22(火) 22:19:56.81ID:bu0N7pF20
>>403
なんでそんなことしたいの?
405デフォルトの名無しさん (ワッチョイ 21e5-zveU)
垢版 |
2019/01/22(火) 22:25:46.51ID:ttdon+q40
>>404
Dapperの引数がobject型だったのですが、Dapperに渡す前の
匿名クラスのプロパティの値を元に一つ条件式を作りたかったんです
object型の匿名クラスからどうやって値を取るのか興味もありまして
2019/01/22(火) 22:26:33.77ID:qwoCd5dDa
ほら宇宙刑事ギャバンの必殺技みたいなあれだよ
2019/01/22(火) 22:39:23.63ID:g3EQ5hiYa
>>405
無理
渡す先の引数がobject型だからって変数の型をそれに合わせる必要はないだろ
var使えよ
2019/01/22(火) 22:41:18.57ID:0fUOX4Xc0
>>403
リフレクションを使った力業
var a = ( int )hoge.GetType().GetProperty( "fuga" ).GetValue( hoge );
2019/01/22(火) 22:45:23.28ID:UB+BgHs40
>>403
int a = ((dynamic)hoge).fuga;
てしたら取れた。なおインテリセンスはきかない。
410デフォルトの名無しさん (ワッチョイ 512d-qnWR)
垢版 |
2019/01/22(火) 22:47:54.29ID:N3agGC610
>>409
これは全く頭になかったわ
411デフォルトの名無しさん (ワッチョイ 21e5-zveU)
垢版 |
2019/01/22(火) 23:01:01.54ID:ttdon+q40
>>409
値が取れました。ありがとうございます。
結構トリッキーになるみたいなので
多用は避けた方が無難かと学びました

しかし、Dappreはさらにプロパティ自体も自前で取得するので
手練れの外人は違うなと
2019/01/22(火) 23:21:33.35ID:0fUOX4Xc0
>>411
Type.GetProperties()でプロパティの一覧が取得出来るよ。
foreach ( var propertyInfo in hoge.GetType().GetProperties() )
{
var value = propertyInfo.GetValue( hoge );
Debug.WriteLine( $"{propertyInfo.Name}={value}" );
}
413デフォルトの名無しさん (ワッチョイ 21e5-zveU)
垢版 |
2019/01/22(火) 23:32:00.27ID:ttdon+q40
>>412
なるほどそうやるのですね
知らないことが多いので参考になります
2019/01/23(水) 00:01:29.03ID:n+ibBTmv0
Androidの実機持って無いんだけど、もし、完成したC#のアプリが有った場合、
DownLoad から、実行まではどうすればいい?
.Net のインストールから始まるの?
C#アプリはGooglePly からDLするの? それとも自前のWebサイト?
415デフォルトの名無しさん (ワッチョイ f1da-qnWR)
垢版 |
2019/01/23(水) 03:41:42.64ID:g/jeFpr60
WPFって、最初のGUIデザインはデザイナで出来ますが、ユーザーの入力に応じてGUIを変化させたい場合
(例えば、テキストボックスに3と入力したらラベルを3つ追加するとかの場合)
xamlではなくC#のソースコードでコントロール追加せざるを得ないのでしょうか?
2019/01/23(水) 04:35:34.67ID:OkP0wizv0
>>411
匿名クラス使わなきゃいいやん
2019/01/23(水) 07:17:48.93ID:bZ1m5CuBM
>>415
wpf xaml 条件分岐
でググレ
2019/01/23(水) 08:30:39.69ID:YOQQL4jNa
>>415
よく考えよう
その例の場合、お前はコントロールを追加したいんじゃなくて表示対象の文字列を増やしたいんだろ?
C#からは「表示対象の文字列を追加する」操作だけをして、コントロールを追加するのはバインディングに任せるのがWPFの思想だ
>>417は間違いで、ググるべきキーワードは DataTemplate
コレクションに文字列を追加するだけで勝手にコントロールが追加されるようになる
2019/01/23(水) 08:36:51.99ID:YOQQL4jNa
ちなみにWebなら上記のようなまどろっこしいことをしなくてもRazorテンプレートの中に直接forループを記述するだけだ
WPFの難解なバインディングは概念ばかりが先行してユーザーを置き去りにする典型的なMSの失敗作
2019/01/23(水) 09:43:36.18ID:qi0lTRAT0
上の人はワケワカラン書き方しているが、wpfではListBoxのItemは自由にかけるから、そこにLabelを配置して追加削除をやるってのが定番ね
2019/01/23(水) 09:47:33.21ID:NxchbiGLM
>>420
間違い
Itemsには文字列のコレクションをバインドする
でItemsTemplateでDataTemplateを適用させてLabelを生成させる
2019/01/23(水) 11:55:57.45ID:tAarVqiS0
WPF は知らないけど、一般的に、JavaScript の状態管理なら、

Vue.js, Nuxt.js など、状態管理用のフレームワークを使う
2019/01/23(水) 12:40:46.32ID:x96ZzLYOr
ここは今からjavascriptのスレになりました
2019/01/23(水) 14:43:06.09ID:PhLCwjBwd
>>422
ウゼーーーー
2019/01/23(水) 17:42:05.37ID:yPNynzM60
最近、業務システムはデータベースとデータ操作言語が8割でC#はさほど重要じゃないんじゃ。。。

と疑うようになってきました

C#が主役の開発って、ゲームくらいですかね
2019/01/23(水) 17:50:21.87ID:qdiHHHQi0
>>425
それも統計に嘘がある可能性あり。以下、各社各様、自分に都合の良いことを行っている:

一般人:「Androidのアプリの大部分は Java である」
Unity:「百万種類以上あるゲームアプリの半数が Unity(C#)製である」
Adobe:「Flash製ゲームが、100万種類を超えた。」
日本人:「日本の歴代で一番売れたゲームは、Final Fantasy xx で、700万本(売り上げにして500億円程度)」
外人:「MineCraft というゲームの売り上げが一兆円越えた。」
2019/01/23(水) 19:31:40.08ID:qdiHHHQi0
誤: 外人:「MineCraft というゲームの売り上げが一兆円越えた。」
正: 外人:「MineCraft というゲームの売り上げ本数が一億本越えた。」

Flash に関しては、「one million games」みたいな言葉を使って、
Adobe が「自慢」していたんだそうだ。
2019/01/23(水) 20:40:29.23ID:2LIdCPNFa
>>425
ミクロサービス開発するとデータベース殆ど触らなくなる
EF便利
429デフォルトの名無しさん (ワッチョイ 2961-qnWR)
垢版 |
2019/01/23(水) 21:24:52.01ID:xzA+L1aD0
SQL手書き最高ひゃっはp
2019/01/23(水) 22:51:20.49ID:xSBZbPpe0
C#のデバッグ画面の診断ツールについて質問です

メモリ使用量のプロファイルはデフォルトで無効だと思うんですが、いつの間にかクリックしてしまって
有効になったまま無効に戻せません

VCの場合はクリックすると元に戻す出来る場所があるのですが

レジストリをいじらないと駄目なんでしょうか?
2019/01/24(木) 18:07:50.56ID:+k418LkV0
とりあえずVisual Studio Community 2017だと
診断ツールウィンドウの左上の歯車クリックで出るドロップダウンの
メモリ使用量のチェック外したら次のデバッグから消える
つかデフォルト有効じゃなかったっけ オンにした記憶ないし
432デフォルトの名無しさん (ワッチョイ e12d-L3L3)
垢版 |
2019/01/24(木) 22:08:23.88ID:nbtsb27b0
C#の話じゃないのかもわかんないけど、ちょくちょく出てくる「コンテキスト」ってのが何者なのか未だに理解できん
プログラムの単位で!?処理の中断・継続等を担ってる!?!?とかなんとか説明されてるけど意味がわからん
こいつは一体どういうもんなんじゃい?
2019/01/24(木) 22:17:59.01ID:Io4qrCW00
>>432
何年もC#使っているけど「コンテキストメニュー」しかわからん
またJavaの話じゃないだろうな
434デフォルトの名無しさん (ワッチョイ e12d-L3L3)
垢版 |
2019/01/24(木) 22:23:04.95ID:nbtsb27b0
>>433
ASP.NETでもEFでもXamarinでのモバイル開発でも、何しててもコンテキストが出て来まくるじゃない
2019/01/24(木) 22:34:05.54ID:KQvEosKo0
>>432
「文脈」という意味で、例えば、Graphic の Context の場合なら、
・現在の foreground color
・現在の background color
・現在の font
・「カレント座標」 (MoveTo() などで設定する LintTo() の開始座標)
・現在の Clipping 領域。
・現在の 原点の位置。

などを記録しているオブジェクトのようなこと。だから、もし、同じ
Window に対して 2つの Graphic Context を持てば、それぞれで別々の
カレント座標や、foreground color、Clipping Region を持つことが
できて、瞬時に切り替えたりできる。これが、Win32 の Device Context
に相当する。

---------------------------------------
CPU の Cotext の場合、IA32BIT の場合なら、
汎用レジスタ: EAX, EBX, ECX, EDX, ESI, EDI、EBP
命令ポインタ: EIP
スタックポインタ: ESP
フラグ: EFALGS
セグメントレジスタ: CS, DS, ES, FS, GS
浮動小数点レジスタ: ST0〜ST7

などが該当する。この Context を細かく時間を区切って切り替えることで、
MultiTask が実現できる。MultiCore CPU の場合は、それぞれの Core が
別々の Context を同時に持っていることになる。
2019/01/24(木) 22:36:47.07ID:/05KE7l40
>>435
ただし、JS の canvas の context は、1つの canvas に対しては、1つしか
持つことが出来ないとされており、
var ctx1 = canvas.getContext("2D");
var ctx2 = canvas.getContext("2D");
のようにしても、ctx1 と ctx2 は同じ値が返ってくることになっているらしい。
2019/01/24(木) 22:38:30.97ID:/05KE7l40
>>435
誤:CPU の Cotext の場合、IA32BIT の場合なら、
正:CPU の Context の場合、IA32 の場合なら、
438デフォルトの名無しさん (ワッチョイ e12d-L3L3)
垢版 |
2019/01/24(木) 23:11:19.24ID:nbtsb27b0
ふえるわけわかめ
2019/01/24(木) 23:34:17.52ID:9ks/14Qta
>>432
コンテキストの意味はコンテキストに依存するのでまずはどんなコンテキストで話してるのかはっきりしてくれ
2019/01/24(木) 23:41:41.55ID:ykheMFGu0
Xamarinって言ってるからAndroidのContextクラスもありそう
2019/01/25(金) 06:33:11.37ID:58XK3b4v0
>>438
紙に絵を書く場合に、色んな筆に予め色を載せておいて、必要なときにすぐに
目的の筆を選べるようにしておくと便利。その筆が context。
これだけだと単なる「brush」に過ぎないという突っ込みも有り得る。
実際のcontextは筆だけでなく、場所まで覚えてくれていたりする。
2019/01/25(金) 08:19:04.26ID:VVNAHEZ90
DCの話し?
2019/01/25(金) 08:57:13.43ID:58XK3b4v0
>>442
まあ、そうなんだけど、プログラミングにおける「context」というのは、
HDC と大体似たようなニュアンスを持ってると思う。
2019/01/25(金) 09:01:53.98ID:58XK3b4v0
日本語で、「この文脈では」「文脈をわきまえて」というものがあるけど、
直前に直線の描画を終えたばかりの「最後の座標」を覚える、っていうのが
それに近い。最後に使った色を今後も使う、最後に使った座標から、
また、直線を描き始める・・・。

お葬式では暗い顔して暗い服を着る、結婚式では明るい顔する・・・。
悪いニュースは暗い顔で読み、良いニュースは楽しそうに読む・・・。
それが文脈、context。
2019/01/25(金) 09:13:33.36ID:58XK3b4v0
それはそうと、.Netで書かれてるらしい MasterSeeker.exe と HNXgrep.exe
がWin7で劇遅になった。特に起動。XPではとても快適だったのに。
起動速度が多分、3〜5倍くらいになった気がする。

Win32/MFCで書かれたアプリでは経験したことの無い現象だと思う。
2019/01/25(金) 12:14:00.12ID:qfUC5qIOa
>>432
そんなこと考えても時間の無駄。
contextの意味もcontext依存だから。
その文脈でどういう意味で使われてるか読み取るしかない。
英語ってそういう言葉でしょ?

コンピュータプログラムのcode、暗号のcode、符号のcode、
これらから還元してcodeが何を意味してるのか考えても意味ないのと同じ
2019/01/25(金) 12:55:33.13ID:YHYKY/Dsd
fixtureもピンとこなかった
2019/01/25(金) 14:04:22.53ID:HDgzt9Ph0
管理者権限を必要としないで動作するソフトを作成しました、。
仮にバグがあったとして、そのバグを突かれて攻撃された場合に権限昇格等の事態は発生しますか?
449デフォルトの名無しさん (ワッチョイ e9d4-h/iE)
垢版 |
2019/01/25(金) 14:31:21.79ID:NjeEwFLO0
アプリケーション1とアプリケーション2の間でメッセージをやり取りする必要が出てきたので、SendMessageを使ってもう一方のテキストボックスに
メッセージを送り、TextChangedのイベントで受け取りを判断するようにしました。
ところが、アプリケーション1→2は成功するのに、2→1はうまく動作してくれません
(テキストボックスに送られたメッセージは表示されますが、テキストボックスがChangeしたとは判断されていないようです)。

原因がわかる方いらっしゃったら教えてください。
2019/01/25(金) 16:06:37.52ID:ihVRaCqt0
formにフォーカスしたときにスペースキーを押すとkeydownで拾って処理ということをやってるけど
スペースを押すタイミングでform内のチェックボックスがチェックされたり消したりするけど止めることは出来ますか?
ヒントを教えてください。
2019/01/25(金) 16:24:22.19ID:VVNAHEZ90
メッセージ捨てている?
2019/01/25(金) 16:35:10.05ID:cY+a6SZrM
>>448
所詮ローカルアプリだろ?
そんなもんにセキュリティの考慮なんぞ要らん
正当なユーザーに悪意があれば自分のPCの権限制御なんぞどうとでもなるし、
権限のない第三者が悪戯できない程度には今のWindowsのセキュリティは堅固だ
2019/01/25(金) 19:10:00.05ID:+fHR2Vfoa
>>449
MQ使っちゃいなよ
2019/01/25(金) 20:12:53.90ID:GQtzdg+pM
>>452
ClickOnce…一般ユーザーがインストール…悪意があったら…

うっ…頭が
2019/01/25(金) 20:21:06.45ID:9dAxHT9C0
ClickOnceはホリエモンが作ったらしいで
2019/01/25(金) 21:40:49.02ID:lgKiVxcFr
ホリエモンは天才だからな
2019/01/25(金) 21:50:17.27ID:VVNAHEZ90
Microsoftで仕事していたの?
2019/01/25(金) 22:02:24.78ID:RIyzEPA40
>>450
・KeyDown用のコントロールを設定しForm全体でキーを受けるのをやめる
・別のコントロールに常にフォーカスが当たるようにする
 具体的にはクリックイベントやForm.Shownのイベントメソッドを全部作ってControl.Select()かControl.Focus()を入れる
・Formからチェックボックスを無くす
下に行くほど下策。他にもあるだろうけど他の人に任せる
2019/01/25(金) 22:36:20.38ID:0+JzU8ara
>>450
基本的にはそれあなたの仕様そのものがバグってる。
WindowsのUIのお約束に反するようなUIを作ったらあかん。
どうしてもならSetStyleを呼んでCheckBoxが入力フォーカスを持たないようにするのが筋だと思う。
2019/01/26(土) 09:41:45.11ID:0YlzP7hG0
>>458 >>459
フォーカスを何とかすることを考えます。とても為になりました。ありがとうございました。
2019/01/28(月) 16:07:38.67ID:4O8CfcWu0
>>449
こういう名前付きパイプとかいうのは使えないの?
https://docs.microsoft.com/ja-jp/dotnet/standard/io/how-to-use-named-pipes-for-network-interprocess-communication
462デフォルトの名無しさん (ワイーワ2 FF8a-L3L3)
垢版 |
2019/01/28(月) 16:43:45.23ID:ji//xT0NF
TCPsocketとか使う
463デフォルトの名無しさん (ワッチョイ 5902-beQY)
垢版 |
2019/01/29(火) 18:28:09.44ID:lSFWGay90
質問です
100msとかの短い間隔で繰り返す場合、
Systems.Timers.Timerを使って処理を繰り返すのと
while中にSleepかTask.Delayで間隔をとって繰り返すのとでは
どっちが処理がはやくて負荷が少ないですか?

またそれぞれのメリット・デメリットがあれば教えて欲しいです
2019/01/29(火) 18:32:52.89ID:KZd0CVbOa
回答待つ間にやってみたらいい
2019/01/29(火) 18:47:23.89ID:8rAEnTT80
>>463
Sleep() 自体はそんなに積極的に使うべきものではない。ただし、
「逐次処理」で書いたほうが書きやすいような場合に使うと便利
な場合がある。例えば、単なる繰り返しではない、以下のように順にコードを
実行していくような場合:
(処理1)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理2)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理3)
・・・

ここで、処理1、処理2・・・の内容がほとんど同じような場合は、Timer を
使うべきだが全く違うようなものが10個も並ぶような場合だったら、Sleep()
を使うと楽。

SetEvent() などの同期オブジェクトを待つ WaitForSingleObject() などがサポート
されてない環境において、何かのフラグが立つのをポーリングして待たざるを得ない
ような時に、間に何も「はさまない」でループするとCPUがフルパワー状態で回って
しまって電気の無駄使いになるのが、Sleep() を「はさむ」と、Sleep()に指定する
待ち時間がたとえ短時間であっても、Sleep() の中で待ってる間は CPU が HLT 状態
になるので、電力消費を劇的に抑えることが出来る。
WaitForSingleObject() などが存在する環境では、Sleep() は余り使わないで良い。
2019/01/29(火) 18:47:44.92ID:aKVTslCz0
>>463
役割が全部違う
Sleep
指定時間の間は同じスレッドでのGUI等の入力が停止する
Sleep/Task.Delay
(実行後に)確実に指定した時間が停止する
Timer
指定した間隔で実行される
2019/01/29(火) 18:59:35.28ID:8rAEnTT80
【参考】
Sleep() の意味は、待つときに、HLT 命令を使うこと。HLT 命令は、特権命令なので
ユーザーランド(一般アプリ)のプロセスでは実行できないため、OSのAPIで実行して
貰うしかない。なお、マルチタスクOSで、HLT 命令を実行すると、他のプロセスに実行が
移ることが多い。

多くのアーキテクチャに置いて、HLT 命令は、「busy wait」で待つよりも、
劇的に電力消費と熱の発生を抑えることが出来る:

https://en.wikipedia.org/wiki/HLT_(x86_instruction)

Almost every modern processor instruction set includes an instruction or
sleep mode which halts the processor until more work needs to be done.
In interrupt-driven processors, this instruction halts the CPU until an
external interrupt is received. On most architectures, executing such
an instruction allows the processor to significantly reduce its power
usage and heat output, which is why it is commonly used instead of
busy waiting for sleeping and idling.
2019/01/29(火) 19:19:24.76ID:BTNuwc+5a
>>463
どっちにしろそんな違いがプログラムのパフォーマンスに影響なんかしないw
そもそも可読性よりパフォーマンスを優先する時代じゃない。
つまりより可読的な方法を選択すべき。

一定間隔で処理を繰り返すなら普通はタイマーを使った方が可読的でしょう、
繰り返し終了後に別の処理を継続させたい、みたいな事情があればあえてループ(つまりSleep)を
選択する場合もあるかもしれない
469デフォルトの名無しさん (ワッチョイ 5902-beQY)
垢版 |
2019/01/29(火) 20:17:02.92ID:lSFWGay90
>>465-468
みなさまありがとうございます。
特にSleepの解説は勉強になりました。

パフォーマンスも特に影響無いようで、
一定間隔で処理するのでTimerを利用することにします。
2019/01/29(火) 21:31:43.87ID:ftdCQ0WJa
this.Close()でアプリを終了させた時、
デバッグモードだとProgram.csの方でエラーが表示されますがこれは気にしなくていいエラーでしょうか?
2019/01/29(火) 22:05:21.74ID:JPJ1HyJa0
気にしなはれ
2019/01/30(水) 01:49:16.67ID:DZ6eQREq0
WinFormsのデスクトップアプリでVSyncを待つコードを教えてください
Unityなとのフレームワークやゲームエンジ、DirectXラッパーを
使うことは許されていません
2019/01/30(水) 04:02:46.09ID:/8sJMxSkM
>>472
無理に100ペリカ
2019/01/30(水) 07:29:11.42ID:foE0k69S0
>>472
P/Invoke禁止とは言われてないのだな

ではD3DKMTWaitForVerticalBlankEventを使いましょう
名前はD3Dとありますがgdi32にある関数なのでDirectXではないと
糞ルールを決めた上司に主張しましょう
2019/01/30(水) 08:12:13.35ID:/B2wAYnE0
>>468
可読性という理由でラムダ式の表記禁止して5,6段のネストは許されている俺社
2019/01/30(水) 08:37:51.08ID:/+A/bmbGa
可読性も人それぞれ
2019/01/30(水) 08:46:16.74ID:hYqQd3E1d
あるフォルダ(A)内に不定期に作成されるファイルを、ローカルのフォルダ(B)に一定間隔でコピーします(フォルダ内全てではなく、前回からの差分ファイルをコピー)。

今回コピーしたファイルを使って後続処理をしたいのですが、どのようにしたら今回コピーしたファイルだと判別できますか?ファイル名にはタイムスタンプが入っています。
コピー後にA内のファイルを削除などできず、コピーのみ可能です。
2019/01/30(水) 08:49:12.12ID:/+A/bmbGa
>>477
データベースにヒストリを保存すればよろしいかと
2019/01/30(水) 09:59:39.11ID:E37rjQ75a
>>477
別のフォルダに "<ファイル名>.trigger" みたいな一時ファイルを作って処理後に消せばいい
2019/01/30(水) 18:35:51.42ID:hYqQd3E1d
>>477
ありがとうございます。
コピー済みのファイル名をDBに保存しておき、そこにないファイルは新規ファイルとして処理する。
こんな判断になりそうです。
2019/01/31(木) 15:06:18.62ID:k6O3ixIF0
Unsafe.の質問ってここじゃ不適切だよね
と言ってもここ以外にまともなC#スレはないようだけど
2019/01/31(木) 16:28:47.69ID:wgv6NCGX0
相談室スレでもいいよ 多分回答者はこのスレと共通だけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況