ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/09(金) 18:36:01.72ID:lNiKtgPwM

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part128
http://mevius.2ch.net/test/read.cgi/tech/1493730340/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
---
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/06/29(木) 22:06:41.15ID:x/W/MEgba
素直に質問を読むかぎり>>494の言う通り排他ロックで解決する問題としか思えんけど
500デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/29(木) 22:07:08.30ID:f7/aluE/a
皆さんアドバイスありがとうございます
ちなみにメソッドというのはTcpClientの送信メソッドで
複数のスレッドからサーバーに送信をしたいのですが、おそらくその送信のタイミングが競合を起こしうまく動作してくれません。。
ロックオブジェクトを作ってロックかけてるつもりなんですがうまく機能してないのです
2017/06/29(木) 22:35:25.39ID:F1YaSrsh0
>>495でやればそもそもロックなんて発生しないわけだが
できない理由でもあるのか?
2017/06/29(木) 23:05:29.60ID:BTdfqiMca
ダウンローダーの同時接続数制限みたいなものかと思ったら一つなんだな
lcokはできない

System.Threading.SemaphoreSlimか
503デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/29(木) 23:25:53.82ID:f7/aluE/a
>>501
ありがとうございます
出来ない理由は私の力不足によるものです
どういった実装になるのか検討がつきません
何か具体的なものありましたらよろしくお願いします

>>502
ありがとうございます
lockは出来ないのですか。。それは更に困りました
System.Threading.SemaphoreSlim
と書かれてるのを調べてみます
2017/06/29(木) 23:49:55.45ID:F1YaSrsh0
>>503
マジかよ


複数非同期スレッド→単一スレッドA

変更後
複数非同期スレッド←単一スレッドA

って依存関係にすれば競合しないだろ
って言ってるんだけど
理解不能か?
2017/06/30(金) 00:05:24.99ID:8hWYjDYsa
またいつもの馬鹿がしょうもないことで威張り腐ってるなw
ばっかじゃねえのこいつ
2017/06/30(金) 00:16:25.32ID:wI8QUjnd0
queueで解決ちゃうの?
2017/06/30(金) 00:19:17.08ID:8Sz1FGh4M
>>500
こういうのはスレッドセーフなキューを使うのが伝統
複数のスレッドからキューにコマンドオブジェクトをエンキューする
処理スレッドはループをぐるぐる回しながらコマンドオブジェクトをデキューして実行する
これは初心者でもわかりやすいが効率は良くない
2017/06/30(金) 00:20:08.64ID:vkcMcAZ50
ええー
わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ
単一スレッドから各スレッドに巡回していけばバッティングおこんねーじゃん
って言ってるだけなのにマジで通じないのかよ残念ぷぅ
2017/06/30(金) 00:21:26.45ID:4HtEPBqY0
BlockingCollectionやConcurrentQueueでいいんじゃね
510デフォルトの名無しさん (ワッチョイ 5d23-nIbb)
垢版 |
2017/06/30(金) 00:23:25.92ID:SpH8vRbw0
キューでもいいが、SemaphoreSlimでスレッド制限かけたほうがシンプルにはなりそう。知らんけど
2017/06/30(金) 00:34:20.89ID:fpnpIAui0
>>510
それ普通のロックや
2017/06/30(金) 07:06:40.25ID:z9Hs41t20
しつこくてすまんが、FT232のニセモノ問題を知らない人も多そうなので、一応。
アキバとかで売ってるやつだけじゃなくて、うちみたいに某商社経由で被害にあったケースもあるので。

https://japan.zdnet.com/article/35055706/
2017/06/30(金) 07:09:05.81ID:z9Hs41t20
ちなみに世の中に出回っているFT232の大部分はニセモノなので、
"FT232 偽物"とかでググってみてくれ
2017/06/30(金) 07:41:44.96ID:VDhKv/wIM
>>508
マジで言ってるなら大バカ野郎過ぎる
対象のスレッドが増えたり減ったりする度にスレッドAに手を加えるとかあり得んわ
2017/06/30(金) 07:47:46.41ID:vkcMcAZ50
>>514
は?そんなの一度仕組み作っちゃえばしめーじゃん
お前はプログラム組んだことあるのか?
2017/06/30(金) 07:49:32.00ID:vkcMcAZ50
昨日から馬鹿すぎて聞くに耐えないな
2017/06/30(金) 09:37:27.51ID:arYqdS+00
C#にエラー値ってありますか?
EPPlusを使ってExcelの値をコピーしているのですが、
WriteSheet.Cells[yy, xx].Value = ReadSheet.Cells[yy, xx].Value;
と記述した時、元セルの値が「=na()」の時、文字列の「#N/A」となってしまいます。
使用するセルに文字列が入っていると不具合となるので、
回避する為にセルを判定して「#N/A」となった時は文字列では無くエラー値を入れたいのですが、
何を入れたら良いかがわかりません。
double.NaNとかで代用では無く、エラー値の時は同じくエラー値が入る様にしたいです。
よろしくお願い致します。
2017/06/30(金) 09:42:17.70ID:J0AXjkMU0
ありません
2017/06/30(金) 10:31:02.73ID:141Xnv8f0
WriteSheet.Cells[yy, xx].Formula = "=NA()";
2017/06/30(金) 10:31:22.06ID:YD6uFwbUM
ヌルポ
2017/06/30(金) 10:39:07.92ID:W0OUnv8/0
>>520
ガッ
2017/06/30(金) 12:07:15.26ID:arYqdS+00
>>519
直りました、ありがとうございます。
2017/06/30(金) 12:19:52.56ID:tSIy+uHPa
何度も言うけど、質問文を普通に読む限りlockで解決する問題としか読めないけど、
質問者が明示的に言ってもいない要件を勝手に妄想して無駄に問題を複雑にして
何か意味あるのかね。
2017/06/30(金) 13:22:15.27ID:vkcMcAZ50
>>523
lockだと解決しねーと思うけどな
短サイクルでデータを上げまくるような
プログラムだと十分に上げる隙間ができない限り
データが上げられないスレッドができてくる
根本的な解決方法は単一スレッド側から巡回することだろ
ま、偶然でも動きゃいいのよってんであれば別にこだわらないけどね
でも仕事でやりやがったら俺が監督してたら組み直し必須
2017/06/30(金) 13:35:25.13ID:nrnKInBX0
>偶然でも動きゃいいのよってんであれば
何いってんだ??ロックで偶然とかあるのか??
ロック取得できなければただ待たされるだけだぞ。
2017/06/30(金) 13:36:03.44ID:nrnKInBX0
もちろん、タイムアウト指定してたらタイムアウトするけど。
527デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/06/30(金) 14:12:30.99ID:KBnGYkuha
>>500です
レス遅くなりすみません
SemaphoreSlimやらlockやらもう一度調べてみました
結論から言うとどちらでもうまくいってました

tcp側でもう一つ別な要因がありそっちでエラーを出してました

そのエラーはというと連続的にサーバーに送信をしていた為、使用可能なポートを食いつぶしていてしまったものでした
netstatで確認して判明しました
とりあえず上限値とtime_waitの調整でなんとかなりました
皆さんのアドバイス本当に助かりました
また別な問題が起こったらご教示下さい
2017/06/30(金) 14:22:21.77ID:vkcMcAZ50
>>525
あれ、これ状態返すんじゃなくて全部止まっちゃうやつだっけ?
こんなクソコード使うやつ周りにいないから勘違いしてた
論外だな
2017/06/30(金) 14:36:21.80ID:nrnKInBX0
>偶然でも動きゃいいのよってんであれば
ロックで偶然とか意味不明wwwwwwww

ロックの目的わかってねぇのかよww

草生えるわ。
2017/06/30(金) 14:51:30.28ID:vkcMcAZ50
>>529
気になってやってみたけど
やっぱ順番保証されない上に止まっちゃうクソコードで無事死亡じゃん
2017/06/30(金) 15:07:31.36ID:nrnKInBX0
>偶然でも動きゃいいのよってんであれば
ロックで偶然とか意味不明wwwwwwww

ロックの目的わかってねぇのかよww

草生えるわ。

>でも仕事でやりやがったら俺が監督してたら組み直し必須
これが仕事なら馬鹿な上にさらにかっこ悪く話を必死にそらそうとしてる
お前を他の人と交換必須
2017/06/30(金) 15:39:34.88ID:Hr6XSLiS0
>わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ
そもそもココが間違ってるんだよな
lock呼び出してもスレッドが変わるわけないのに・・・

lockで保護されるのは、単一スレッドじゃなくて単一資源だよ
2017/06/30(金) 15:49:27.63ID:vkcMcAZ50
>>531
でもlockもだめだよ
止まっちゃうじゃん
2017/06/30(金) 15:53:11.15ID:k4vTF7VX0
質問者は解決したと言ってるのにくだらねえプライドのせいで引っ込みがつかない社会のゴミ
2017/06/30(金) 15:57:08.81ID:vkcMcAZ50
>>534
いやでもやっぱりlockはだめだよ
2017/06/30(金) 16:00:51.19ID:wP0QbD/U0
駄目なのはおめーだよ
#を頭に突き刺して死ね
2017/06/30(金) 16:30:31.04ID:vkcMcAZ50
>>536
いやそれでもlockは駄目だよ
2017/06/30(金) 18:34:13.28ID:I/Y6yRYUM
今日の基地害 ID:vkcMcAZ50
2017/06/30(金) 20:28:04.26ID:s5ngZ7Gk0
>>524
ロックの頻度が高いようならロックを使わない方法を考えるけど、逆に頻度が低いならロックで十分だ。
単一スレッドに処理させるにしても、各スレッドを見に行くとか無駄。他の人も言ってるスレッドセーフなキューを使うだろ。
2017/06/30(金) 20:30:14.63ID:Iuzj1iSjM
C#erのレベル下がりすぎだろ
VBあがりのカスが紛れ込んだか
2017/06/30(金) 20:45:03.11ID:4HtEPBqY0
似たようなことやったけどこれlockじゃ無理だから
何度も出ているSemaphoreかSemaphoreSlim使えってことで
2017/06/30(金) 21:17:00.19ID:s5ngZ7Gk0
>>541
広義の意味でロックと書いたから、lockでもSemaphoreでもどっちでも良いけど。
lockじゃ無理ってどういうこと?await使ってるのなら確かに無理だけど。
2017/06/30(金) 21:25:36.03ID:2Da2vksVM
>>541
セマフォの資源数1の場合がlockなんだけど理解大丈夫か?
そしてこの場合資源数は1だよね
2017/06/30(金) 21:31:01.26ID:4HtEPBqY0
>>542
最初はlock使ってて後から内部の処理をawait使った非同期メソッドに変えたらそれでハマったんだった・・・失礼した
2017/06/30(金) 21:32:16.72ID:zYLvYQwXM
セマフォスリムって何?
教えてくらはい
2017/06/30(金) 22:31:57.51ID:eG/sXpk5M
>>540
お前が一番頭悪い
2017/06/30(金) 23:06:30.86ID:141Xnv8f0
スリムになったセマフォ
2017/06/30(金) 23:07:39.97ID:vkcMcAZ50
>>539
処理の順序を確定したい場合と
次のlockまでの時間が短いときにヤバそうな動作しそうに見えるけどね
2017/06/30(金) 23:11:18.99ID:A0fyCJI00
ロックロックって喪前らは矢沢か!!!!


(´・ω・`)b
2017/07/01(土) 01:47:44.04ID:soqTvVBx0
>単一スレッドから各スレッドに巡回
と言ってる人に質問だけど、
その場合、どうやって巡回対象のスレッドを特定するの?

…やっぱ、非同期スレッドから Queue にやるべき処理を入れてもらうんじゃないの…?

巡回対象となるスレッドがあらかじめ決まってるなら、そりゃ、それに合わせて何とでもできるだろうけど…
2017/07/01(土) 02:10:53.25ID:1nrcRWj9a
まだやってるんかーい

想像だけど、巡回の彼は、単にあるメソッドAが同時に複数のスレッドで
実行されるのを禁止するだけでは足りなくて、各スレッドがメソッドAを実行する
順番を制御する必要があると「忖度」したんだと思うけど、質問者はそんなこと
どこにも書いてない。

もちろん質問者の本当の要件がそうである可能性は否定できないが、
質問の文面上にはそんなこと書いてない
2017/07/01(土) 07:33:43.70ID:41xGfxtKM
そもそも「他のスレッドを巡回」という表現がよくないね
これはスレッドが他の複数のスレッドを直接管理していないと出てこない表現だ
そんな雑なコードを書いてはいけない
スレッドは他のスレッドのことを知らなくても動作するように書くこと
2017/07/01(土) 07:58:29.50ID:qXTa/p8N0
>>551
逆でしょ
> 単にあるメソッドAが同時に複数のスレッドで
> 実行されるのを禁止するだけ
しか考えてなくて>>550も指摘してるけどメソッドAの実行タイミングを考えてない
プログラムの構造も>>514, >>552が指摘してる通りメンテが面倒になるし
2017/07/01(土) 08:05:20.30ID:3TPEFdGE0
普通に
List<Unko>でいいじゃん
駄目なの?
2017/07/01(土) 08:25:07.47ID:tqv04I/40
>>554
巡回君が言ってるようにlockの取得順が問題になるような極端な状況だと間にバッファを用意したところでどうせ処理しきれない
じきにOutOfMemoryを起こす
2017/07/01(土) 08:27:49.75ID:3TPEFdGE0
>>555
Unko1つでスレッド1つだけど
そんなにたくさん作るの?
2017/07/01(土) 08:30:44.27ID:tqv04I/40
>>556
だったらロックでいいだろと言ってんの
2017/07/01(土) 08:33:11.16ID:3TPEFdGE0
>>557
それは別の話とした時
List<Unko>問題起きないよね?
559デフォルトの名無しさん (ワッチョイ 5d23-nIbb)
垢版 |
2017/07/01(土) 08:37:34.56ID:PzxrAcCk0
そもそも元々が非同期だっつってんのに処理の順番もクソもあるんか?
2017/07/01(土) 08:38:45.75ID:tqv04I/40
>>558
Unkoが各スレッドからの要求でそれがスレッドと一対一ってこと?
それ各スレッドが同時に1つしか処理を要求できないからスレッド内でリエントラントにならないし
一つだけ大量の処理を要求するスレッドがあると滞るよ?
2017/07/01(土) 08:41:16.83ID:3TPEFdGE0
>>560
それはUnkoの中身の話だよね
仕組みとしてはこれでいいっしょ?
2017/07/01(土) 08:42:02.17ID:cQ2ajDdZH
queueなのか
stackなのか
プライオリティ付きなのか
ラウンドロビンなのか


さぁどれ?
2017/07/01(土) 08:43:40.84ID:tqv04I/40
>>561
良くないよ
スレッドごとに分ける積極的理由がない
だったらわざわざ面倒な構造を作るよりスレッドに関係なく要求単位で共通のキューに放り込めばよい
2017/07/01(土) 08:45:52.42ID:3TPEFdGE0
>>563
今問題なのは動くかどうかだよ
実現できないなら議論してもしょうがないだろ
2017/07/01(土) 08:49:05.51ID:tqv04I/40
>>564
だから「動かない」理由は560で既に示しただろう
2017/07/01(土) 08:50:51.93ID:3TPEFdGE0
>>565
じゃあ議論する必要ないな
実現不可能でFA
2017/07/01(土) 09:02:35.34ID:s5XdkdiI0
今日も真っ赤にしてやがるのかキチガイの群め
2017/07/01(土) 09:22:06.32ID:41xGfxtKM
2ちゃんはコードを書きにくいからディスカッションが捗らないね
運営は古臭いシステムを捨てて早くMarkdownをサポートしなよ
2017/07/01(土) 09:26:03.94ID:7kq0BhxN0
C#(.Net4.5)でSQL Serverに読み書きしたいんですがDataSet?というのが便利なのでしょうか?
DataGridViewやテキストボックス、チェックボックス等でSQL serverを更新・追加したいのですがやったことがないのでどれがいいでしょうか?
もちろん運用テストはしっかりするつもりです
2017/07/01(土) 09:43:21.59ID:41xGfxtKM
>>569
DataSetは古いのでもう誰も使ってません
2017/07/01(土) 09:46:50.49ID:QOMwfPgTM
>>569
WinFormsは10年以上前から時が止まってるからそれでいいよ
Webに乗り換えるんならEFとかもっと今風の新しいのも選択肢に入るけど
2017/07/01(土) 10:19:32.35ID:RqnO9maa0
>>569
今やるならdapperかEFかね
未だにDataSetの呪縛に囚われ続けて辛い
2017/07/01(土) 10:52:13.85ID:yOorSSFm0
DataSet というか DataTable でいいだろ
軽いし
2017/07/01(土) 10:59:58.96ID:Aeoj/xNP0
軽い…?どこの世界の話ですか?
2017/07/01(土) 11:02:52.60ID:RqnO9maa0
>>574
データ量が少ないと軽いからプロトタイプ作成で行けると勘違いして、いざ作ると一気に遅くなったわ
2017/07/01(土) 11:06:33.55ID:3RWjHzVk0
>>569
Datasetは便利だから使ったほうがいい
VisualC#2015パーフェクトマスターにも載っているくらいだから
けっして古くないんだよ。
2017/07/01(土) 11:09:22.98ID:Aeoj/xNP0
そりゃ書籍は機能を網羅する必要があるから載せているだけだよ
「載っている=今でも使える」にはならないぞ
2017/07/01(土) 11:13:14.26ID:7wn2WOTV0
>>569
なぜ今さらサポート切れのランタイムを?
2017/07/01(土) 11:16:34.88ID:3RWjHzVk0
DataSet使わないで何使うんだよ?
2017/07/01(土) 11:49:40.14ID:41xGfxtKM
Dapperがイイね
理解が簡単だし速いし生産性も高い
2017/07/01(土) 12:45:36.61ID:TklztT9sa
各環境事でSQLかける人にはそうだろう
2017/07/01(土) 13:26:56.32ID:41xGfxtKM
SQLは環境ごとでいいんじゃないか
そんなところで互換性を確保するメリットは小さいだろう
リポジトリなどもう少し抽象的な層で互換をとろう
2017/07/01(土) 16:55:26.39ID:R3CPGyWF0
ちなみにEFは

エンティティティフーレムワークの略だからな
2017/07/01(土) 20:55:39.87ID:7kq0BhxN0
返信ありがとうございます
とりあえずDataset使ってみたいと思います

>>578
VS2010使ってるからです
2017/07/01(土) 22:24:38.81ID:E3dk6Acc0
お前ら、何使ってるの?
Dataset?ダッパー?ef?
2017/07/01(土) 22:25:43.42ID:41xGfxtKM
Dapperがベストバランスパッケージ
2017/07/02(日) 08:52:01.75ID:IJgSt27L0
http://i.imgur.com/ztvvQIS.png
このボタンを押したとき画像がunko1からunko2に切り替えるにはどうしたら良いでしょうか?
ネット上の画像を呼び出す(切り替える)ことはできるのですがデータ内の相対パス絶対パスがいまいちよくわからなくて困ってます
2017/07/02(日) 08:57:33.81ID:CReiXwHD0
>>587
ネット上の参照はやったことはないけどunko1の同じ形式のパスを適用したらいいだけでは
「データ内の」がいまいちわからないがパスが相対パスならば補完して絶対パスにするとか
ローカルでの参照ならそうする
2017/07/02(日) 09:13:50.60ID:IJgSt27L0
出来ました!
ありがとうございます!
2017/07/02(日) 10:04:30.01ID:IJgSt27L0
出来てなかった
絶対パスだと別のパソコンに移したりしたときとかに画像が読み込まれん
http://i.imgur.com/A7kdZFD.png
これをこうすればできると思ったけどこれだとエラーを吐いてしまいます
なぜでしょうか?
当方C#どころかパス云々についての知識もさっぱりの初心者なので・・・
2017/07/02(日) 10:29:02.34ID:0JAKzAeZM
>>590
まずはC#の入門書とVC#のチュートリアル本を一通り終えてきたら?
悪いけどそんなレベルでいちいち2chで質問してたら何年経っても勉強終わらんぞ
2017/07/02(日) 10:30:38.54ID:qQa06oVOM
というか2ちゃんは勉強や議論には不向き
Markdownも使えないゴミシステムなんて今や罵り合いぐらいにしか使えん
593デフォルトの名無しさん (アウアウカー Sae9-nIbb)
垢版 |
2017/07/02(日) 10:44:40.55ID:BaqIvPNda
C#を勉強し始めた初心者ですが質問させて下さい
LIST<T>に、あるクラスのインスタンスを追加していって、必要なくなったらRemoveしてるのですが、このRemoveしたインスタンスの破棄処理は明示的に行ったほうがいいのでしょうか
その場合どういう風にすればいいのか教えていただけないでしょうか
2017/07/02(日) 10:49:58.90ID:uZLVxHTaa
何を突っ込んでるかによる
PCのリソースを独占したり圧迫するようなものなら破棄作業したほうがいい
でもよくあるデータだけの小さなクラスのインスタンスはほっとけばいい
2017/07/02(日) 11:13:27.07ID:EblgvX+p0
>>593
list
2017/07/02(日) 11:13:46.07ID:qQa06oVOM
>>593
状況次第だよ
インスタンスの所有者(破棄の責任者)はそのリストなのか否か
要素のクラスがIDisposableを実装しているか否か
2017/07/02(日) 11:16:06.46ID:EblgvX+p0
>>593
listにのみインスタンスをnewしてるならlistからRemoveしたらガベージコレクションされると思うけど(タイミングは知らん)
2017/07/02(日) 11:57:12.72ID:nvssW8dPa
>>593
(1) リストから削除するアイテムの型がIDisposableを実装している
(2) リストから削除後はもう使うことはない

この2つを満たすならDispose呼んだ方がいいのかもね。

俺ならやらないけど、コード1行でも減らさないと死ぬ病気なら
拡張メソッド使ってIDisposable実装してたらRemoveと同時にDispose呼ぶメソッドでも追加するとか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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