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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2018/04/06(金) 17:40:19.48ID:oKXVP34zM
「どんなにくだらない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
2018/06/01(金) 09:05:55.18ID:azdekr4p0
説明不足ごめんなさい。
出力ですが、最終的にはTextBoxの枠ごと印刷したいと考えております。
883の言う単位の入力補完だと思います。

MaskedTextBoxのマスクに####℃と記入し、
「-24.4」等のデータをデータベースから取り出して、入れたところMaskedTextBox.Textが244℃となってしまいました。
このテキストボックスを小数点有りの場合、なしの場合、負の符号が有りの場合なしの場合、「----」の場合、
1桁から5桁+「℃」としてTextBox.Textに出力したいと考えております。

できますか?
2018/06/01(金) 09:13:09.12ID:gkm5sPLjM
TextBoxクラスを継承して自前で実装すればできる
2018/06/01(金) 09:47:05.22ID:czZmZo8za
TextBoxクラスを継承してTextプロパティを上書き
書式とか単位を属性に持たせれば汎用的に使える。
コピペされたときの場合も考慮すること
2018/06/01(金) 09:58:02.26ID:azdekr4p0
ありがとうございます。
なんとなく、それっぽいものが作れそうです。
2018/06/01(金) 10:22:08.86ID:XLd38QjBM
ユーザーコントロールでボーダーなしテキストボックスとラベル並べた方が楽な気がする
2018/06/01(金) 18:06:59.69ID:TnI3eVXu0
テキストボックスの描画や挙動を弄るの面倒くさいから汎用性を求めるんなら InputMan 買った方がいいよ
2018/06/01(金) 18:10:44.74ID:UBye49NJM
ライセンスとかテクリスとか面倒だから買わない
2018/06/01(金) 18:21:51.24ID:S7DUtxKdM
NuGetで参照できるオープンソースのWinFormsリッチコンポーネントって何が有名なの?
2018/06/01(金) 20:17:26.63ID:dZV2tAFxM
nugetは俺の鬼門
2018/06/01(金) 21:28:02.83ID:naL+ZRGN0
僕の半蔵門
895デフォルトの名無しさん (ワッチョイ fae3-mRcc)
垢版 |
2018/06/01(金) 23:18:54.61ID:fWGAwsr30
前門の虎 肛門の狼
896デフォルトの名無しさん (ワッチョイ d103-Y2aB)
垢版 |
2018/06/02(土) 00:25:46.86ID:A4SZL/oE0
寒っ
2018/06/02(土) 10:06:40.82ID:QJbZaU5f0
c#で穴ぼこメモリにしないように組むのって不可能?
2018/06/02(土) 10:27:51.87ID:nL4AUV2I0
可能だが、規模によっては現実的でない
パフォーマンスを気にするなら、別にボトルネックが存在していないかを見直す方が先
2018/06/02(土) 10:30:12.89ID:rvy10L9Oa
OSの仕事
どうしても嫌でデカいbyte配列確保して中に文字や数字全部入れても無駄
2018/06/02(土) 10:40:30.36ID:QJbZaU5f0
>>899
それでも駄目なの?
もうサービス部分はC言語で組んだほうが良さげ?
2018/06/02(土) 10:42:11.98ID:1ZPJADB4M
GCが勝手に詰めてくれるから気にしなくていい
ただし巨大なオブジェクトは専用の領域があって移動されないので断片化されやすいから注意
2018/06/02(土) 11:05:50.81ID:msgJi+IZM
Spanとstackallocで我慢しなさい
2018/06/02(土) 11:10:29.54ID:rvy10L9Oa
>>900
Cだって確保管理はOSの仕事だろ
何のためにメモリの管理をOSに任せたくないんだ?
2018/06/02(土) 11:12:27.29ID:msBkLZBc0
DMAが僕を呼んでいるから
2018/06/02(土) 11:18:59.70ID:J1HVezEsH
>>903
Cだってオブジェクト毎の領域をそれぞれ全てOSが管理しているわけじゃない
mallocが効率化のためにだいぶ仕事してる
2018/06/02(土) 11:42:21.94ID:gRqFSsBQa
OSでメモリはブロックなどで管理されていて要求があったら
要求サイズに合わせてそのブロックの中のさらに細かいブロックなどを払いだしてる
こっちがどうしようとOSでブロックを作ってその中でやりくりしてる

例えそのブロックの中で断片化していて何か不都合あるのか?
2018/06/02(土) 14:08:09.74ID:65ghWvPg0
使う予定の最大量の倍の空きメモリーあれば大体は気にならない。
いまどきのパソコンはアプリが使いたいメモリーサイズの数百倍は有るから気にするな。
2018/06/02(土) 14:25:15.68ID:QJbZaU5f0
リークしてると1ヶ月ぐらいで死ぬじゃん
現状自分でメモリ管理しないとどこで何が確保されてるのかわからないわけで
そういうの確実に管理したいときはc言語のがいいのかなぁ?と
2018/06/02(土) 14:34:09.78ID:gayBoTaI0
極めて厳密に管理したいならC/C++でアロケータを自前で書くというのはあり得る
しかしリークという点ではC#よりC/C++の方が遥かにやっちまい易いので, メモリ安全を確保する目的でC/C++で書くのは本末転倒のように思う
2018/06/02(土) 14:39:58.23ID:I3vJQFJE0
リーク前提とかバカでしょ
911デフォルトの名無しさん (ワッチョイ 7a8a-sZ2J)
垢版 |
2018/06/02(土) 15:01:44.21ID:fV6b9MUi0
List#Containsの重複判定基準をEquals以外にすることはできないでしょうか?
ListにしたいクラスのEqualsが、別の目的用にオーバーライドされている為、Equalsを使うことができません。
2018/06/02(土) 15:43:20.19ID:QJbZaU5f0
>>909
c#は現在実行中のアプリのインスタンスを確認する方法はあるの?
2018/06/02(土) 15:47:01.32ID:XUNevU9ma
>>911
>Equalsが、別の目的用にオーバーライドされている
常識的にはそっちの方が解消すべき「問題」のように思うけど...
2018/06/02(土) 15:54:54.04ID:XUNevU9ma
まあ、Exists使うだけだよね
2018/06/02(土) 16:03:39.22ID:nL4AUV2I0
>>908
Webサービスか何かを想定してる?
だったらコーディングで対応するんでなく、ロードバランサで複数のアプリケーションサーバに振り分けて
サービスが止まらない様にしつつ、一部のサーバをオンメンテでリブートすべし
2018/06/02(土) 16:05:51.99ID:wt7oIb0Vp
C#スレでメモリーリークを心配するとか、どんだけ無能なんだよ。
2018/06/02(土) 16:12:14.89ID:5ltA6BNw0
普通はリークで死ぬ前にGen2GC連発して性能ガタ落ちになるんじゃ
どんだけ握ってんだよと
2018/06/02(土) 18:04:04.45ID:QJbZaU5f0
実際にメモリリークが起こらないように気をつける術は昔ながらの方法しかない?
プロジェクトでnewするときはインスタンスマネージャー的なのを通して
可能な限りインスタンスを監視するとかそんなの?
2018/06/02(土) 18:17:48.36ID:msgJi+IZM
マトモなコードを書くだけ
2018/06/02(土) 19:01:19.50ID:pCnJrSzQd
メモリリークさせようと思わないとなかなかできんよ
2018/06/02(土) 19:11:03.61ID:1ZPJADB4M
>>918
一時的なオブジェクトはもう必要ないなら握りっぱなしにしないで即座に使い捨てること
中途半端に握りっぱなしにしてるとGCの世代か昇格してメモリ使用量の増加やGCのパフォーマンス低下の原因になる
一方、単寿命オブジェクトのGCは爆速なので、newしたら積極的にすぐ放置すべき
2018/06/02(土) 19:16:06.36ID:1ZPJADB4M
>>911
Any
2018/06/02(土) 19:21:44.73ID:I3vJQFJE0
C#でメモリリークさせるコード書く奴がC/C++で無くせるとは到底思えないわ
2018/06/02(土) 19:25:12.19ID:QJbZaU5f0
>>921
うーん
爆速ではないなぁ
3分に1回動かしてる処理があるんだけど
強制GCせずにずっと動かしてるとき
メモリ使用量がかなりあがった状態でGCが動くと
3分に一度の処理のタイミングがズレちゃうんだよね
そこで強制GCも十分に一度ぐらいの頻度で動かしてる状態
2018/06/02(土) 19:29:07.89ID:pCnJrSzQd
だめだこいつ
2018/06/02(土) 19:31:42.56ID:QJbZaU5f0
>>925
なんかいい方法あるんですか?
927デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/02(土) 19:37:34.74ID:KX6MAuAea
ちゃんと設計してればC#でメモリーリークなんて気にすることなんてあるか?
そんなガバガバ設計してるやつがCだったら大丈夫なんだけど、って馬鹿な話誰が信じるよ
2018/06/02(土) 19:45:14.53ID:msgJi+IZM
>>926
簡単だよ
マトモなコードを書くだけ
2018/06/02(土) 20:14:13.22ID:fh+k246w0
以降放置でお願いいたします
2018/06/02(土) 20:28:22.93ID:iRadbqpq0
>メモリーリークなんて気にすること
ページフォルトを気にしないヴァカっていたな。
リークしていないが累積しすぎたページフォルトがOSを殺す
2018/06/02(土) 20:30:41.21ID:+/nRHGaPa
C#でリークやらかす奴がC/C++でやらかさない道理がない
2018/06/02(土) 20:31:22.14ID:eSvYHUXNM
こいつもトンチキなので放置でいいです
2018/06/02(土) 20:50:00.44ID:wt7oIb0Vp
まあ、でもC#はメモリー管理を隠蔽しちゃったから、実はCやC++よりメモリー管理しにくいんだよな。
2018/06/02(土) 20:58:18.57ID:msgJi+IZM
C++出身のC#初心者にありがちだね
2018/06/02(土) 21:10:12.98ID:u/NNd5OV0
未確認飛行のSpan説明みてサンプルコード動かそうとしたんだけど
using System.Memory;すると
CS0305ジェネリック種類 'Memory<T>' を使用するには、1 型引数が必要です。
って叱られるのなんで?
VSもCoreも最新
2018/06/02(土) 21:20:59.23ID:msgJi+IZM
SpanはSystem.Spanだ
2018/06/02(土) 21:33:12.83ID:u/NNd5OV0
System.Spanにしてもでてきおる
using static System.Memory<string>;
ってするとエラーは消えた
2018/06/03(日) 17:57:54.97ID:nwnHFAsS0
フォームアプリでマウスクリックでイベントをはっせいさせているのですが、
ある処理ループの実行中はこのクリックイベントの割り込み発生を禁止させたいです。
マウスクリック割り込みイベントを無効化、有効化する方法ってないでしょうか?
2018/06/03(日) 18:03:05.41ID:acSSis/XM
>>937
そうじゃないusing System;ってこと
2018/06/03(日) 18:05:10.81ID:5sPxkTAt0
>>938
イベントの購読とその解除
http://ufcpp.net/study/csharp/MiscEventSubscribe.html
941デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/03(日) 18:07:49.08ID:qpwWeWwga
>>938
-=、+=
デザイナーみればわかると思うよ
2018/06/03(日) 18:08:39.42ID:imVGa92Ya
>>938
Control.Enabled
どうでもいいけど、「割り込みイベント」って表現は間違ってるから他所では使わない方がいいよw
2018/06/03(日) 18:26:12.78ID:y7bK61pJa
処理中フラグ持っておいて
クリックイベントの入り口で処理中ならreturnするのでよくない?

bool 処理中=false;

クリックイベントの頭
if(処理中)return;
2018/06/03(日) 18:33:27.61ID:3EuqECGs0
lockで囲めば
2018/06/03(日) 18:43:15.37ID:acSSis/XM
ボタンからしか起動しない処理だと保証されてるなら-=+=でもフラグでもいいが
そうでないなら真面目に並列処理管理しないとね
2018/06/03(日) 18:59:01.85ID:4vwgZnFjp
はあ?
クリックイベント自体を抑止したのか?
意味あるの?
2018/06/03(日) 19:18:23.10ID:bhcyF/oUa
処理ループの中でメッセージループを実装してGetMessage()でマウスイベントをフィルターかな?或いは読み捨てる
2018/06/03(日) 20:09:50.51ID:pjD3SZS60
え、連打対策してないの?
949デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/03(日) 20:15:38.36ID:OWt1glR4a
非同期で実行した場合とかの抑止とか?とエスパー
2018/06/03(日) 20:19:01.20ID:S4J0YpoT0
>>939
つまりSpanを使うのにusing System;さえすればいいってこと?
ごめんな、クソ素人過ぎて質問がまずいのか

http://ufcpp.net/study/csharp/resource/span/

var s = "abcあいう亜以宇";

var sub = s.Substring(3, 3);
var span = s.AsReadOnlySpan().Slice(3, 3);

for (int i = 0; i < 3; i++)
{
Console.WriteLine((sub[i], span[i])); // あ、い、う が2つずつ表示される
}

を試したいんだけど、できないって話なんだ
2018/06/03(日) 20:26:16.06ID:klvCZP9p0
>>933
やっぱりそうだよね
厳密にやろうと思ったら昔ながらの方法でやるしかないんだよね
2018/06/03(日) 20:50:59.76ID:H2Gh+VvdM
>>950
現時点ではAsReadOnlySpanが存在しないっぽいね
Stringはもともと読み取り専用だからAsSpanでReadOnlySpanになるってことだと思うけど
過渡期の記事はそのまま鵜呑みにしない方がいいぞ
2018/06/03(日) 21:25:48.86ID:nwnHFAsS0
>>940
全く知らない概念でした。
勉強してみます。
2018/06/03(日) 21:26:28.88ID:nwnHFAsS0
>>943
これうまい手ですね。
使える場所ありそうですので試してみます。
2018/06/03(日) 21:27:58.09ID:nwnHFAsS0
>>948
おっしゃる通りで、連打対策必要だったんですね。
フォームアプリだと必須の対策なんですね。
他で少し変な挙動してたのは連打対策してなかったことが原因のようです。

連打対策してみます。
というか、どうやればいいんだろ。
また、お勉強しなければ。
2018/06/03(日) 21:42:26.87ID:0r68Qt9D0
>>955
いま質問した答えをイベントメソッドに組み込めば連打対策は終了
そっちを先に覚えるのが普通だと思ってた
2018/06/03(日) 21:51:01.95ID:imVGa92Ya
>>954
全然うまい手じゃないw
PC-98の時代じゃあるまいし、フラグって言葉を聞いたら眉に唾して聞かなきゃダメwww
それを好むのは可読性に感心がないダメグラマの可能性が高いw
2018/06/03(日) 21:56:36.02ID:imVGa92Ya
そもそもUIのデザイン論なんて大げさな話じゃなくても、
ユーザーの捜査に反応できない文脈では何らかの方法(通常はグレイアウト)でそれを
ユーザーに対して明示しないUIは問題あるでしょうww

そんなことにも思い至らない回答者は無視していいよw
2018/06/03(日) 22:53:07.14ID:S4J0YpoT0
>>952
ありがとう、そういうこともあるんだな
勉強になった

10Gくらいの固定長テキストファイルから一行ずつ読み取って
最初の1-10文字はUSER ID、11はSEX・・・って分けてdbに突っ込んでるんだけど
StringBuilderでLength=0しつつappendするくらいじゃ、stringでsubstringするのとあまり変わらなかったんで
Span使えばマシになるのかなと思ったんだ
2018/06/03(日) 23:00:15.10ID:8gLBE5WNa
そんなもん丸ごとDBにロードしたほうが速いだろ
固定長ファイルのロードはどのDBMSでもコマンド一発でできる
2018/06/03(日) 23:12:33.52ID:S4J0YpoT0
>>960
それなw
tempのカラムに一行まるごと突っ込んで、クエリでsubstrするやり方やってみる
https://stackoverflow.com/questions/12423991/import-fixed-width-text-file-into-sqlite
2018/06/03(日) 23:35:40.25ID:iikfdxhC0
10GBのデータだと読取よりDBMSへの書き込み方法がネックになりそう
2018/06/04(月) 06:33:56.69ID:mxEQUVjg0
>>962
細かくなるとdbスレ行きなんだろうけど
実際に書くところはC#なわけで、どこがボトルネックになってるのかザコ過ぎてわからんw
とりあえずsqliteつかってメモリ上dbにinsertでトランザクション管理しっかりやってってして30分くらいだったからまーいいかと
sql server expressだとbulk insertはわからんけどselectで並列処理されるみたいだから乗り換えてみる予定
2018/06/04(月) 11:04:17.43ID:MivBMbBxa
sql server expressはひっくるめたDBサイズが最大10 GBまでだったと思うが
2018/06/04(月) 11:06:49.27ID:UeJV2JW90
メモリしこたま積んでRedisかな
2018/06/04(月) 14:26:59.71ID:pPavJvQvM
Postgresでいいよ
ロード時に固定長レコードのフォーマットを指定できるから一時テーブルもC#もいらん
967デフォルトの名無しさん (ワッチョイ cd24-sZ2J)
垢版 |
2018/06/04(月) 16:33:35.32ID:7NrmQXKK0
MonoのLinux版のインストールの仕方、ご教示いただけますと有難いです。宜しくお願い致します。
968デフォルトの名無しさん (ワッチョイ d6e8-NLsb)
垢版 |
2018/06/04(月) 16:48:48.54ID:aK/XyO250
米Microsoftが米GitHubを買収することで合意
http://www.itmedia.co.jp/news/articles/1806/04/news058.html
2018/06/04(月) 20:38:58.19ID:UeJV2JW90
>>967
ちょまど神を信仰すると天啓が降るぞよ
2018/06/04(月) 20:43:37.91ID:CVKZewtza
>>967
Monoなんか今時もう誰も使ってないし誰もメンテしてないでしょ
今は.NET Coreの時代
GUIが目当てなら諦めなさい
2018/06/04(月) 20:52:46.96ID:spHrXgPF0
UbuntuでもCentOSでもコマンド一発で入るがな
2018/06/04(月) 21:35:01.82ID:ztrCxIDM0
>>970
何言ってんの?
2018/06/04(月) 21:48:02.60ID:9+XsYcyB0
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?
2018/06/04(月) 21:49:06.62ID:BHtXacEqa
>>973
debuggerstepthrough
2018/06/04(月) 21:56:07.60ID:Uz3WpYRO0
>>970
Mono Releases | Mono
http://www.mono-project.com/docs/about-mono/releases/
2018/06/04(月) 23:32:00.59ID:054Q3E4O0
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。
2018/06/05(火) 00:07:28.69ID:jE9yEXCCa
>>976
何でそうなるのw
発想が逆だってw

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

ついでに言えば受信データもEventArgs使って渡してしまえばいい
2018/06/05(火) 00:33:25.52ID:liKML/cX0
しょうがねえだろ初心者なんだから
2018/06/05(火) 07:18:51.35ID:ByFVOB9IM
>>977
やりたいのことはそれなんですよw
説明が下手ですいません
厳密にはデータを受けた事が分かったらメイン側は受信データの内容を解釈するクラスに送って処理分岐という形にしようかと思ってます。
用語や処理の知識がおいついてきてないので、あれを応用しようという感じにならず、調べるためのキーワードも出てこないです。

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

ここが具体的にどういう構文になるのでしょうか。
2018/06/05(火) 08:07:17.14ID:D4M8TybKa
Signalを使っても作れるな。
2018/06/05(火) 09:11:21.09ID:GjVlFAo70
>>958
PCをあまり使い慣れてない人とか、ボタンはシングルクリックでいいのをダブルクリックしちゃったりとかあるんだよなこれが・・・
982デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/05(火) 09:29:57.56ID:nr/+sOXHa
非同期じゃないならボタンイネーブル切ればいいだけじゃね
983デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/05(火) 09:32:16.99ID:nr/+sOXHa
すまん。忘れてくれ
2018/06/05(火) 10:35:58.82ID:l/0/VM/ma
状態をGUIだけに持たせておくのはおかしいといつか思うはず
2018/06/05(火) 12:11:20.04ID:vCTdp4Eha
>>979
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)
  {
    ....
  }
  ....
}
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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