X



ふらっと C#,C♯,C#(初心者用) Part137
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん (ドコグロ MM07-2FKJ)
垢版 |
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
0906デフォルトの名無しさん (アウアウウー Sa09-667V)
垢版 |
2018/06/02(土) 11:42:21.94ID:gRqFSsBQa
OSでメモリはブロックなどで管理されていて要求があったら
要求サイズに合わせてそのブロックの中のさらに細かいブロックなどを払いだしてる
こっちがどうしようとOSでブロックを作ってその中でやりくりしてる

例えそのブロックの中で断片化していて何か不都合あるのか?
0908デフォルトの名無しさん (ワッチョイ 21e3-5Q+M)
垢版 |
2018/06/02(土) 14:25:15.68ID:QJbZaU5f0
リークしてると1ヶ月ぐらいで死ぬじゃん
現状自分でメモリ管理しないとどこで何が確保されてるのかわからないわけで
そういうの確実に管理したいときはc言語のがいいのかなぁ?と
0909デフォルトの名無しさん (ワッチョイ d55d-C2Ni)
垢版 |
2018/06/02(土) 14:34:09.78ID:gayBoTaI0
極めて厳密に管理したいならC/C++でアロケータを自前で書くというのはあり得る
しかしリークという点ではC#よりC/C++の方が遥かにやっちまい易いので, メモリ安全を確保する目的でC/C++で書くのは本末転倒のように思う
0911デフォルトの名無しさん (ワッチョイ 7a8a-sZ2J)
垢版 |
2018/06/02(土) 15:01:44.21ID:fV6b9MUi0
List#Containsの重複判定基準をEquals以外にすることはできないでしょうか?
ListにしたいクラスのEqualsが、別の目的用にオーバーライドされている為、Equalsを使うことができません。
0915デフォルトの名無しさん (ワッチョイ 5db3-7ot6)
垢版 |
2018/06/02(土) 16:03:39.22ID:nL4AUV2I0
>>908
Webサービスか何かを想定してる?
だったらコーディングで対応するんでなく、ロードバランサで複数のアプリケーションサーバに振り分けて
サービスが止まらない様にしつつ、一部のサーバをオンメンテでリブートすべし
0918デフォルトの名無しさん (ワッチョイ 21e3-5Q+M)
垢版 |
2018/06/02(土) 18:04:04.45ID:QJbZaU5f0
実際にメモリリークが起こらないように気をつける術は昔ながらの方法しかない?
プロジェクトでnewするときはインスタンスマネージャー的なのを通して
可能な限りインスタンスを監視するとかそんなの?
0921デフォルトの名無しさん (ブーイモ MMf1-CKCa)
垢版 |
2018/06/02(土) 19:11:03.61ID:1ZPJADB4M
>>918
一時的なオブジェクトはもう必要ないなら握りっぱなしにしないで即座に使い捨てること
中途半端に握りっぱなしにしてるとGCの世代か昇格してメモリ使用量の増加やGCのパフォーマンス低下の原因になる
一方、単寿命オブジェクトのGCは爆速なので、newしたら積極的にすぐ放置すべき
0924デフォルトの名無しさん (ワッチョイ 21e3-5Q+M)
垢版 |
2018/06/02(土) 19:25:12.19ID:QJbZaU5f0
>>921
うーん
爆速ではないなぁ
3分に1回動かしてる処理があるんだけど
強制GCせずにずっと動かしてるとき
メモリ使用量がかなりあがった状態でGCが動くと
3分に一度の処理のタイミングがズレちゃうんだよね
そこで強制GCも十分に一度ぐらいの頻度で動かしてる状態
0927デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/02(土) 19:37:34.74ID:KX6MAuAea
ちゃんと設計してればC#でメモリーリークなんて気にすることなんてあるか?
そんなガバガバ設計してるやつがCだったら大丈夫なんだけど、って馬鹿な話誰が信じるよ
0935デフォルトの名無しさん (ワッチョイ 4a15-ZeuL)
垢版 |
2018/06/02(土) 21:10:12.98ID:u/NNd5OV0
未確認飛行のSpan説明みてサンプルコード動かそうとしたんだけど
using System.Memory;すると
CS0305ジェネリック種類 'Memory<T>' を使用するには、1 型引数が必要です。
って叱られるのなんで?
VSもCoreも最新
0938デフォルトの名無しさん (ワッチョイ d696-NLsb)
垢版 |
2018/06/03(日) 17:57:54.97ID:nwnHFAsS0
フォームアプリでマウスクリックでイベントをはっせいさせているのですが、
ある処理ループの実行中はこのクリックイベントの割り込み発生を禁止させたいです。
マウスクリック割り込みイベントを無効化、有効化する方法ってないでしょうか?
0941デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/03(日) 18:07:49.08ID:qpwWeWwga
>>938
-=、+=
デザイナーみればわかると思うよ
0949デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/03(日) 20:15:38.36ID:OWt1glR4a
非同期で実行した場合とかの抑止とか?とエスパー
0950デフォルトの名無しさん (ワッチョイ 4a15-ZeuL)
垢版 |
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つずつ表示される
}

を試したいんだけど、できないって話なんだ
0955デフォルトの名無しさん (ワッチョイ d696-NLsb)
垢版 |
2018/06/03(日) 21:27:58.09ID:nwnHFAsS0
>>948
おっしゃる通りで、連打対策必要だったんですね。
フォームアプリだと必須の対策なんですね。
他で少し変な挙動してたのは連打対策してなかったことが原因のようです。

連打対策してみます。
というか、どうやればいいんだろ。
また、お勉強しなければ。
0958デフォルトの名無しさん (アウアウエー Sa22-UB1l)
垢版 |
2018/06/03(日) 21:56:36.02ID:imVGa92Ya
そもそもUIのデザイン論なんて大げさな話じゃなくても、
ユーザーの捜査に反応できない文脈では何らかの方法(通常はグレイアウト)でそれを
ユーザーに対して明示しないUIは問題あるでしょうww

そんなことにも思い至らない回答者は無視していいよw
0959デフォルトの名無しさん (ワッチョイ 4a15-ZeuL)
垢版 |
2018/06/03(日) 22:53:07.14ID:S4J0YpoT0
>>952
ありがとう、そういうこともあるんだな
勉強になった

10Gくらいの固定長テキストファイルから一行ずつ読み取って
最初の1-10文字はUSER ID、11はSEX・・・って分けてdbに突っ込んでるんだけど
StringBuilderでLength=0しつつappendするくらいじゃ、stringでsubstringするのとあまり変わらなかったんで
Span使えばマシになるのかなと思ったんだ
0963デフォルトの名無しさん (ワッチョイ 4a15-ZeuL)
垢版 |
2018/06/04(月) 06:33:56.69ID:mxEQUVjg0
>>962
細かくなるとdbスレ行きなんだろうけど
実際に書くところはC#なわけで、どこがボトルネックになってるのかザコ過ぎてわからんw
とりあえずsqliteつかってメモリ上dbにinsertでトランザクション管理しっかりやってってして30分くらいだったからまーいいかと
sql server expressだとbulk insertはわからんけどselectで並列処理されるみたいだから乗り換えてみる予定
0967デフォルトの名無しさん (ワッチョイ cd24-sZ2J)
垢版 |
2018/06/04(月) 16:33:35.32ID:7NrmQXKK0
MonoのLinux版のインストールの仕方、ご教示いただけますと有難いです。宜しくお願い致します。
0973デフォルトの名無しさん (ワッチョイ 4aeb-xcqf)
垢版 |
2018/06/04(月) 21:48:02.60ID:9+XsYcyB0
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?
0976デフォルトの名無しさん (ワッチョイ 4e8b-fUxx)
垢版 |
2018/06/04(月) 23:32:00.59ID:054Q3E4O0
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。
0977デフォルトの名無しさん (アウアウエー Sa22-UB1l)
垢版 |
2018/06/05(火) 00:07:28.69ID:jE9yEXCCa
>>976
何でそうなるのw
発想が逆だってw

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

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

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

ここが具体的にどういう構文になるのでしょうか。
0982デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/05(火) 09:29:57.56ID:nr/+sOXHa
非同期じゃないならボタンイネーブル切ればいいだけじゃね
0983デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/06/05(火) 09:32:16.99ID:nr/+sOXHa
すまん。忘れてくれ
0985デフォルトの名無しさん (アウアウエー Sa22-UB1l)
垢版 |
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)
  {
    ....
  }
  ....
}
0986デフォルトの名無しさん (ブーイモ MMbe-CKCa)
垢版 |
2018/06/05(火) 12:44:05.86ID:eGZjT6RJM
>>985
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>979の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい
0987デフォルトの名無しさん (ブーイモ MMbe-CKCa)
垢版 |
2018/06/05(火) 12:51:41.81ID:eGZjT6RJM
>>985がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>985だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ
0990デフォルトの名無しさん (アウアウウー Sa09-CKCa)
垢版 |
2018/06/05(火) 13:11:38.32ID:vyKZFDS5a
>>988
分からないならイベントというものを正しく理解してないんじゃないかな
ボタンのクリックイベントをフォームが受け取れるのは、ボタンがフォームへの参照を(実際には間にデリゲートが入るので間接的にだが)持ってるから
基本的に、引数に渡ってきたものに自分自身を登録するのは避けたほうがいい
オブジェクトのライフタイムが非常に分かりにくくなるから
0992デフォルトの名無しさん (ワッチョイ cd24-lkdC)
垢版 |
2018/06/05(火) 15:23:49.06ID:n583dJR10
>>969
ちょまど神って???状態でしたので調べてみました。
一つ知識が増えました。ありがとうございます。
0993デフォルトの名無しさん (ワッチョイ cd24-lkdC)
垢版 |
2018/06/05(火) 15:24:19.24ID:n583dJR10
>>970
そうなんですか。。。
NET Coreっての調べてみます。どうも有難う御座います。

ちょど昨日 GUI って何だ??って検索したばかりでした。
3日前からプログラムの勉強をはじめたばかりで。。。
0994デフォルトの名無しさん (ワッチョイ cd24-lkdC)
垢版 |
2018/06/05(火) 15:24:34.93ID:n583dJR10
>>975
ありがとうございます。TRYしてみます。

この掲示板すごーい!!皆様に感謝です。
0995デフォルトの名無しさん (アウアウエー Sa22-UB1l)
垢版 |
2018/06/05(火) 16:15:32.44ID:vCTdp4Eha
>>989
ないないw
イベントの購読解除はリークの原因になるのはその通りだけど、
それは>>986が主張するように、イベントを発生するオブジェクトを引数で受け取ったかどうかと無関係。

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

そもそも今はそんな話をしてるんじゃないw
単に質問者の参考になるかもしれんコードの骨組みを示しただけw
レス数が950を超えています。1000を超えると書き込みができなくなります。

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