2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part136
http://mevius.5ch.net/test/read.cgi/tech/1520057345/

■コードを貼る場合は↓を使いましょう。
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

957 :デフォルトの名無しさん :2018/06/03(日) 20:50:59.76 ID:H2Gh+VvdM.net
>>955
現時点ではAsReadOnlySpanが存在しないっぽいね
Stringはもともと読み取り専用だからAsSpanでReadOnlySpanになるってことだと思うけど
過渡期の記事はそのまま鵜呑みにしない方がいいぞ

958 :デフォルトの名無しさん :2018/06/03(日) 21:25:48.86 ID:nwnHFAsS0.net
>>945
全く知らない概念でした。
勉強してみます。

959 :デフォルトの名無しさん :2018/06/03(日) 21:26:28.88 ID:nwnHFAsS0.net
>>948
これうまい手ですね。
使える場所ありそうですので試してみます。

960 :デフォルトの名無しさん :2018/06/03(日) 21:27:58.09 ID:nwnHFAsS0.net
>>953
おっしゃる通りで、連打対策必要だったんですね。
フォームアプリだと必須の対策なんですね。
他で少し変な挙動してたのは連打対策してなかったことが原因のようです。

連打対策してみます。
というか、どうやればいいんだろ。
また、お勉強しなければ。

961 :デフォルトの名無しさん :2018/06/03(日) 21:42:26.87 ID:0r68Qt9D0.net
>>960
いま質問した答えをイベントメソッドに組み込めば連打対策は終了
そっちを先に覚えるのが普通だと思ってた

962 :デフォルトの名無しさん :2018/06/03(日) 21:51:01.95 ID:imVGa92Ya.net
>>959
全然うまい手じゃないw
PC-98の時代じゃあるまいし、フラグって言葉を聞いたら眉に唾して聞かなきゃダメwww
それを好むのは可読性に感心がないダメグラマの可能性が高いw

963 :デフォルトの名無しさん :2018/06/03(日) 21:56:36.02 ID:imVGa92Ya.net
そもそもUIのデザイン論なんて大げさな話じゃなくても、
ユーザーの捜査に反応できない文脈では何らかの方法(通常はグレイアウト)でそれを
ユーザーに対して明示しないUIは問題あるでしょうww

そんなことにも思い至らない回答者は無視していいよw

964 :デフォルトの名無しさん :2018/06/03(日) 22:53:07.14 ID:S4J0YpoT0.net
>>957
ありがとう、そういうこともあるんだな
勉強になった

10Gくらいの固定長テキストファイルから一行ずつ読み取って
最初の1-10文字はUSER ID、11はSEX・・・って分けてdbに突っ込んでるんだけど
StringBuilderでLength=0しつつappendするくらいじゃ、stringでsubstringするのとあまり変わらなかったんで
Span使えばマシになるのかなと思ったんだ

965 :デフォルトの名無しさん :2018/06/03(日) 23:00:15.10 ID:8gLBE5WNa.net
そんなもん丸ごとDBにロードしたほうが速いだろ
固定長ファイルのロードはどのDBMSでもコマンド一発でできる

966 :デフォルトの名無しさん :2018/06/03(日) 23:12:33.52 ID:S4J0YpoT0.net
>>965
それなw
tempのカラムに一行まるごと突っ込んで、クエリでsubstrするやり方やってみる
https://stackoverflow.com/questions/12423991/import-fixed-width-text-file-into-sqlite

967 :デフォルトの名無しさん :2018/06/03(日) 23:35:40.25 ID:iikfdxhC0.net
10GBのデータだと読取よりDBMSへの書き込み方法がネックになりそう

968 :デフォルトの名無しさん :2018/06/04(月) 06:33:56.69 ID:mxEQUVjg0.net
>>967
細かくなるとdbスレ行きなんだろうけど
実際に書くところはC#なわけで、どこがボトルネックになってるのかザコ過ぎてわからんw
とりあえずsqliteつかってメモリ上dbにinsertでトランザクション管理しっかりやってってして30分くらいだったからまーいいかと
sql server expressだとbulk insertはわからんけどselectで並列処理されるみたいだから乗り換えてみる予定

969 :デフォルトの名無しさん :2018/06/04(月) 11:04:17.43 ID:MivBMbBxa.net
sql server expressはひっくるめたDBサイズが最大10 GBまでだったと思うが

970 :デフォルトの名無しさん :2018/06/04(月) 11:06:49.27 ID:UeJV2JW90.net
メモリしこたま積んでRedisかな

971 :デフォルトの名無しさん :2018/06/04(月) 14:26:59.71 ID:pPavJvQvM.net
Postgresでいいよ
ロード時に固定長レコードのフォーマットを指定できるから一時テーブルもC#もいらん

972 :デフォルトの名無しさん :2018/06/04(月) 16:33:35.32 ID:7NrmQXKK0.net
MonoのLinux版のインストールの仕方、ご教示いただけますと有難いです。宜しくお願い致します。

973 :デフォルトの名無しさん :2018/06/04(月) 16:48:48.54 ID:aK/XyO250.net
米Microsoftが米GitHubを買収することで合意
http://www.itmedia.co.jp/news/articles/1806/04/news058.html

974 :デフォルトの名無しさん :2018/06/04(月) 20:38:58.19 ID:UeJV2JW90.net
>>972
ちょまど神を信仰すると天啓が降るぞよ

975 :デフォルトの名無しさん :2018/06/04(月) 20:43:37.91 ID:CVKZewtza.net
>>972
Monoなんか今時もう誰も使ってないし誰もメンテしてないでしょ
今は.NET Coreの時代
GUIが目当てなら諦めなさい

976 :デフォルトの名無しさん :2018/06/04(月) 20:52:46.96 ID:spHrXgPF0.net
UbuntuでもCentOSでもコマンド一発で入るがな

977 :デフォルトの名無しさん :2018/06/04(月) 21:35:01.82 ID:ztrCxIDM0.net
>>975
何言ってんの?

978 :デフォルトの名無しさん :2018/06/04(月) 21:48:02.60 ID:9+XsYcyB0.net
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?

979 :デフォルトの名無しさん :2018/06/04(月) 21:49:06.62 ID:BHtXacEqa.net
>>978
debuggerstepthrough

980 :デフォルトの名無しさん :2018/06/04(月) 21:56:07.60 ID:Uz3WpYRO0.net
>>975
Mono Releases | Mono
http://www.mono-project.com/docs/about-mono/releases/

981 :デフォルトの名無しさん :2018/06/04(月) 23:32:00.59 ID:054Q3E4O0.net
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。

982 :デフォルトの名無しさん :2018/06/05(火) 00:07:28.69 ID:jE9yEXCCa.net
>>981
何でそうなるのw
発想が逆だってw

そのシリア通信を担当するクラスSがデータ受信を通知するイベントを発生させて
受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ついでに言えば受信データもEventArgs使って渡してしまえばいい

983 :デフォルトの名無しさん :2018/06/05(火) 00:33:25.52 ID:liKML/cX0.net
しょうがねえだろ初心者なんだから

984 :976 :2018/06/05(火) 07:18:51.35 ID:ByFVOB9IM.net
>>982
やりたいのことはそれなんですよw
説明が下手ですいません
厳密にはデータを受けた事が分かったらメイン側は受信データの内容を解釈するクラスに送って処理分岐という形にしようかと思ってます。
用語や処理の知識がおいついてきてないので、あれを応用しようという感じにならず、調べるためのキーワードも出てこないです。

>>クラスSがデータ受信を通知するイベントを発生させて受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ここが具体的にどういう構文になるのでしょうか。

985 :デフォルトの名無しさん :2018/06/05(火) 08:07:17.14 ID:D4M8TybKa.net
Signalを使っても作れるな。

986 :デフォルトの名無しさん :2018/06/05(火) 09:11:21.09 ID:GjVlFAo70.net
>>963
PCをあまり使い慣れてない人とか、ボタンはシングルクリックでいいのをダブルクリックしちゃったりとかあるんだよなこれが・・・

987 :デフォルトの名無しさん :2018/06/05(火) 09:29:57.56 ID:nr/+sOXHa.net
非同期じゃないならボタンイネーブル切ればいいだけじゃね

988 :デフォルトの名無しさん :2018/06/05(火) 09:32:16.99 ID:nr/+sOXHa.net
すまん。忘れてくれ

989 :デフォルトの名無しさん :2018/06/05(火) 10:35:58.82 ID:l/0/VM/ma.net
状態をGUIだけに持たせておくのはおかしいといつか思うはず

990 :デフォルトの名無しさん :2018/06/05(火) 12:11:20.04 ID:vCTdp4Eha.net
>>984
class FrameReceivedEventArgs:EventArgs
{
  public byte[] Frame{get; private set;}
  ....
}

class CommunicationPort
{
  public even EventHandler<FrameReceivedEventArgs> FrameReceived;
  ....
}

class FrameDecoder
{
  public FrameDecoder(CommunicationPort c}
  {
    c.FrameReceived += CommunicationPort_FrameReceived;
  }

  private void CommunicationPort_FrameReceived((object sender, FrameReceivedEventArgs e)
  {
    ....
  }
  ....
}

991 :デフォルトの名無しさん :2018/06/05(火) 12:44:05.86 ID:eGZjT6RJM.net
>>990
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>984の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい

992 :デフォルトの名無しさん :2018/06/05(火) 12:51:41.81 ID:eGZjT6RJM.net
>>990がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>990だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ

993 :デフォルトの名無しさん :2018/06/05(火) 12:55:30.14 ID:vCTdp4Eha.net
何言ってるのかさっぱりわからん
よくわからん思考回路だな...

994 :デフォルトの名無しさん :2018/06/05(火) 13:09:28.12 ID:GjVlFAo70.net
言い回しがようわからんが
>>990みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる

995 :デフォルトの名無しさん :2018/06/05(火) 13:11:38.32 ID:vyKZFDS5a.net
>>993
分からないならイベントというものを正しく理解してないんじゃないかな
ボタンのクリックイベントをフォームが受け取れるのは、ボタンがフォームへの参照を(実際には間にデリゲートが入るので間接的にだが)持ってるから
基本的に、引数に渡ってきたものに自分自身を登録するのは避けたほうがいい
オブジェクトのライフタイムが非常に分かりにくくなるから

996 :デフォルトの名無しさん :2018/06/05(火) 13:53:28.61 ID:UBCugO63M.net
reactive extensionsって.NET発祥なのに使う人少ないよね

997 :デフォルトの名無しさん :2018/06/05(火) 15:23:49.06 ID:n583dJR10.net
>>974
ちょまど神って???状態でしたので調べてみました。
一つ知識が増えました。ありがとうございます。

998 :デフォルトの名無しさん :2018/06/05(火) 15:24:19.24 ID:n583dJR10.net
>>975
そうなんですか。。。
NET Coreっての調べてみます。どうも有難う御座います。

ちょど昨日 GUI って何だ??って検索したばかりでした。
3日前からプログラムの勉強をはじめたばかりで。。。

999 :デフォルトの名無しさん :2018/06/05(火) 15:24:34.93 ID:n583dJR10.net
>>980
ありがとうございます。TRYしてみます。

この掲示板すごーい!!皆様に感謝です。

1000 :デフォルトの名無しさん :2018/06/05(火) 16:15:32.44 ID:vCTdp4Eha.net
>>994
ないないw
イベントの購読解除はリークの原因になるのはその通りだけど、
それは>>991が主張するように、イベントを発生するオブジェクトを引数で受け取ったかどうかと無関係。

>>995
俺は理解してないのは君の方だと思うよw
その君のいう俺様ルール、何が悪いのかさっぱり分からない

そもそも今はそんな話をしてるんじゃないw
単に質問者の参考になるかもしれんコードの骨組みを示しただけw

1001 :デフォルトの名無しさん :2018/06/05(火) 16:16:25.51 ID:vCTdp4Eha.net
あ、

× イベントの購読解除
〇 イベントの購読解除忘れ

1002 :デフォルトの名無しさん :2018/06/05(火) 19:31:17.11 ID:70UTtyrn0.net
次スレたててみる

1003 :デフォルトの名無しさん :2018/06/05(火) 19:33:22.39 ID:70UTtyrn0.net
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
たった
議論は他のところでよろしく

1004 :デフォルトの名無しさん :2018/06/06(水) 00:18:56.95 ID:+J9HGVUKa.net
>>1000
想像力のない人だなあ
>>990だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても
登録先のCommunicationPortよりも先にGCされることは絶対にない。
じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する?
それはFrameDecoder自身には分からない。知っているとしたら、それは>>981のいうメインクラスだろう。
登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか?
結局、985のFrameDecoderを正しく扱うには、メインクラス側がそういうクラス外から見ただけでは想像できないFrameDecoderの気難しい仕様を理解した上で、
必要に応じて明示的な解放を行わなくてはならない。
そんなことをするくらいならメインクラス側で明示的に登録・登録解除をやったほうが遥かに素直で分かりやすい。

1005 :デフォルトの名無しさん :2018/06/06(水) 00:26:33.34 ID:D75pa1n0a.net
質問いいですか?

1006 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1006
311 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★