18/07/07 23:30:31.81 iY8uTCL40.net
LINQ使った最近のデザパタ紹介しているサイトや書籍ってある?
どこもなんか古いコードで
522:デフォルトの名無しさん
18/07/07 23:40:48.02 Xo0ZcSzF0.net
>>501
誰も使ってネーからって気づけw
523:デフォルトの名無しさん
18/07/08 00:27:29.44 7kODHcAp0.net
>>501
linqの古いコードって、例えばどんなん?ラムダ使ってない奴のことかな?
524:デフォルトの名無しさん
18/07/08 00:45:39.18 ijnRC5hf0.net
>>503
日本語
525:デフォルトの名無しさん
18/07/08 02:13:34.73 8SSmHvWN0.net
性懲りもなくよう相手にするなあこのクサレ脳みそども
526:デフォルトの名無しさん
18/07/08 11:15:40.05 YcDPlOAza.net
他のスレでデザパタと略す奴は例外なくクソって言う風潮があるから
その略称は使わないほうがいいw
527:デフォルトの名無しさん
18/07/09 15:36:56.63 Uwu2BFrsM.net
LinqというかDBアクセス系のパターンの事ならリポジトリパターンやイベントソーシング・CQRSあたりかな
MSの黒本 C#実践開発手法 はどうだろう
あとRxも押さえとけば
528:デフォルトの名無しさん
18/07/09 23:28:49.95 8W0J0prF0.net
名前付きパイプでプロセス間通信するとき、できるだけ遅延を小さくするためにすべきこと、したほうがいいことがありますか?
529:デフォルトの名無しさん
18/07/10 03:23:37.00 LdlDw2V90.net
ポータブルなASP.NET実行環境はありますか?
勝手にソフトインストール出来ない環境で使いたい為、Tomcatのように、設定ファイルで設定してexe起動するだけのタイプを探しています。
530:デフォルトの名無しさん
18/07/10 03:44:47.11 wzF2q8B9a.net
>>509
.NET CoreとASP.NET Core
SCDでデプロイして内蔵サーバーのKestelで動かす
CoreはMVC系なので509が知っているASP.NETとは別物かもしれないが
531:デフォルトの名無しさん
18/07/10 07:07:05.03 1Wfv3KWad.net
formが3つがあってそれぞれ仮にa,b,cとして、a,b,cの中にコンボボックスがいくつかあってaのコンボボックスの一つにエクセルをdbで読み取って?コンボボックスに値を入れました。
以降もコンボボックスに入れてくんですけど、違いがブック名とシート名でコードをまとめたい時はどこにどのように書けばいいですか?
今はform aのloadに一つ書いてます。
532:デフォルトの名無しさん
18/07/10 08:43:35.96 wzF2q8B9a.net
class Configurations { 各コンボボックスに入れるべき値をそれぞれプロパティとして定義 }
interface IConfigurationsSource { Configurations GetConfigurations(); }
class ExcelConfigurationsSource : IConfigurationsSource {
private readonly string book;
private readonly string sheet;
public ConfigurationsSource(string book, string sheet) { this.book = book; this.sheet = sheet; }
public Configurations GetConfigurations() { return Excelシートから読み取ってConfigurationsに詰めて返す(book, sheet); }
}
こういうのを作って使い回す
533:デフォルトの名無しさん
18/07/10 10:08:29.34 DQNNzOip0.net
クラスを継承して機能を共通化するのとインターフェースで共通化するのと何が違いますか?
534:デフォルトの名無しさん
18/07/10 10:27:34.35 u496riIwM.net
いろいろなレベルでの回答があるが
インターフェースはMIX可能
継承の濫用は保守困難になりがち
インターフェース意識した方が設計的にスマートな事が多い
c#8で事情は大きく変わるが
535:デフォルトの名無しさん
18/07/10 13:38:42.06 vEF725PNp.net
クラス継承は切り離せないが、インターフェースなら切り離せる。
536:デフォルトの名無しさん
18/07/10 15:17:35.18 ptn/0Y0d0.net
>>493
即レス
537:感謝です 勉強になります ありがとうございました
538:デフォルトの名無しさん
18/07/10 15:18:53.33 6gd4tcDd0.net
え、8ってどうなるん・・・
539:デフォルトの名無しさん
18/07/10 15:59:38.63 lFSMnKMw0.net
そらもうアレよ
540:デフォルトの名無しさん
18/07/10 17:43:22.36 pIJZecgId.net
おジャ魔女どれみc#
541:デフォルトの名無しさん
18/07/10 19:00:19.81 1Wfv3KWad.net
>>512
レベルが高過ぎてさっぱりです。
これはクラス追加してクラスに書く感じですかね?
クラス=VBのモジュールって感じでいいんですかね?
542:デフォルトの名無しさん
18/07/10 19:04:58.17 WX+x+qIF0.net
>>514
> c#8で事情は大きく変わるが
C#8ではnull非許容が標準になるという噂は聞いたことがあるのですが、
この話は検索してみてもなんのことを仰っているのか分かりませんでした
とても興味があるので、ぜひ詳しく教えていただけないでしょうか
543:デフォルトの名無しさん
18/07/10 21:19:40.32 vJrIcc2p0.net
>>521
インターフェースのデフォルト実装が導入されることかな。
.NET ランタイムにも手が入るそうな。
544:デフォルトの名無しさん
18/07/10 21:45:00.39 WX+x+qIF0.net
>>522
レスありがとうございます!
ただこれだけを聞くとC#8でインターフェースの価値が更に上がるように思うのですが、
>>514さんはインターフェースの価値を説かれた上で
「c#8で事情は大きく変わる」と仰っていているので、他の機能に拡充が図られるなどで
インターフェースの価値が相対的に下がると仰っしゃりたいように感じました
実際にはそういうわけではないのでしょうか?
いずれにしても、インターフェースのデフォルト実装は便利そうで楽しみです
あと、それほどいろいろと手を入れるなら、
IList<T>が共変なIReadOnlyList<out T>と反変なIWriteOnlyList<in T>を
継承するようにするとか、そういう変更もあると嬉しいな~と素人ながら思ってみたりw
545:デフォルトの名無しさん
18/07/10 22:52:33.99 uwEab9SB0.net
めっちゃ詳しいw
546:デフォルトの名無しさん
18/07/10 23:47:58.27 vJrIcc2p0.net
>>523
IWritableListとIReadableListみたいな名前ならともかく、
それじゃわざわざOnlyって強調した単語使ってる意味がなくなるから悪手だろ
547:デフォルトの名無しさん
18/07/11 00:12:23.28 08+HRZoYa.net
>>525
既にList<>はIReadOnlyList<>を実装してるんだから今更だろ。
IList<>がIReadOnlyList<>を継承できない理由は、インターフェイスメンバの明示的実装を壊すから
IList<>に宣言されてたメンバのうちIReadOnlyList<>と被るものを全部削除したとしたら、IList<>のメンバを明示的実装している既存のクラスが全滅する
548:デフォルトの名無しさん
18/07/11 00:40:08.40 OI/RESej0.net
誤解を与えてすまん
c#8でインターフェースのデフォルト実装がサポートされるので価値は高まるという認識でok
null不許容も含めて大きく変わるねえ
549:デフォルトの名無しさん
18/07/11 00:50:36.62 OI/RESej0.net
null非許容を乱暴に説明すると
参照型の変数にnullが入らないのがデフォになる。よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。
変数にnull許可する場合には明示的に宣言が必要になる。
既存のソースに対しては破壊的変更になるからコンパイルオプションとかになるんじゃないかな。
550:デフォルトの名無しさん
18/07/11 01:02:22.00 veaNU89qM.net
OOP的にも綺麗でテーブルが正規化されてればnull非許容は受け入れられるかもね
業務システムではあまり役に立たなそうだ
551:デフォルトの名無しさん
18/07/11 01:04:51.55 zbj7oPBja.net
552:>よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。 岩永氏の例の記事にもそう書いてあるが、何度考えてもこれは逆だと思うなw いわゆる「例外を握りつぶす」筋悪コードと同じ弊害をもたらすだけだろう
553:デフォルトの名無しさん
18/07/11 01:08:15.17 veaNU89qM.net
凄まじい列数でほとんどがnullのテーブル
あれをなんとかしないとアプリケーションからnullを排除することは難しい
インフラの問題だからホスト言語のちょっとした改善でどうにかなるものじゃない
554:デフォルトの名無しさん
18/07/11 01:22:37.10 OI/RESej0.net
最近の言語がそういう流れだからだろうね
DB絡みに外部結合やORM、既存ライブラリやサービスがある以上、null考慮は回避できないだろうから使い分けになるだろうね
nullまみれのテーブルも いまだにみかけるし
新規コードでサクサク組んでいくには便利やと思う
555:デフォルトの名無しさん
18/07/11 01:24:04.27 mrqtDgK70.net
>>525
レスありがとうございます
確かに、ReadOnlyという言葉がIReadOnlyList<>を継承するものにかかっていると考えると
IList<>がIReadOnlyList<>を継承するのは妙な感じですね
ただ現実として、>>526でも指摘していただいているようにList<>はIReadOnlyList<>を
実装していますので、ReadOnlyという言葉はあくまでIReadOnlyList<>自身にかかっていると
とらえてしまってもいいのかなと考えています
その現状の言葉遣いが間違っているのだから直すべきだというご主張なら、
実現可能性は私には難しくて分かりませんが、とても興味深いご意見だと思います
>>526
レスありがとうございます
書いていただいた文章を読むと、インターフェースは継承元のインターフェースと
同じ名前のメソッドを持てない、もしくはインターフェースの明示的実装に悪影響があると
考えていらっしゃるように見受けられたのですが、この部分がよく理解できなかったので
申し訳ないのですが詳しくご説明していただけるとありがたいです
>>527-528
レスありがとうございます
私の方こそ、変な深読みをしてしまい失礼しました
私は初学者なので機能の増強は単純に楽しみなのですが、
既存のソースを多くお持ちの方にとっては大幅な変更はいいことばかりでもないのですね
>>528-531
興味深いお話をどうもありがとうございます
自分からnull非許容の話を出しておいて恥ずかしいのですが、
実はこれが具体的にどういうものなのかほとんど理解できていないのです
var a = new string[1]; は許されるのか?とか、許されるならそれは
var a = new string[1] { string.Empty }; と同じ意味なのか?とか、
もしそれが正しいなら、クラス毎に Empty 的なものを用意しないといけないのか?とか
疑問は膨らむばかりです
556:デフォルトの名無しさん
18/07/11 01:52:22.43 OI/RESej0.net
シンプルなコードで良い疑問やなあ
実際導入されたら混乱しそう…
右辺のArrayがnullを許さないからコンパイラに怒られそう
初期値入れたらいけそう
もし仮にstringの規定値がemptyになる仕様になれば初期化無しでもコンパイルとおるかも
c#7系以前と同じ挙動にするなら
var a = new string[1]?;
という記述になるはず
List系使うから配列を生で使う機会は減ったけどね
557:デフォルトの名無しさん
18/07/11 01:53:31.50 OI/RESej0.net
恐ろしい子!
558:デフォルトの名無しさん
18/07/11 04:05:50.95 xb7b/JPY0.net
C#の話じゃないかもしれませんが、
LAN上の他のPCと通信するにはTCPorUDPしかないですかね?
ポート開けようとすると管理者のパスワード要求されるので
そういうのに影響されない方法があれば教えてください
サーバー上にファイル作って共有しようかとも思ったのですが
ロックとか速度とかちょっと使いにくいので
559:デフォルトの名無しさん
18/07/11 07:45:57.48 08+HRZoYa.net
インターネットに出れるんならAWSでSQSかKi
560:nesisでも使えば
561:デフォルトの名無しさん
18/07/11 08:15:13.05 RuBHX//DM.net
>>536
RAWなら好きなもの送れるでしょ
562:デフォルトの名無しさん
18/07/11 08:54:54.59 NAmdOA29M.net
ネットワークプログラミングの定石学びたいっす
563:デフォルトの名無しさん
18/07/11 09:14:18.75 RuBHX//DM.net
レイヤー無視なら
Multi-object Multi-lingual Document Intermediary の仕様書でも
564:デフォルトの名無しさん
18/07/11 09:42:14.12 DD+vdWYvp.net
>>536
TCPやUDPじゃないと関所を通れないからなぁ
565:デフォルトの名無しさん
18/07/11 10:03:35.37 /J4Azv5gd.net
ポート開けたくないな、名前付きパイプのRemotingは?
sambaのポートが開いてりゃ疎通できた気がする。
566:デフォルトの名無しさん
18/07/11 10:03:54.68 /J4Azv5gd.net
ないな→ないなら
567:デフォルトの名無しさん
18/07/11 12:51:43.31 vn5tWIshM.net
>>536
> ポート開けようとすると管理者のパスワード要求されるので
要するになんか管理者に知られずき通信したいんだろ
悪事に加担する気はない
568:デフォルトの名無しさん
18/07/11 12:56:39.30 fg0dx/vD0.net
アホか
くだらないことを書き込む前に少しは推敲しろ
569:デフォルトの名無しさん
18/07/11 13:59:27.90 cb0VPk/Kd.net
>>544
aho
570:デフォルトの名無しさん
18/07/11 16:51:29.67 xb7b/JPY0.net
ありがとうございます
まずは名前付きパイプを調べてみます
571:デフォルトの名無しさん
18/07/11 16:58:41.62 DD+vdWYvp.net
バイブにたかしとかりょうとか名前付けて愛用してんのかなぁ…
572:デフォルトの名無しさん
18/07/11 17:39:37.83 kzvuO0/N0.net
>>534
レスありがとうございます
>右辺のArrayがnullを許さないからコンパイラに怒られそう
>初期値入れたらいけそう
確かにそんな気がしますね
でもそうなると大きな配列とは相性が悪そう・・・
>もし仮にstringの規定値がemptyになる仕様になれば初期化無しでもコンパイルとおるかも
それが一番わかりやすそうですね
ただ、stringはともかくStringBuilderの規定値とかどうすればいいのかさっぱり見当がつきません
>c#7系以前と同じ挙動にするなら
>var a = new string[1]?;
>という記述になるはず
?の位置は[1]の前ですか?
まあ書き方はともかく、もしvar a = new StringBuilder[100];とすると
自動的に100個のStringBuilderのインスタンスが作られるなら、
そのような動作を望まなければ配列の要素の型はnull許容にしたほうが良さそうですね
そうすると、例えばジェネリック型を使うときにはstringのような型とStringBuilderのような型の
区別をつけたくなることもありそうですし、ジェネリック型制約に新しく
where T : immutable(intやstringは許すけどStringBuilderは許さない)が
追加されたり・・・とか妄想してみましたw
573:デフォルトの名無しさん
18/07/11 17:57:29.81 g/mYMck9M.net
プログラム素人で恐縮ですが、for文のスコープの中に変数を宣言するとメモリの無駄使いになるでしょうか?
for(;;) int hoge =1;
のような書き方です
for文に入る前に宣言した方が作法的に良いのであればそうしたいと思い
574:デフォルトの名無しさん
18/07/11 18:16:12.97 I//Y0R5O0.net
コンパイラが最適化するのじゃないか?
初心者は、そんな事を考えずに、なるべく狭いスコープで宣言した方が良い。
処理に、10秒以上掛かるのなら、その時に考えても良いけど
「Effective 何々」などの本を読むと、書いてあるかも知れないけど
575:デフォルトの名無しさん
18/07/11 18:20:39.15 L0DC21nsM.net
>>550
C系の言語では基本的に一箇所で宣言された変数はメソッド全体で一つしか作られない
C#の場合はクロージャが絡んだりすると変わってくるけど、基本的にはそういう思想で設計されてる
気にせず必要最小限のスコープで宣言せよ
576:デフォルトの名無しさん
18/07/11 18:31:22.94 vn5tWIshM.net
>>545-546
そんなレスしかできないからお前は🙅なんだよ w
577:デフォルトの名無しさん
18/07/11 18:40:26.95 sApF7MBC0.net
>>550
IL見ればあなたの悩みは全て解
578:決しますよ
579:デフォルトの名無しさん
18/07/11 20:26:56.12 DD+vdWYvp.net
あーでも>>550みたいな書き方すると突っ返されるメーカーあるよな。
無駄な作業させてるって自覚無いんだろうかなぁ
580:デフォルトの名無しさん
18/07/11 20:31:34.49 L0DC21nsM.net
>>550みたいな書き方してるコードってたいてい他の部分もクッソ汚いから、とりあえず突き返すのはわりと賢明なやり方
581:デフォルトの名無しさん
18/07/11 20:35:01.60 DD+vdWYvp.net
スコープ毎にスタック操作なんかしないし、汚くてもオプティマイズされたら面影も無いし、イジメでしか無い罠
582:デフォルトの名無しさん
18/07/11 20:39:44.95 sCxl2UHN0.net
>>549
このレスからにじみ出る頭のよさ
583:デフォルトの名無しさん
18/07/12 00:31:45.14 07VYm5500.net
var すら毛嫌いされちゃうとこなのでコードレビューなんかやったらストレスで禿げるわ
584:デフォルトの名無しさん
18/07/12 01:31:48.84 Mt10qC0c0.net
それぞれのコーディング規約に従えばいいんじゃないですか
585:デフォルトの名無しさん
18/07/12 02:20:50.58 uvVknaw70.net
>>555
さすがに>>550のコードは例としてはあれだが
C#でforの中でしか使わん変数をforの外で定義しろと?
どんなメーカーだよ。つかメーカーってなんのメーカーだよ
586:デフォルトの名無しさん
18/07/12 05:53:25.42 ddTdn7l60.net
C#8のデフォルトインターフェースメソッドって、
インターフェースでほぼコーディングを終わらせてしまうことも可能、
って解釈で良いのかな。
587:デフォルトの名無しさん
18/07/12 06:34:40.79 0C7UQQhF0.net
クエリとlinqとlinqToXmlの違いがなにかよくわからないです
これらはなんですか
クエリはfromやselectとか思ってたのですが
"from a ~ select a"も "XXXXXX.Select(~)" の両方ともクエリ?
linqの中にクエリがある感じですか?
用語の違いを知りたいです
588:デフォルトの名無しさん
18/07/12 06:53:16.73 TSQ/qQegM.net
>>561
C組込上がりが閑職で社内システムを任されるとありそう
関数の先頭で宣言しろ宣言
589:デフォルトの名無しさん
18/07/12 07:09:00.83 8dshyEbGd.net
>>563
メソッド式とクエリ式でググれ
590:デフォルトの名無しさん
18/07/12 07:38:41.95 VF8Jnm1rH.net
NumericUpDownで、ホイール下回転で値をUpさせる方法ないですか?
591:デフォルトの名無しさん
18/07/12 08:08:47.97 CB78gZS5M.net
>>562
ライブラリ実装者が破壊的変更の影響を最小化
細かいパフォーマンスを最適化
するためのものなので乱用しないで
拡張やダイヤモンド継承による名前の重複など問題はまだ残ってる
592:デフォルトの名無しさん
18/07/12 09:04:57.23 FtAr8eR70.net
>>553
管理者のパスワードって、単なるスーパーユーザーのパスワードのことだろきっと
593:デフォルトの名無しさん
18/07/12 12:49:07.46 96DaRN210.net
だったらなんなんだよ
594:デフォルトの名無しさん
18/07/12 15:12:12.67 iIGcGb6Z0.net
久しぶりにまたC#勉強してみようかと思ってるんだけど
最近の動向ってどうなの?雑誌でもあまり見かけなくなったけど
595:デフォルトの名無しさん
18/07/12 15:52:53.09 Yg7MNvpld.net
さあ、プログラミングの雑誌読んでる奴は最近少ないでしょ
プログラミング情報は基本ネットだからな
596:デフォルトの名無しさん
18/07/12 16:16:23.83 S+gZjDN60.net
>>570
マイクロソフトはAndroidのアプリC#で作る環境起こしたり結構力入れてる
597:デフォルトの名無しさん
18/07/12 16:37:53.91 iIGcGb6Z0.net
>>572
へえ~そうなんだ
金のにおいプンプンするね
598:デフォルトの名無しさん
18/07/12 16:40:31.97 iIGcGb6Z0.net
そういえばWindowsフォンとかいうのもあったね
599:デフォルトの名無しさん
18/07/12 16:45:06.48 Mt10qC0c0.net
>>572
600:iOSもな
601:デフォルトの名無しさん
18/07/12 17:23:36.80 S4vKnl6/d.net
雑誌とか書籍とか、本屋の棚を見てると勢力図が判るね。
Python強い。
602:デフォルトの名無しさん
18/07/12 17:25:15.60 PtJZmudoM.net
MVC使ってるんですが、アルゴリズムをSQLに書くのは邪道でしょうか?
Modelを用意している時点でC♯でアルゴリズムを書くのが正攻法なのかなという気がして
でもクエリにある程度書いた方がパフォーマンスは良さそうで悩んでいます
603:デフォルトの名無しさん
18/07/12 19:07:16.04 MbhSnhO70.net
>>566
NumericUpDownの派生コントロールを作ってOnMouseWheelを書き換える
方法 : 既存の Windows フォーム コントロールから継承する
URLリンク(docs.microsoft.com)
コード例
public class NumericUpDownEX : NumericUpDown
{
protected override void OnMouseWheel(MouseEventArgs e)
{
if (null == e) return;
decimal m = this.Value;
int a = e.Delta > 0 ? -1 : 1;
m += a * this.Increment;
m = m > this.Maximum ? this.Maximum : m;
m = m < this.Minimum ? this.Minimum : m;
this.Value = m;
}
}
604:デフォルトの名無しさん
18/07/12 19:39:16.71 5nesTxgP0.net
どうでもいいことだけどEventArgsがnullで渡ってくるケースってあるの?
605:デフォルトの名無しさん
18/07/12 20:09:54.21 yTzbc7hIM.net
>>577
邪道です
ビジネスロジックがSQLを侵食すると保守性が下がりスパゲティクエリが量産されます
結果的にパフォーマンスも劣悪なものとなるでしょう
606:デフォルトの名無しさん
18/07/12 21:06:22.46 uvVknaw70.net
そのSQLはどこに書かれているのだね
607:デフォルトの名無しさん
18/07/13 06:58:05.36 DDbEgWasM.net
SQLはクエリ管理クラスでC♯で管理してます
ストアドで書かれてたらC♯がどうこういう話では無いですね
つかストアドは世間様の開発では一般的なのでしょうか
改修に弱そうなイメージがありシステム構成の検討任されたら自分なら選択しなさそうですけど
608:デフォルトの名無しさん
18/07/13 08:21:33.93 KJTjy0eMM.net
ビジネスロジックをストアドに集めるってのは
見たことあるなぁ。
既存言語はFEP構築だけに使う。
どちらかに徹底してりゃ良いんじゃね。鼻ホジ
609:デフォルトの名無しさん
18/07/13 12:34:59.94 p9f6lddDD.net
>>583
システムのリプレイスとデータベースのリプレイスのどちらが多いかだよな
後者でストアド依存は死ねると思う
610:デフォルトの名無しさん
18/07/13 14:43:56.67 0KYXvOut0.net
DBのバージョンアップじゃなくてリプレイスで
システムをリプレイスしない案件なんてほぼ考えられん
611:デフォルトの名無しさん
18/07/13 15:22:59.85 r56MKyepM.net
可能な限り全部SQLでいいよ
多くの場合SQLの方が圧倒的に簡潔だしテストも容易だし
ストアドは管理が面倒だし見通しも悪いからソースに書きたいが
612:デフォルトの名無しさん
18/07/13 16:31:35.87 JMEmIQPoM.net
SQLに書いてもいいけどシステムが死ぬまで面倒を見て、他のメンテナーに迷惑をかけないでくださいね
613:デフォルトの名無しさん
18/07/14 14:54:07.96 pS7j55swr.net
データベースにSQLite使ってるんだけど、データ量が増えたらSELECTがクッソ重くて無反応になる
無料でもっとまともなDBってないかな?
614:デフォルトの名無しさん
18/07/14 14:57:09.03 8JxBJ14s0.net
そもそもインデックスとか
ちゃんと使ってるのかね
615:デフォルトの名無しさん
18/07/14 15:00:44.83 pS7j55swr.net
616:もちろん
617:デフォルトの名無しさん
18/07/14 15:02:50.58 LIsDU/xsM.net
PostgreSQLだな
618:デフォルトの名無しさん
18/07/14 15:06:32.58 EtwCAyCb0.net
C#から使うならSQLServerでしょ
619:デフォルトの名無しさん
18/07/14 15:26:32.37 pS7j55swr.net
どちらも無料なの?
620:デフォルトの名無しさん
18/07/14 15:40:56.72 jYJ6FXN8a.net
>>579
nullで渡すと
621:デフォルトの名無しさん
18/07/14 15:44:26.58 3U2LRmJo0.net
標準ライブラリのことでは?
622:デフォルトの名無しさん
18/07/14 16:03:24.84 DkLuqI8LM.net
プライベートの開発ではpostgresql一択
623:デフォルトの名無しさん
18/07/14 16:12:40.69 XotIEGF50.net
>>588
データ量がどのくらい増えたとかテーブルのスキーマ構成とかSELECT文みてみないとなんとも言えんな
DBMS変えたら劇的に変わるもんでもないし
624:デフォルトの名無しさん
18/07/14 16:56:06.37 pS7j55swr.net
>>596
売るアプリだから無料のがよい
>>597
すまんすまん
indexの順番変えたらかなり改善した
複合indexを先に設定して、その後単一index作ってた
これを入れ替えた感じ
625:デフォルトの名無しさん
18/07/14 16:57:19.10 pGWO+29la.net
無料ならSQLServerはかなり制限がある
PostgreSQLは完全に無料で、性能・機能とも圧倒的に上
SQL ServerはWin上でGUIでお手軽に運用できるしMS製品で完結するのでドカタには愛されてる
626:デフォルトの名無しさん
18/07/14 16:59:28.09 3U2LRmJo0.net
俺はデータをカテゴリに分けてそれぞれに専用のテーブルを用意して振り分けて高速化したことある
627:デフォルトの名無しさん
18/07/14 17:06:29.29 zT+O/n6K0.net
PostgreとMySQL比べるとどんな感じ?
628:デフォルトの名無しさん
18/07/14 17:06:52.80 bK14KKak0.net
>>599
かなりって例えば?
ストアドも使えるしDBサイズも10GBまで使えるし基本問題ないっしょ。サイズ超えそうになったらバックアップDBとしてアーカイブすりゃいいしね。C#ならSQLServerがいいよ
629:デフォルトの名無しさん
18/07/14 17:09:02.22 zT+O/n6K0.net
俺もSQLServer使ってたけど10GB制限がキツイし全てのレコードを読めないと不都合だから別のDB探してたけどMySQL使おうかと思ってたところだった
630:デフォルトの名無しさん
18/07/14 17:18:11.14 DkLuqI8LM.net
MySQLは共通テーブル式が使えなくて捨てた
631:デフォルトの名無しさん
18/07/14 17:25:20.01 FtH+pgzSM.net
>>601
最近はPostgreSQLも盛り上がってるね
PostgreSQLは機能が非常に豊富で極めて柔軟、非定形データだろうが地理空間情報だろうが何でも扱える
ライセンスもMySQL(GPL)より緩い
632:デフォルトの名無しさん
18/07/14 17:25:32.60 pS7j55swr.net
>>599
まじか
postgreに変えようかな
>>602
10GBならかなり余裕あるね
ならSQLServerも良いかなあ
MySQLはWebアプリではよく使ってるけど
そもそもわかってないことがあるんだけど、SQLってSQLサーバーで動いてるわけじゃん?
SQLite以外はWinFormアプリで作ったアプリだけで動かないの?
SQLアプリみたいなのが生成されるの?
633:デフォルトの名無しさん
18/07/14 17:27:38.30 3U2LRmJo0.net
マシンにDBサーバーをたてるんだろ
634:デフォルトの名無しさん
18/07/14 17:30:16.00 zT+O/n6K0.net
>>604-605
なるほどありがとう
それならせっかくだしそっちにしてみようかな
SQLServerはEntityFramework簡単に使えたけどもPostgreSQLもライブラリとか使いやすいのかな?
MySQLは接続文字列がおかしいのかテーブル指定がおかしいのかイマイチ上手く動かせなかった
635:デフォルトの名無しさん
18/07/14 19:18:56.84 VO5okbkP0.net
ASP.NET Core MVCはオワコンになって今後はASP.NET Core Razorが主流になっていく感じですか?
636:デフォルトの名無しさん
18/07/14 19:54:51.34 GmLXhPvN0.net
>>609
お前なんか勘違いしてんぞ
637:デフォルトの名無しさん
18/07/15 10:06:31.58 vbOfg8AFM.net
今は各言語ごとにフルスタックのフレームワークがある�
638:ッど無駄に見える どれか一個がセンターにあって後は各言語対応のAPI提供というパターンにならないのか
639:デフォルトの名無しさん
18/07/15 10:20:38.72 aio6qM3qa.net
少なくとも.NETはASP.NET Coreが統一フレームワーク
640:デフォルトの名無しさん
18/07/15 10:33:05.77 X2092vNg0.net
まさに.NETのことだね
641:デフォルトの名無しさん
18/07/15 10:46:24.73 CFAGuM1zM.net
各言語ごとにフルスタックフレームあるけど
シェア3位のdjangoすら5%以下らしい
それ以下のASP.Net coreの存在意義がかなり薄いと思うけどないといけないものなのか
642:デフォルトの名無しさん
18/07/15 10:54:00.74 7Enq42ndr.net
現実
URLリンク(hotframeworks.com)
643:デフォルトの名無しさん
18/07/15 10:55:19.57 7Enq42ndr.net
Coreは存在すらしていないっぽいな
644:デフォルトの名無しさん
18/07/15 10:59:15.18 upsCSZLnM.net
検索でClassic ASP.NET/MVC/Coreは区別がつかないから混ざってるんだろ
645:デフォルトの名無しさん
18/07/15 11:08:09.00 p0LeSK9sd.net
Coreじゃなくても.NETなら多言語対応だし
646:デフォルトの名無しさん
18/07/15 12:32:26.47 mrrFOD8id.net
>>616
StackOverflowのデータ見てみろよ
647:デフォルトの名無しさん
18/07/15 12:53:44.01 7Enq42ndr.net
なんかSQLiteがおっせーって書いた者だけど、他のサーバー型SQLよりぶっ飛びで速いんだな
このまま使い続けるか
648:デフォルトの名無しさん
18/07/15 14:17:55.92 LJ5Na9vP0.net
>>620
速度求めるならメモリ使えば?
DBのinoutは別スレッドでコントロール
649:デフォルトの名無しさん
18/07/15 19:34:53.12 Bovqh3Um0.net
使ったことないからよく知らんけどローカルファイルへのアクセスだからレイテンシが小さいとか?
650:デフォルトの名無しさん
18/07/15 20:22:37.76 5Xgvchi7M.net
javaに比べると圧倒的に仕事が少ないC#ですがjavaの有償化で仕事は増えるでしょうか
651:デフォルトの名無しさん
18/07/15 20:38:51.55 BpM21w6AM.net
レガシーJavaをすぐさまC#に移植するってのは現実的じゃない
レガシーの面倒を見るためにとりあえず金を払ってライセンスを買うしかない
ライセンス買ったならじゃあいいかとなってJavaを引き続き使っていくことになる
652:デフォルトの名無しさん
18/07/15 20:54:44.00 31mTAsFB0.net
Java厨ザマアw
653:デフォルトの名無しさん
18/07/15 20:57:17.95 OJzI1T4t0.net
でもC#は無料なの?
いいえ、有償です
654:デフォルトの名無しさん
18/07/15 20:59:55.51 WCfEKFtx0.net
大人しくオラクルのケツ舐めて1CPUあたり25ドル払っとけって
655:デフォルトの名無しさん
18/07/15 21:00:24.79 31mTAsFB0.net
2ドルだろ
656:デフォルトの名無しさん
18/07/16 01:40:16.05 0WZqyTt50.net
application/jsonを使ったRPCの実装方法でスタンダードなやり方ってありますか?
ぐぐってもREST APIの実装方法ばっかり出てくるんですが…
657:デフォルトの名無しさん
18/07/16 03:10:13.20 yOmS9IaY0.net
>>629
.netならWCFかWEB API
REST APIは主流だが
規模的に保守が辛くなるなら
gRPC gatewayも良いと思う
658:デフォルトの名無しさん
18/07/16 03:53:04.58 M+rWa9nq0.net
>>609
MVCのVの部分がRazorエンジンになっただけやで。
659:デフォルトの名無しさん
18/07/16 10:04:00.08 R/aUtilHr.net
>>621
アプリ起動時とかにSQLからメモリテーブルにコピーして、追加更新削除があれば別スレッドでinoutする感じ?
660:デフォルトの名無しさん
18/07/16 15:04:39.14 f5ww7Pxw0.net
プログラミング初心者なんですが、Randomオブジェクトの扱われ方がよく分かりません
なぜ別にクラスを作らなくてもインスタンスを生成出来るのでしょうか
661:デフォルトの名無しさん
18/07/16 15:14:56.71 Tg2I8Krt0.net
>>633
「なぜ class Random { ... } とクラスを定義しなくても new Random() と書けるのか?」
という質問なら、「Random クラスは最初から�
662:闍`されてるから」が答えになると思います 質問の意図が違うなら、「XXXと書くのが正しいと思うが、実際にはYYYと書くのはなぜか?」 というように具体的なコードを交えてもう一度質問してもらえませんか?
663:デフォルトの名無しさん
18/07/16 15:17:03.84 f5ww7Pxw0.net
>>634
それで合ってます 返答どうもです
664:デフォルトの名無しさん
18/07/16 15:18:23.77 MLoWNAtR0.net
usingで指定されて無いと幾ら最初から有っても使えないけどな。
665:デフォルトの名無しさん
18/07/16 15:19:55.32 MLoWNAtR0.net
そう言う意味では、最初からusingでネームスペースが指定されているって言わないと正しくない。
666:デフォルトの名無しさん
18/07/16 15:21:33.95 fVJkfJ21M.net
JSFみたいな使いやすいフレームワークねえかなぁ
C#は言語そのもののセンスは良いけどエコシステムがショボいよな
667:デフォルトの名無しさん
18/07/16 15:50:12.73 jQHectJ10.net
>>636
namespace省略せずに書けば使えるぞ
668:デフォルトの名無しさん
18/07/16 15:55:20.48 N67OeEDm0.net
>>634みたいにも?
669:デフォルトの名無しさん
18/07/16 15:58:33.82 XBIjWYki0.net
>>640
書けないけど「使える」
>>636
> usingで指定されて無いと幾ら最初から有っても使えないけどな。
自分の書き込みぐらい覚えとけ
670:デフォルトの名無しさん
18/07/16 16:00:41.87 CrUViZU+0.net
偶にこういうコード見かけるんだけど、コーディング規約に全部書けとかあるのかな?
using System.IO;
略
System.IO.File.ReadAllBytes(hoge);
671:デフォルトの名無しさん
18/07/16 16:54:46.97 jQHectJ10.net
自分が作っていないクラスを使用するのに必要なのはアセンブリ/COMの参照設定。
(基本的なアセンブリは最初から設定されてる)
usingするかはどうかは別の話。
参照していないのにusingだけ書いてももちろん使えない。
672:デフォルトの名無しさん
18/07/16 17:47:55.17 SOPUXhzxM.net
>>642
そのスコープのFileクラスの定義が重複している場合
曖昧さを解消するために名前空間を全て書く必要がある
普通は標準ライブラリと名前が衝突する事態の方を避けるだろうけど
673:デフォルトの名無しさん
18/07/16 18:31:19.12 zG1+5npqa.net
>>642
そんな不合理な規約はないと信じたいねw
あえてフルネームで書くことを肯定できる(少なくとも否定的に思わない)ケースは
そのソースファイルでその名前空間の要素そ参照するのが1、2か所しかない場合ぐらいかなあ
意見は分かれるかもしれんが、バッティングを避ける目的ならエイリアスを使うのが普通でしょう
using IO = System.IO;
みたいに
674:デフォルトの名無しさん
18/07/16 19:06:40.67 XBIjWYki0.net
>>645
> そのソースファイルでその名前空間の要素そ参照するのが1、2か所しかない場合ぐらいかなあ
それならusingも書かないだろ、バカかよ
675:デフォルトの名無しさん
18/07/16 19:11:38.45 zG1+5npqa.net
何言ってるのか意味わからないねw
676:デフォルトの名無しさん
18/07/16 19:29:52.77 65+uaC9H0.net
その名前空間を使うのがここだけだと思ってフルで書いたが
やっぱり他でも使ったのでusing追加した
元の箇所は直していない
まあ、そんな感じじゃないかと
677:デフォルトの名無しさん
18/07/16 19:56:41.16 Tg2I8Krt0.net
>>634 に不適切なコードを書いたために混乱を招いてしまいました
また、 >>643 で適切な補足をしていただいていますが、
初めからこのような補足が必要ないようにできているだけでも
混乱は避けられたかもしれません。大変失礼しました
678:デフォルトの名無しさん
18/07/16 21:01:32.11 MLoWNAtR0.net
同じ名前のクラスがあるんだよw
だからフルネームで書かないと怒られるんだw
679:デフォルトの名無しさん
18/07/16 21:45:18.03 PnkuF1BZ0.net
>>650
あるあるw
バッティングすると悪夢なのなw
曲線をPathって名前にしてファイルパスもPathって名前にして
usingを呼んじゃってからエラーが出たぜハイ直せってやられると最悪
せめて改名してからusing呼べやクソがって思うんだが
馬鹿な奴に限ってバッティングさせるし作業手順も
680:考えない しかもそれでコミットしてくる
681:デフォルトの名無しさん
18/07/16 22:03:10.98 0I7EzBy0r.net
[]で読み込むDLLの意味がよくわからない
どこで呼んでもいいみたいだけど、あれってどういう仕組みなの?
682:デフォルトの名無しさん
18/07/16 22:12:47.48 Fqt7znsC0.net
ランタイムがLoadLibraryなりで動的にロードしてよろしくやってるだけやで
ネイティブ側を書いたことないとイメージしづらいのかもしらんが
683:デフォルトの名無しさん
18/07/16 22:24:51.27 fVJkfJ21M.net
>>651
バッティングどうこうよりもファイル操作と図形操作を同じファイル内に実装してる時点で最悪だね
誰が悪いかというとそんな設計書を書いたバカが最悪だ
684:デフォルトの名無しさん
18/07/16 22:25:49.96 N67OeEDm0.net
アホかな?
685:デフォルトの名無しさん
18/07/16 22:32:54.10 PnkuF1BZ0.net
>>654
いや、別だよ
でもたまたま引っ張ってきたusingにPathが入っててバッティングしちゃったんだ
.netframeworkにはじめから入ってるPathも入ってかなり手強かったよ
686:デフォルトの名無しさん
18/07/16 22:50:59.26 MLoWNAtR0.net
いやいや、それは例えが悪いだけで、マイクロソフト様ですら同じ名前のクラス名付けてて、たまにどっちだボケって聞いて来るからなぁ
687:デフォルトの名無しさん
18/07/16 23:09:50.26 m2D0dvJF0.net
>>638
JSFときたかwww
具体的に何が足りないと?
688:デフォルトの名無しさん
18/07/16 23:16:42.09 fVJkfJ21M.net
>>658
足りないってほどじゃないんだけどねー
直感的に挙動を理解しやすいJSFと比べてこっちはちょっと推測しにくい感じ
これを変えたいなら多分こうだろってのが閃きにくい
ドキュメントみれば解決するけど見ないでなんとなくで解決したいんだよね
689:デフォルトの名無しさん
18/07/16 23:17:22.95 m2D0dvJF0.net
>>659
具体的に
690:デフォルトの名無しさん
18/07/16 23:23:08.13 tD8bNggya.net
>>657
Managed DirectXは酷かった
嫌がらせレベル
691:デフォルトの名無しさん
18/07/17 04:59:27.29 KftlrzGo0.net
blockingcollectionを使ってキューを作ろうと思ってます
そのキューの中にデータを取り出すのではなく、データがあるかないかを確認したいのだけども
それってどうやって実現できるでしょうか?
692:デフォルトの名無しさん
18/07/17 07:44:52.51 xIcozahsa.net
>>662
できない
BlockingCollection.GetEnumeratorで取得した列挙子は既にコレクションから削除された要素を返す可能性があるから、要素の存在確認には使用できない
それが必要なら普通のQueueをロックして使おう
BlockingCollectionはProducer-Consumerパターンを実装するための特殊なコレクションで、取得と消費は基本的に分離不可能な操作として扱う
693:デフォルトの名無しさん
18/07/17 08:21:55.96 9WzYNMpJ0.net
なぜキューを使わず違うものでキューみたいなものを作るのか?
694:デフォルトの名無しさん
18/07/17 09:13:46.43 JRPSvXt/0.net
【毒素ためる、〝制汗″】 Ban、Ag、 8×4が <乳癌> <鼻炎> <ワキガ> の原因になっている!?
スレリンク(liveplus板)
くさいくさい
695:デフォルトの名無しさん
18/07/17 09:57:15.28 ZMugNBvxM.net
>>662
Count
696:デフォルトの名無しさん
18/07/17 11:05:47.08 we+kZK/d0.net
>>662
Any()はだめ?
697:デフォルトの名無しさん
18/07/17 12:01:54.65 5aCAbGPrH.net
>>633
ランダム、つまり白い悪魔と異名を取ったモビルスーツの事だ
常識なので覚えるように
698:デフォルトの名無しさん
18/07/17 12:04:20.14 5aCAbGPrH.net
>>633
ランダム、つまり疑似乱数を生成するクラスだ
疑似乱数は自前で作るのも簡単だから適当にに作って�
699:ンるのも一興だな
700:デフォルトの名無しさん
18/07/17 12:10:59.29 G5IVIkIla.net
>>667
食べるが側が自分だけじゃないなら>>663の言うととおりだめなんでしょう
その場合もコレクションに出し入れがあったことを検出する簡単な方法があれば
スキャンしている間に出し入れが行われなくなるまでリトライすることで実現できそうだけど、
そういう簡単な方法はないっぽい。
もっとも、仮に実現できたところで排他制御できないなら検査の後の状態は保証できないわけで、
どんだけ意味があるのか疑問ではある
701:デフォルトの名無しさん
18/07/17 17:47:09.52 bja0VNMZd.net
>>663
>>666
>>667
レスくれた方ありがとう
やりたいこととしてはcountとpeekを駆使することでなんとか実現できそうだという結論になりました
キューに対してpeekすると、じゃあ今度はいつ削除するの?とかなりそうだけどもpeekでなんとかします
702:デフォルトの名無しさん
18/07/17 19:12:27.90 TPR76IZRM.net
この本読み込めば中級者って本ないん?
独習C#新版と
実戦で役立つc#プログラミング
あたりですか?
703:デフォルトの名無しさん
18/07/17 19:14:26.70 LTVxWI1Y0.net
BlockingCollectionはコレクションの要素が取れるまでブロックし続けるから、peekとか削除とか考えずに済むから楽なのにな
まあ>>670の通り他と連動してコレクションにとどめておく必要があるんだろうけどさ
704:デフォルトの名無しさん
18/07/17 21:31:50.07 k6KsTxhHM.net
>>672
プログラムは本を読んだから中級者みたいな世界じゃないと思う
年間に1000行程度のアプリを10本ぐらい作って3年ぐらいしたら中級かなって思う
705:デフォルトの名無しさん
18/07/17 21:58:58.79 0bp3oS7H0.net
コピペを繰り返していたら3年やろうが10年やろうが初心者のままだぞ気をつけろ
706:デフォルトの名無しさん
18/07/17 21:59:23.64 JBBJUfmR0.net
いや、今ならVRエロゲ一本作れば中級者
707:デフォルトの名無しさん
18/07/17 22:03:58.19 vVWTH+iBM.net
むやみに書くより良書を読んだほうがいい
読んだ内容を実践して身につける
708:デフォルトの名無しさん
18/07/17 22:10:31.97 JBBJUfmR0.net
俺は~の作り方的な
作り進めていく形式のがオススメ
709:デフォルトの名無しさん
18/07/17 22:19:09.18 8FZ8qVPxM.net
~の作り方的な本は、言語が分かってない段階だと本当に手順を追うだけになってしまって何一つ頭に残らないからお勧めできない
まあ頭使わずに何かやってる気にはなれるから勉強が苦手でどうしてもモチベーションが続かない人にはいいのかもね
710:デフォルトの名無しさん
18/07/17 22:28:45.89 A75xOI8y0.net
おらにも良書おしえい
711:
18/07/17 22:28:56.55 cS4zRgZd0.net
>>674
結構ハードルが高いですね…
712:デフォルトの名無しさん
18/07/17 22:58:06.26 s7VdXjPi0.net
一番いいのは作りたいアプリがあってそれを作る。アプリ作りを通して色々考えることがでてきだろう。最初は一人よがりなプログラムになるかもしれんがそれが第一歩だな。
713:デフォルトの名無しさん
18/07/17 23:18:31.59 JTS2mYBv0.net
>>672
MSの公式ドキュメント
714:デフォルトの名無しさん
18/07/17 23:27:52.79 A75xOI8y0.net
ここまで0冊
715:デフォルトの名無しさん
18/07/17 23:32:23.19 A75xOI8y0.net
>>672
まずは独習でいいと思う
これで基本機能が理解できたら
Linqや非同期、マルチコア専門の教本もあるから気になったら読めばいい
これらは重要だし独習が終わればよく理解できると思う
実践で役立つ~はちょっとわからない
716:デフォルトの名無しさん
18/07/17 23:39:41.63 JKMrilxjd.net
書籍なんて最近手出してないけどeffectiveって無いの?
C+やstlでは結構お
717:世話になったけど
718:デフォルトの名無しさん
18/07/17 23:41:42.83 ofYg0nnt0.net
>>674
10万行の間違いだろ。
719:デフォルトの名無しさん
18/07/17 23:47:31.06 WCI1fetR0.net
>>686
昔からあるぞ。
最近のだと、More Effective C# 6.0/7.0が既に出てて、Effective C# 6.0/7.0ももうすぐ出る予定。
720:
18/07/17 23:52:58.90 cS4zRgZd0.net
>>672
独習C#新版が終わったらレポートよろしくね
721:デフォルトの名無しさん
18/07/18 00:21:32.09 WfV71rrt0.net
dotnet aspnet-codegeneratorってwindowsでしかうごかんの?
722:デフォルトの名無しさん
18/07/18 02:04:04.67 ohWLsVDp0.net
>>688
やっぱあるよね
感覚的にはeffectiveに書いてある内容がとりあえず理解できて実践しだしたら中級者なイメージ
上級者っていうとmvpクラスと同等の知識レベルとかになるのかなぁ
mvpもいろいろあって基準としては曖昧かもしれんが
723:デフォルトの名無しさん
18/07/18 02:09:13.63 ohWLsVDp0.net
1000行なんて時には1日で書く程度のアプリ10本作ったところで…
だからって10万行のアプリなんて、それほんとに10万行必要だったの?プラグイン1個居れたら数万行不要になるんじゃない?って気もする
そもそも行数で語る時点でおかしい訳だけど
プログラム未経験は別として経験者なら一言語の中級者になるのに3年もかけてたら上級者になる頃にはその言語消えてんじゃね?って思う
724:デフォルトの名無しさん
18/07/18 07:35:29.71 604NWUGLd.net
一時的にスリープのように任意のスレッドの処理を停止させて
別スレッドがある処理をしたら停止スレッドが動き始めるような形を作りたいです
waitforsingleobject以外に実現方法ありますか
725:デフォルトの名無しさん
18/07/18 07:37:13.37 gGGdDmmqd.net
>>693
なぜそんなことしたいの?
726:デフォルトの名無しさん
18/07/18 07:40:12.26 604NWUGLd.net
>>694
Aスレッド、Bスレッドがあって
Aスレッドはたまっているリクエストを非同期で投げ続けています
リクエストは一つずつ送らないといけない制約があるため
その応答が来るまでAスレッドを停止させたいです
応答というのがBスレッドの処理です
727:デフォルトの名無しさん
18/07/18 07:51:29.32 gGGdDmmqd.net
>>695
普通にasync/awaitじゃだめなの?
728:デフォルトの名無しさん
18/07/18 09:20:45.30 W2UhJLr+0.net
待機するAスレッドがUIスレッドとかいう状態でもなければ
それこそ関数直接コールでも良さそうなもんだけど
729:デフォルトの名無しさん
18/07/18 10:14:35.95 IWAo5nUlp.net
じゃあセマホ使えよ。
730:デフォルトの名無しさん
18/07/18 12:17:19.01 TKyRL/+ma.net
A案:リクエストのキューを投げる側ではなく受ける側に持たせる
B案:リクエストを投げるメソッドのデリゲートのキューをリクエストを受ける側に持たせる
731:デフォルトの名無しさん
18/07/18 13:53:18.95 imuZ+lX20.net
会社クラスを作りインナークラスで部署クラスを作ったのですが、インナークラスの使い方として間違っていないでしょうか
なんかMS意図と違う使い方をしてる気がしておりまして
732:デフォルトの名無しさん
18/07/18 14:21:30.22 JHZwBCBgM.net
間違いです
733:デフォルトの名無しさん
18/07/18 14:39:45.10 zONoZYnW0.net
IT業界は部署ごと社外に出向させられるとか日常茶飯事ですからね。
734:デフォルトの名無しさん
18/07/18 19:00:56.71 9N0yBnKk0.net
listviewを使って画像をドラッグした位置に挿入できるようなものを作りましたが、サムネイル表示(ViewプロパティをView.LargeIconに設定)だと移動後に一番後ろに来てしまいます
、どうすれば自由に画像を入れ替えれるのでしょうか?
735:デフォルトの名無しさん
18/07/18 19:50:12.60 yFSY1wbO0.net
>>692
>1000行なんて時には1日で書く程度のアプリ10本作ったところで…
これも内容によるけどな
10本作る間に誰に見られても恥ずかしくないコードが
736:書けるようになれば…
737:デフォルトの名無しさん
18/07/18 21:41:28.47 ojmeEx4e0.net
>>704
内容にもよるんだろうけれど、きちんと動くプログラムを10本完成させたっていうのであれば、それなりに評価してよいと思う。
738:デフォルトの名無しさん
18/07/18 21:49:23.42 GTM6kR3M0.net
仕事の山越えたからと社内文章読んでたら我が社のコーディング規約にvarとLINQ禁止とデカデカと書いてあってて笑ったwww
739:デフォルトの名無しさん
18/07/18 21:53:50.99 iepCQJFn0.net
就職ガチャ失敗おめでとうございます
740:デフォルトの名無しさん
18/07/18 22:21:17.43 ptS24Bkdd.net
>>706
LINQ禁止ってラムダ式使ったらだめってこと?
741:デフォルトの名無しさん
18/07/18 22:30:15.87 MKYFu03e0.net
varだめってリテラシーならラムダもダメだろうね
742:デフォルトの名無しさん
18/07/18 22:41:34.30 62X+9Moaa.net
短いコードのアプリでもちゃんと一般人の使用に耐えうるようになってるならいいだろう
機能的には十分でも無秩序にボタンが並んでるアプリは見ててつらい
743:デフォルトの名無しさん
18/07/18 23:09:23.95 /cNHsX3ta.net
コントロールそこそこおいたまともなアプリなら1000行じゃおさまらんやろ
744:デフォルトの名無しさん
18/07/18 23:29:19.34 p8keSf810.net
>>706
C#の公式コーディング規約に真っ向から対立www
745:デフォルトの名無しさん
18/07/18 23:39:58.45 rt2OOdjJ0.net
ラムダ式禁止とかC#使う価値半減だな
746:デフォルトの名無しさん
18/07/18 23:43:15.56 dMzTHkZAM.net
λ縛りはBダッシュ縛りマリオぐらいキツイ
747:デフォルトの名無しさん
18/07/18 23:46:14.58 L7ofGWBt0.net
h
748:デフォルトの名無しさん
18/07/19 00:18:15.44 mgU85F4C0.net
varってスコープが決まってたりよく使うもんだと思ってるんだけど
違うん?
あとコンパイル時に推論されるから実行速度には影響ないって考えていいの?
749:デフォルトの名無しさん
18/07/19 00:29:07.38 iwebbGhU0.net
>>716
明示的に型を示しても実行速度は変わりません
750:デフォルトの名無しさん
18/07/19 00:29:37.74 mgU85F4C0.net
>>717
ありがとうございます
751:デフォルトの名無しさん
18/07/19 00:34:23.22 4jMcHp760.net
var myTable = new Dictionary<string, string>();
myTable.Add("Hokkaido", "Sapporo");
myTable.Add("Iwate", "Morioka");
myTable.Add("Miyagi", "Sendai");
//*1
var b = myTable.ContainsKey("Iwate");
if (b == true)
{
//*2
var s = myTable["Iwate"];
MessageBox.Show(s);
}
Dictionaryから特定の要素を探して、あれば表示するんですが
この*1 *2 をLINQを使って1行にしたいんですが、どうすればいいですか?
752:デフォルトの名無しさん
18/07/19 00:38:57.36 5TJBBc7u0.net
継承について
スーパークラスAに始まり
class B : A
class C : B
class D : C
となった場合、
Dクラス内でAやBのクラスのフィールドやメソッドをを使いたくなった場合には
それぞれをインスタンス化をすれば使えると思いますが、
継承されていない場合はどうすれば良いのですか?
例えば、
スーパークラスX
class Y : X
class Z : Y
とい場合、class Aのメソッドやフィールドを使いたくなったときは、
どうやってクラスAを持ってくるのでしょうか?
継承をしなくても、そのクラスのメソッドやフィールドを持ってくる方法はありますか?
753:デフォルトの名無しさん
18/07/19 00:46:06.47 9fGOJ2HHa.net
コンポジション
ZのフィールドやプロパティにAをもたせるだけ
754:デフォルトの名無しさん
18/07/19 00:56:15.63 OslD0F820.net
>>719
LINQ は集合に対して使うものなので、その例だと必要ない
if (myTable.TryGetValue("Iwate", out var s))
{
MessageBox.Show(s);
}
対象が�
755:。数あるならこう var list = new[] { "Hokkaido", "Iwate", "Tokyo" }; var q = list .Where(x=> myTable.ContainsKey(x)) .Select(x=> myTable[x]); foreach (var s2 in q) { MessageBox.Show(s2); }
756:デフォルトの名無しさん
18/07/19 01:05:12.94 EPnya5cJa.net
>>719
LINQ全く関係ないけど比較的新しいC#ならこう書ける
if (myTable.TryGetValue("Iwate", out var s)) MessageBox.Show(s);
どうしても単一ステートメントにしたいなら
myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
(myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す
757:デフォルトの名無しさん
18/07/19 07:22:53.40 Y653MTcJd.net
>>696
awaitでは上手く実現できなさそうな構造でした
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
monitorクラスを使って実現できそうだなとなりました
ただこれのシグナルを投げるpulseとpulseallの違いがよくわかりません
pulseは変数で渡したオブジェクトのスレッドを、pulseallは渡すオブジェクトとか関係なくwaitで止まってるすべてのスレッドを動かす?
758:デフォルトの名無しさん
18/07/19 07:52:34.10 pmdFJ8GPd.net
>>724
>awaitでは上手く実現できなさそうな構造
なぜ?
759:デフォルトの名無しさん
18/07/19 07:53:35.73 EPnya5cJa.net
>>724
つまりProducer-Consumerだろ?
まさにBlockingCollectionのユースケース
760:デフォルトの名無しさん
18/07/19 10:16:19.48 cAPUq0O30.net
Aそのものは非同期(バックグラウンド)で動く必要があるとして
そもそもBが非同期で動く必要性がわからん
かならず応答きてから次をよぶんだろ?
761:デフォルトの名無しさん
18/07/19 11:39:51.48 wWZN809Va.net
むしろ一番の疑問は、
>リクエストは一つずつ送らないといけない制約がある
のであれば、キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
なぜリクエストを送る側に受ける側の都合に合わせる負担をさせるのか、
ってことだと思うけど、まあ話が曖昧過ぎてよくわからんね。
762:719
18/07/19 12:02:04.85 4jMcHp760.net
>>722
自分のコードだと野暮ったくて古い感じがしたんですが
out var なるものを使ってすっきりさせるんですね
>>723
最近、ラムダ式やLINQを始めたんで↓みたいにメソッドチェーンで繋げたかったんですが
これだとやりすぎなんですねw
>> myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
>> (myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
>> とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す
ありがとうございました
763:デフォルトの名無しさん
18/07/19 12:23:58.43 apArmWopd.net
見やすくしたり行数減らす為の機能なのに一文に無理やり詰めたら見づらいだろうしな
LINQ使わなくても
;で終わらせた文を一列にずっと書き続けてたらなんだこいつってなるだろうし
764:デフォルトの名無しさん
18/07/19 12:45:19.73 7c8TqsUTM.net
MQ使えよ
765:デフォルトの名無しさん
18/07/19 13:14:15.48 kD3lyTPJr.net
varのメリットってなに?
766:デフォルトの名無しさん
18/07/19 14:01:22.48 goaSBPuMd.net
>>732
定期的にこのスレを荒らすメリットがある。
767:デフォルトの名無しさん
18/07/19 14:35:28.55 3tSlXwR10.net
10年で1スレも消費できないムラダ厨がまた初心者スレで暴れてるのか。
768:デフォルトの名無しさん
18/07/19 15:40:49.42 afTcWGfVp.net
>>728
送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
769:デフォルトの名無しさん
18/07/19 16:09:05.04 wWZN809Va.net
>>735
意味わかんないよ
キューが満杯ならエンキューできないだけ。
そして、キューが満杯になるような事態が起こるかどうかは、キューを送る側受ける側
どちらが持つかという設計の問
770:題とは何も関係がない。 送り側が持てばそんな事態は起こらない、などとはまったく言えない
771:デフォルトの名無しさん
18/07/19 16:13:58.11 GVBKISLp0.net
共有メモリにFIFO作りたいのでサンプルコードください
772:デフォルトの名無しさん
18/07/19 19:27:54.48 FFg3mKaqa.net
>>737
基本的にスレチだな
773:デフォルトの名無しさん
18/07/19 20:33:54.32 AM4tPqCx0.net
>>737
マルチ乙
774:デフォルトの名無しさん
18/07/19 20:34:49.77 m5MPu7YPM.net
バックグラウンドジョブをメモリに置いて管理するとクラッシュした時につらいのでやめてください
775:デフォルトの名無しさん
18/07/19 23:06:52.57 afTcWGfVp.net
>>736
少なくとも送る側が待てばたまらないし、待たすからには大元まで遡って待たせることが出来る。
受け側で貯めちゃうと、そんなコントロールすらできない。
776:デフォルトの名無しさん
18/07/19 23:10:07.57 3HXgvZll0.net
>>737
MemoryMappedFileクラスで共有メモリを作って、そこにリングバッファを作れば良い。
サンプルコード? と言う名の丸投げは知らんw
777:デフォルトの名無しさん
18/07/19 23:16:09.86 GVBKISLp0.net
>>742
ありがとうございます
778:デフォルトの名無しさん
18/07/19 23:24:45.38 OO5CyzUia.net
>>741
何を言ってんの。
ちゃんと自分の頭で考えて言ってる?
キューの容量が100だとする。
リクエストが100まで溜まってしまうかどうかは、キューをどちらが持つかと関係ないでしょ。
スループットはリクエストの処理能力で決まるんであって、キューをどっちが持つかで決まるんじゃない。
当たり前でしょ。
送る側が待てばたまらない?
それは受ける側がリクエスト拒否したらたまらないと言ってるのと同じ
君の世界じゃ、バケツリレーの余分なバケツの置き場所を送り元におくか送り先に置くかで
バケツの輸送能力(単位時間あたりの送れる水の量)が変わるの?
変わるわけがないでしょ
頼むよマジで
779:デフォルトの名無しさん
18/07/20 00:04:31.35 K42rKqTp0.net
>>721
ありがとうございます
すみません、コンポジションというのはどういう手法なのでしょうか?
調べてはみたのですが解説しているサイトが見つからなくて・・・
780:デフォルトの名無しさん
18/07/20 00:15:51.43 v/t2rOLx0.net
>>745
クラスのインスタンスをメンバ変数などに設定して持つ
781:デフォルトの名無しさん
18/07/20 00:16:43.45 Cn0RK5hEM.net
配置計画
GOFはそちらを優先して説明しているが
782:デフォルトの名無しさん
18/07/20 01:07:34.53 AsTO3swr0.net
持つと待つ
混ざりすぎじゃねぇの?
待つって言いたいんだよね?
783:デフォルトの名無しさん
18/07/20 06:49:01.24 rjUp7fMrM.net
きたです
URLリンク(i.imgur.com)
784:デフォルトの名無しさん
18/07/20 09:57:40.63 KW0DEJnu0.net
>>748
>>744の文中の持つは持つで間違ってないと思う
785:デフォルトの名無しさん
18/07/20 10:43:27.30 aSukBuZjp.net
>>744
だから、貯め無い様にするには、送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話。
わかる?
通信のフローコントロールの話と同じなんだよ?
786:デフォルトの名無しさん
18/07/20 10:47:52.01 j2kgPlBya.net
>>751
まだ言ってるのか。
君の世界では
>送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話
これが可能かどうかはリクエストのキューをどちらが持つかに依存するのか。
キューをリクエストの受け側が持ったらそれは出来ないのか。
意味が分からないよ
何が
>通信のフローコントロールの話と同じなんだよ?
だw
馬鹿過ぎて笑える
787:デフォルトの名無しさん
18/07/20 10:50:07.22 GHEf7JCUM.net
よそでやってくんねーかなクソカス
788:デフォルトの名無しさん
18/07/20 10:50:53.38 aSukBuZjp.net
おまえ、目悪過ぎて呆れるわ。
持つなんて一言も言って無いだろw
待つだw マツ。
キューをどっちが持ってるかなんて話はしてない。
789:デフォルトの名無しさん
18/07/20 11:06:3
790:9.88 ID:KI/QuNIvM.net
791:デフォルトの名無しさん
18/07/20 11:16:02.27 aSukBuZjp.net
>>755
まあ普通は受け取る側に郵便受けが無いと受け取る人はいちいち局留めの郵便を受け取りに行かなきゃならないんだけど、まあ、それはどちらでも機能するからあんまり争点にはならないけどね。
792:デフォルトの名無しさん
18/07/20 13:07:56.71 aSN8UD58d.net
バケツリレーの喩えでもスループットは変わっちゃうんだよな。
受け側に送信側が送信する総量より大きいバッファを持てば、スループットは水の入ったバケツを運ぶ時間に依存するだけで済む。
キューがそれより遅ければバケツを引き渡すために時間が余計にかかるわけだから、スループットは落ちる。
送信側にキューを持ったところで、送信側は送信処理に対して同期的に処理しないだけで済むだけで、そのキューからの送出がどんどん遅れるだろう。受け取ってくれないなら。
793:デフォルトの名無しさん
18/07/20 13:54:59.01 gB9GbXMP0.net
>>693,695「スレッドを協調して動かしたいです、制約あるんで」
凡人の回答「○○使えよ」
天才の回答「制約が悪い」
794:デフォルトの名無しさん
18/07/20 21:28:53.81 OAXfUTo30.net
c=(a*a+b*b)
c=System.Math.Sprt(c)
これでcの平方根を出そうとしたのですがSystem.MathにSprtの定義がありませんと出ます
sharedevelopを使っています
795:デフォルトの名無しさん
18/07/20 21:32:35.58 XkM+nwLwM.net
SQRT
796:デフォルトの名無しさん
18/07/20 21:35:00.80 6RzmSKAyM.net
エディタの不具合だろ
SharpDevelopなどという化石は今すぐアンインストールしてVSかVSCodeを使え
797:デフォルトの名無しさん
18/07/20 21:44:14.53 XkM+nwLwM.net
平方根の綴りが違う
798:デフォルトの名無しさん
18/07/20 22:17:34.54 7jIkQpVM0.net
square rootだからねぇ
799:デフォルトの名無しさん
18/07/21 00:28:32.93 WdWG9X6t0.net
ありがとうございます 解決しました
800:デフォルトの名無しさん
18/07/21 06:52:38.43 HGZKU0EK0.net
スパート!
801:デフォルトの名無しさん
18/07/21 13:53:42.54 aw31/LTY0.net
>>754
もともと
>キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
にたいして
>送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
ってレスしてるのが発端なんだが
どうでもいい良いしよそでやって欲しいけど
802:デフォルトの名無しさん
18/07/21 14:14:10.21 IqGIA9LU0.net
話題が一変してんのにわざわざ掘り返すなよw
言ってる事とやってる事が矛盾してんぞw
803:デフォルトの名無しさん
18/07/21 15:42:07.60 8fBGWCJL0.net
レスバトルって奴だろ
最後に言及した方が勝ちなんだって
これ見るといつも思うが、こういう馬鹿には自分自身を見る自意識がないのかね
804:デフォルトの名無しさん
18/07/21 20:00:10.16 rsQP0F780.net
たすけて!
Parallel.ForEachの中でデータグリッドの内容を更新してるんだけど
途中で爆発します
データグリッド全体に✕って出て非表示になる
データグリッドの更新処理はlockで囲ってても競合は起きちゃうものですか?
805:デフォルトの名無しさん
18/07/21 20:05:25.49 CBiNHREt0.net
まず原因を切り分けろ
Parallel.ForEachを外しても爆発するか確認するんだ
806:デフォルトの名無しさん
18/07/21 20:07:27.16 rsQP0F780.net
>>770
パラレルの外出すと機能するけど
そうすると全処理終わってから一回しか更新されない…😌
807:デフォルトの名無しさん
18/07/21 20:08:57.28 gktKld7A0.net
>>771
UIはUIスレッドからしか操作出来ない
Parallel.ForEachの処理は別スレッドで実行される
808:デフォルトの名無しさん
18/07/21 20:10:43.13 BEEMYUE30.net
>>771
Action<TLocal> local
809:Finally の引数をとるオーバーロードを使ってみたらどうでしょう?
810:デフォルトの名無しさん
18/07/21 20:10:44.76 H6KFndt4M.net
>>768
君のレスを見るといつも思うが、こういう特徴のある口調のレスを繰り返す人には自分自身を見る自意識がないのかね
811:デフォルトの名無しさん
18/07/21 20:10:59.84 nH897ECr0.net
invokeするか、ContextにPostするしか無いんじゃないかな
812:デフォルトの名無しさん
18/07/21 20:22:09.68 3bWsh9tI0.net
>>774
>>774
813:デフォルトの名無しさん
18/07/21 20:22:10.55 //qCwfF7a.net
爆発w
814:デフォルトの名無しさん
18/07/21 20:24:00.77 rsQP0F780.net
>>772
>>773
>>775
Invokeでググりました
まさにこの疑問を解決するための機能でした
有難う御座います
815:デフォルトの名無しさん
18/07/21 20:35:04.73 BEEMYUE30.net
私は >>773 ですが Invoke について自分があまり良く分かってない気がしてきたので
詳しい方がいらっしゃったら教えてください
UIスレッドで Parallel.ForEach を呼ぶとUIスレッドをつかんだまま並列処理が実行されて、
その並列処理のスレッドで Invoke を使うとデッドロックしてしまう気がするのですが
実際はそういうことはないのでしょうか?
816:デフォルトの名無しさん
18/07/21 20:36:04.76 aw31/LTY0.net
マルチスレッドにしてInvokeしまくると結局パフォーマンスがガタ落ちしたりするがな
817:デフォルトの名無しさん
18/07/21 21:15:58.91 BEEMYUE30.net
>>779 です
WPF で下のようなコードを実行してみたらやっぱりデッドロックしてしまいました
Invoke はそれなりに慎重に使わないといけないみたいです
void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Dispatcher.Invoke(() => { }));
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
ちなみに Enumerable.Repeat(0, 2) の部分を変えると以下のような挙動でした
Enumerable.Repeat(0, 0) に変える → デッドロックしない
Enumerable.Repeat(0, 1) に変える → デッドロックする
new int[] { } に変える → デッドロックしない
new int[] { 0 } に変える → デッドロックしない
new int[] { 0, 0 } に変える → デッドロックする
818:デフォルトの名無しさん
18/07/21 21:16:52.59 1oayVCQs0.net
>>778
いいってことよ(´・ω・`)b
819:デフォルトの名無しさん
18/07/21 21:18:17.40 nH897ECr0.net
>>779
並列処理はUIスレッドではないスレッドで行われるよ。
いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
UIスレッドを掴んだままの意味がわからんが、挙動が謎なら、ブレークポイントつけて実行して、どのスレッドが何をしてるかを把握してはいかがだろうか。
今どのスレッドを使ってるかは表示されてるから。
820:デフォルトの名無しさん
18/07/21 21:20:54.98 nH897ECr0.net
WPFかあ
821:デフォルトの名無しさん
18/07/21 21:25:21.58 VW1YO4fA0.net
Windows版VSCodeで、monoを構文解析用のコンパイラとして指定することってできないのかな?
Unityの.Net4.0用プロジェクトで、数ヶ月前までは、.Net3.5用のSystem.Data.DLLを読み込んでくれたのにさあ
VisualStudioを更新したら構文解析用のコンパイラが変わったのか、古い.net3.5用のDLLを読み込んでくれなくて赤波線だらけになっちゃったぜ
4.0用のDLLもあるわけだけど、それを入れるとUnityのmonoの方でなぜかエラーを起こすし・・・どうしたら良いものか・・・・
822:デフォルトの名無しさん
18/07/21 21:33:11.65 BEEMYUE30.net
>>783-784
レスありがとうございます
> いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
>>781 で new int[] { 0 } だとデッドロックしないあたり、まさにそんな感じですね
> WPFかあ
>>769 でデータグリッドと書かれていたので、
今の Windows フォームなら DataGrid ではなく DataGridView かなと思って
WPF の方で試してしまいました(汗
Windows フォームだと挙動が変わるならそれも知っておきたいので
今からそっちでも試してみ
823:ます
824:デフォルトの名無しさん
18/07/21 21:36:50.95 BEEMYUE30.net
Windows フォームで試してみたのでご報告を。
以下のコードを実行してみた結果、やっぱりデッドロックしてしまいました
Enumerable.Repeat(0, 2) を変えたときの挙動も >>781 と同じでした
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
825:デフォルトの名無しさん
18/07/21 22:26:34.46 rsQP0F780.net
えーわからん…
ちなみにフォームですビューです
つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか
826:デフォルトの名無しさん
18/07/21 22:44:23.68 BEEMYUE30.net
>>788
あくまで私一人の考えですが・・・
[1] Invoke を使うと >>779 に書いたような理由でデッドロックするので
Parallel.ForEach でUIスレッドを使いたいなら >>773 のようにすべき
[2] しかし、同じく >>779 に書いたように Parallel.ForEach はUIスレッドを
つかんだまま並列処理を行うのでデータグリッドの更新処理だけ
Parallel.ForEach から切り出してもほとんど同じなのでは?
(一応 localFinally 中も他のスレッドは動けるので
そこで更新処理を行う方がいい場合もあるかもしれない)
[3] 並列処理が必要なほど大きな処理を行うなら、
一度UIスレッドを手放す選択肢も考えてみては?
ただ、Invoke がダメだと考えている人間自体が私だけのような気もするので
他の方の意見も聞いてみたほうがいいと思います
あと、[3] に関しては場合によりけりだと思うので、
具体的な処理内容を教えていただければ私の考えをお伝えしたいと思います
827:デフォルトの名無しさん
18/07/21 22:55:07.29 gktKld7A0.net
>>787
そのコードだと、button1_Click()がずっとUIスレッドを握ったまま。
だから、Parallelの別スレッドでInvoke()しようとしてもUIスレッドに遷移出来なくて固まる。
828:デフォルトの名無しさん
18/07/21 23:00:46.86 gktKld7A0.net
既に>>779に書いてあったね。その通り。
829:デフォルトの名無しさん
18/07/21 23:10:20.56 BEEMYUE30.net
>>790-791
レスありがとうございます
>>779 の考えで正しいのか不安だったのですがお陰様で自身が持てました
他に何かおかしなことを言ってしまっていたら教えていただけると嬉しいです
>>788
>>789 はレスとしてとっ散らかっている気がしてきたので一問一答で答えてみます
> つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
Parallel を UI スレッドで実行する場合は悪手というか、致命的だと思います
> それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
それなら期待通りの動作にはなると思います。ただ、確かにあまりいい方法ではないと思います
> uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか
正しく Invoke を使えば問題ないと思います
しかし今回の件からもわかるように、Invoke を正しく使うのはなかなか難しいようです
830:デフォルトの名無しさん
18/07/21 23:21:21.79 R8KbBSh90.net
.Invokeではなく.BeginInvokeを使うのはどう?
831:デフォルトの名無しさん
18/07/21 23:30:54.97 BEEMYUE30.net
>>793
それって
> それともThread生成してその中でParallelすれば良かったり…?
よりも更にワチャワチャする気がするのですがどうなんでしょう?
ワチャワチャって具体的にどういうことなのか
説明を求められれば頑張ってみようと思いますが、
自分の考えがあっているかも、それをうまく説明できるかどうかも
自信がないので、詳しい方の意見を聞けると嬉しいです
832:デフォルトの名無しさん
18/07/21 23:41:01.32 //qCwfF7a.net
>>794
そんな難しい話じゃないっすよw
BeginInvokeは非同期に実行される、つまりキューにデリゲートを入れたらすぐに処理を返すので
Invokeのように自分で自分の終了を待機する状態に陥らない
833:デフォルトの名無しさん
18/07/21 23:43:41.94 rsQP0F780.net
>>792
有難う御座います
これで行けたので実装試してみます
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Task.Factory.StartNew(() =>
{
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
}
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
834:デフォルトの名無しさん
18/07/21 23:55:52.12 BEEMYUE30.net
>>795
レスありがとうございます
おっしゃる通りBeginInvokeはキューにデリゲートを入れたらすぐに処理を返すので
次から次へとキューが入って大変なことになりそう�
835:E・・と思ったのですが、 そんなに心配することではないのでしょうか >>796 それで一応動くと思いますが、Parallel.ForEach が終わる前に 二つ目の MessageBox.Show の行に移るので注意してください ・・・というか、localFinally を使ったり更新処理だけを切り出したりはダメっぽいですか? ダメだと考えられた理由を教えていただければ何かアイディアを提供できるかもしれません
836:デフォルトの名無しさん
18/07/22 00:03:07.23 qjdpSLXF0.net
>>797
データグリッドビューは進捗状況を見るために更新していて
1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
ダメではなく単純に自分が分かってないだけです
この処理ならlocalFinallyが最適かもです
深く調べてみます
837:デフォルトの名無しさん
18/07/22 00:13:38.17 IU6x2eOV0.net
>>798
> データグリッドビューは進捗状況を見るために更新していて
> 1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
進捗状況の確認が必要なほど1行あたりの処理に時間がかかる理由は何でしょうか?
もしその理由が IO など、CPU 以外のところにあるのだとすれば、
Parallel.ForEach を使うこと自体を見直したほうがいいかもしれません
> この処理ならlocalFinallyが最適かもです
正直なところ、更新処理だけ切り出す方法よりも localFinally の方が
適切なケースはまれだと思います
ただ、localFinally の使い方がわかれば更新処理を Parallel.ForEach の外に
切り出す方法もわかると思うので、とりあえず調べてみて損はないと思います
838:デフォルトの名無しさん
18/07/22 00:23:24.78 qjdpSLXF0.net
>>799
圧縮ファイルを解凍して中のファイルを加工して再び圧縮し直す
これで1タスクです
1ファイル200MBほどで100ファイル以上処理することが多いです
圧縮解凍、加工は外部ツールを使用しててProcessStartInfoで処理されます
839:デフォルトの名無しさん
18/07/22 00:35:58.51 IU6x2eOV0.net
>>800
なるほど~
CPU 処理も IO もあって微妙なところですね
ちなみにその外部ツールはマルチスレッドを使うオプションはないでしょうか?
(例えば 7-zip.exe だと -mmt がそれにあたります)
もし外部ツールがマルチスレッドに対応してるなら、
並列処理はそっちに任せてしまうというのはどうでしょう?
または、外部ツールではなく SharpCompress のようなライブラリを使うことができれば、
C# によるより細かい制御も可能になると思います
840:デフォルトの名無しさん
18/07/22 00:37:18.94 gDKcX53ba.net
汎用的なものとは思えないし、動けばどうでもいいだろ
俺ならそういうのはいちいちGUI付けずにコンソールでやっちゃうな
841:デフォルトの名無しさん
18/07/22 00:45:55.06 IU6x2eOV0.net
>>800
それともう一つ、外部ツールを呼び出すのにデフォルトの ParallelOptions で
Parallel.ForEach を呼び出すのはさすがにまずいと思います
ParallelOptions 自体に MaxDegreeOfParallelism というプロパティがありますし、
ParallelOptions の TaskScheduler プロパティに以下のような自前のスケジューラーを
設定すればより柔軟な並列処理を実現できると思います
同時実行の程度を制限するタスク スケジューラを作成する
URLリンク(msdn.microsoft.com)(v=vs.100).aspx
>>802
それは確かにw
完成したソフトによって得られる利益よりソフトを作るコストのほうが大きくなってしまったら
意味がないですからね
(ただしソフトによって得られる利益には開発者のスキルアップも含まれる・・・と言ってみたりw)
842:デフォルトの名無しさん
18/07/22 00:48:52.21 qjdpSLXF0.net
>>801
7zip使ってます
スレチになるけど
mmtは一つの処理をマルチに実行するものではないでしょうか
圧縮形式は決まってなく複数あるので7zipを使用してます
zip rar lzh以外にも色々
843:デフォルトの名無しさん
18/07/22 00:51:33.52 qjdpSLXF0.net
>>803
タスクスケジューラー調べてみます良さそうですね
i7使用しててMaxDegreeOfParallelismは常に8で実行してます
8スレッドで画面カッチカチで処理してます
暴力です
844:デフォルトの名無しさん
18/07/22 00:54:31.49 IU6x2eOV0.net
>>804
845: > mmtは一つの処理をマルチに実行するものではないでしょうか その通りです したいことが「進捗状況を表示できるようにすること」と「並列化により処理時間を短縮すること」 だとすれば、それで問題ない(というかむしろその方が望ましい)の思うのですがいかがでしょうか?
846:デフォルトの名無しさん
18/07/22 00:59:41.83 IU6x2eOV0.net
>>805
MaxDegreeOfParallelism を使ってらっしゃるなら
とりあえず致命的にまずいことはないと思います
ただ、CPU だけじゃなく、同時に8つのファイルの読み書きを
求められる HDD さんの気持ちも考えてあげて・・・w
847:デフォルトの名無しさん
18/07/22 01:01:31.55 qjdpSLXF0.net
>>806
後続の加工処理もありエラー監視も含むので進捗知りたいです
848:デフォルトの名無しさん
18/07/22 01:03:03.89 SZ8yn9810.net
>>798
localFinallyよりasync/awaitの方が分かりやすいと思う。
private async void button1_Click( object sender, EventArgs e )
{
MessageBox.Show( "このメッセージは必ず表示される" );
await Task.Run( () =>
{
Parallel.ForEach( Enumerable.Repeat( 0, 2 ), i => Invoke( new Action( () => { } ) ) );
} );
MessageBox.Show( "デッドロックするとこのメッセージは表示されない" );
}
849:デフォルトの名無しさん
18/07/22 01:04:00.97 gDKcX53ba.net
makefile使えば?
数行のMakefile書いて make -j8 するだけだよ
850:デフォルトの名無しさん
18/07/22 01:04:22.38 qjdpSLXF0.net
>>807
解答先は8GBのRamディスクです
メモリに物理ファイルおいてでここで加工して再圧縮してその後HDDに移動させてます
851:デフォルトの名無しさん
18/07/22 01:18:41.37 IU6x2eOV0.net
>>808
Parallel.ForEach を使わなくてもそれはできると思うのですがいかがでしょうか?
>>809
確かにおっしゃる通りですね
後は好みの問題ですが、やはり私は1行ごとに Invoke するよりも
パフォーマンス的に有利な localFinally や更新処理の切り出しを推したいですw
>>811
なるほど!そうすれば外部ツールを使っても HDD へのアクセスだけ別に処理できますね
ただ、HDD へのアクセスを別にしようという意識をお持ちで、それだけのスキルもあるのなら、
外部ツールにこだわる必要はないのでは・・・という気もします
あと、メモリは HDD よりはずっと速いですが、CPU キャッシュとかの関係でやっぱり
8 個のファイルを同時に読み出すよりは1つずつの方が良いような気がします
852:デフォルトの名無しさん
18/07/22 01:27:28.49 IU6x2eOV0.net
>>809 >>812
いや、でも進捗状況を表示するとなると結局どこかで await は使うことになりそうですね
ただ私としては >>800 のような処理なら Parallel.ForEach は必要ないと考えていて、
foreach (ファイルのループ)
{
foreach (進捗状況のループ)
{
await (進捗状況の更新待ち);
(進捗状況を画面に反映);
}
(1ファイルの完了を画面に反映);
}
のような感じで十分だと思うのですが、どんなもんでしょうか?
853:デフォルトの名無しさん
18/07/22 01:35:51.92 eU7Qw5rc0.net
そんな処理速度気にするなら複数PC用意できたりしないのかな?
たぶん内製ツールだと思うけど、そういうのって長期保守とかしないならシンプルでさくっとやれる方向を模索したほうがいい気が…
研究開発兼ねてとかだったらいいんだけど
854:デフォルトの名無しさん
18/07/22 01:43:37.75 qjdpSLXF0.net
>>812
そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
別の手段があればコレに拘ることはないと思ってます
>>813
cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
その中で最適化してきたので
localfinally使用したときと
1ファイルの処理の差も検証してみたいと思います
>>814
ただの趣味なんですPC一台で
複雑でも効
855:果があれば試したいと考えています
856:デフォルトの名無しさん
18/07/22 01:44:34.84 qjdpSLXF0.net
ほな寝ます。詳しくありがとうございました!
もしかしたら明日もっとやべーかもです
857:デフォルトの名無しさん
18/07/22 01:59:21.48 J1Nh86LOM.net
var block = new ActionBlock<ZipOpParam>(
async (param) => {
await ExecuteZipOpAsync(param);
InvokeUpdateUi(param);
},
new ExecutionDataflowBlockOptions {
MaxDegreeOfParallelism = 8
});
foreach(var p in zipOpParams)
block.Post(p);
block.Complete();
await block.Completion;
858:デフォルトの名無しさん
18/07/22 03:07:13.11 IU6x2eOV0.net
>>815
> そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
これは私も同じように認識しています
> cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
これは場合によりけりだと思います
特に今回のように外部ツール側でマルチスレッドにできる場合はツールの呼び出し側では
余計なことをせず外部ツールに任せたほうが高速になる場合が多いと思います
>>817
C# で並列処理を行うならこれは一つの解決策になりそうですね
別の解決策として、新たに参照を追加する必要のない↓の方法とかどうでしょう?
var tasks = new List<Task>();
foreach (var param in zipOpParams)
{
if (tasks.Count == 8) tasks.Remove(await Task.WhenAny(tasks));
tasks.Add(ExecuteZipOpAsync(param).ContinueWith(
_ => InvokeUpdateUi(param),
TaskScheduler.FromCurrentSynchronizationContext()));
}
await Task.WhenAll(tasks);
859:デフォルトの名無しさん
18/07/22 09:28:10.63 e8tLYzcQ0.net
違うexeキックすれば終わりなんやで?
860:デフォルトの名無しさん
18/07/22 13:48:56.26 dLVAOvzX0.net
オブジェクト指向について勉強しようと思い、クラスを複数作って実行しようとしたら実行ボタンがプロセスにアタッチというよく分からない物に代わりビルドなども出来なくなってしまいました
どうしたら元に戻せるでしょうか
861:デフォルトの名無しさん
18/07/22 15:37:48.37 X/YKRg9/M.net
参考にした資料がそう(実行ボタンをプロセスにアタッチ)しろと書いているなら
その手法でトラブった時の解決法も資料に書いてあるのでは
提示されたくらいの情報でここで帰ってくる答えは
「ゴミは捨てて作り直せ」
「一旦オブジェクト指向についての記憶を消せ」
だと思う
862:デフォルトの名無しさん
18/07/22 19:34:11.94 dLVAOvzX0.net
このように実行ボタンがアタッチ…となりビルドも行えなくなってしまっています…
プログラムは「確かな力が身に付くc#超入門」から取っていて特にプロセスにアタッチに関する記述も無いので恐らく設定どこか変に弄ってしまったのかと思うのですが…
URLリンク(i.imgur.com)
863:デフォルトの名無しさん
18/07/22 19:59:19.28 zgYMpfBL0.net
>>822
ソリューションエクスプローラーで当該プロジェクトを右クリック→スタートアッププロジェクトに設定(みたいなやつ)を選択
864:デフォルトの名無しさん
18/07/22 20:02:21.74 2+gJNW3/0.net
>>822
言語じゃなくVisual Studioのスレで聞かないと
それはプロジェクトが読み込まれておらずソースだけ読み込まれている状態
865:デフォルトの名無しさん
18/07/22 20:13:04.82 dLVAOvzX0.net
>>823
やってみたのですがそれらしき項目がありませんでした…
866:デフォルトの名無しさん
18/07/22 20:13:36.52 dLVAOvzX0.net
>>824
なるほどありがとうございます vsのスレで聞いてきます
867:デフォルトの名無しさん
18/07/23 00:19:07.43 glq8mOZ10.net
revertしろや。意味もわからんだろうがな。
868:デフォルトの名無しさん
18/07/23 01:08:12.51 7plYbgct0.net
>>827
じゃあなぜそれを言ったのでしょうか…
869:デフォルトの名無しさん
18/07/23 02:22:37.56 UcAZ2Awl0.net
ナチュラルマウンティング
870:デフォルトの名無しさん
18/07/23 09:39:14.18 GAsLkYgIM.net
>>828
ググって勉強しろということだ
871:デフォルトの名無しさん
18/07/24 22:19:33.23 KA6Loe2t0.net
もしかしてASP.NETってJavaみたいなリッチで無料の拡張フレームワーク無いの?
872:デフォルトの名無しさん
18/07/24 22:26:36.90 9BkrBjXcd.net
>>831
?
ASP.NET自体が無料のフレームワークだろ
873:デフォルトの名無しさん
18/07/25 13:43:12.86 rJjy6ITv0.net
きもは「リッチ」で「拡張」ってことだろ
つまりどんなものを指してるのか全く分からんがな
874:デフォルトの名無しさん
18/07/25 14:20:20.79 HwnrNSAwM.net
Classic ASP.NETは拡張性とかガン無視でMSがデフォルトで提供するお仕着せのものだけ覚りゃ一通りできるっていうドカタ向けフレームワークだぞ
Springみたいなのがお好みならASP.NET Core使え
875:デフォルトの名無しさん
18/07/25 17:37:41.34 rJjy6ITv0.net
>>834
Classic ASP.NETがどのバージョンを指してるか知らんが拡張性無視とか笑わせる
HTTPハンドラとかモジュールとか自作したらほぼすべてカスタムできたわけだが
876:デフォルトの名無しさん
18/07/25 22:02:27.35 LjfK0h7i0.net
すれ違いで書き込んだ者ですが、こういう連続線をC♯を使って、方眼風の画面にクリックして一番近い座標点から始まり次のクリック座標点って感じで連続線を描きたいんですが、なんか参考になる本だとかサイトってありませんか?
URLリンク(i.imgur.com)
877:デフォルトの名無しさん
18/07/25 22:16:28.94 QC64Azkrd.net
>>836
Graphicsクラスを使って自分で線描画するのが手っ取り早いからこのあたりかな
URLリンク(dobon.net)
878:デフォルトの名無しさん
18/07/25 22:56:32.30 oxjpcelO0.net
>>837
そのページは閉じた図形だな。
>>836
同じdobonで
折れ線を描く(DrawLinesメソッド)
URLリンク(dobon.net)
879:デフォルトの名無しさん
18/07/25 23:40:00.99 sTP5vmoc0.net
>>834
ASP.NET CoreってPrimeFacesのような無料で便利なライブラリあるの?
商用ならWijmoやTelerik色など々あるようだけど有料はちょっとね
拡張すりゃ出来るとかハンドラ書けばできるとかそんなのは当たり前の事だけど
そんな車輪の再発明に工数が出るわけがないし
880:デフォルトの名無しさん
18/07/25 23:47:26.31 QC64Azkrd.net
無料ライブラリなんかnugetでなんぼでもインストールできるだろ
881:デフォルトの名無しさん
18/07/26 00:19:33.20 aLLF0qhM0.net
>>840
具体的にはどのパッケージですか?
882:デフォルトの名無しさん
18/07/26 07:51:00.77 qCaaK3zMa.net
>>839
ASP.NET CoreはMVCだからGUIは単なるHTML
ASP.NET Core関係なく普通にHTML/JS/CSSのライブラリを拾ってきて使えばよい
883:デフォルトの名無しさん
18/07/26 14:29:55.52 ujIuVWNLr.net
ライブラリ不要レベルやん
マウス位置とライン引くだけだし
884:デフォルトの名無しさん
18/07/26 14:36:43.63 rEhHpU7y0.net
PictureBoxがあればなんだってできるみたいな
885:デフォルトの名無しさん
18/07/26 16:41:36.62 EX1pNRMXM.net
文字の折返しさえできたら実はなんでもいい
886:デフォルトの名無しさん
18/07/26 16:48:08.19 lkW5ctngd.net
>>843
誰もライブラリ使えなんて言ってないだろ
887:デフォルトの名無しさん
18/07/26 19:08:23.29 BBodZQOSM.net
>>842
そういう使い方はNGですね
サーバーサイドレンダリングが基本のフレームワークとクライアントサイドのフレームワークは常識的に考えてインピーダンスミスマッチでしょう
(primefacesのように最初からセットで設計されてるならともかく)
それならまだaspnet coreはapiに徹してang
888:ularやreact使ったほうがマシです
889:デフォルトの名無しさん
18/07/26 19:18:37.89 IphAgnBQM.net
>>847
なんでクライアントフレームワークの話になるんだ?
AngularやReactのようなものに依存せず単独でページに組み込めるHTML/JS/CSSのコンポーネントなんか腐るほどあるだろ
890:デフォルトの名無しさん
18/07/26 19:30:12.58 36qwSZL10.net
C#で、VPN経由でCiscoのL2スイッチにログインしてフォワーディングデータベースと各ポートのステータスを取得したいんですが、
簡単に解説しているサイトはないでしょうか?
クライアントを動かすPC - HUB - NATルーター - VPNルーター - ネット - VPNルーター - HUB - Ciscoルーター - 目当てのCisco L2スイッチ
ていう状態です。
891:デフォルトの名無しさん
18/07/26 19:41:22.79 jgVPt9Lg0.net
LinQの中身ってfor文ってホント?
892:デフォルトの名無しさん
18/07/26 19:42:46.48 CSIl69XB0.net
アイドルグループの中身は知りません
893:デフォルトの名無しさん
18/07/26 19:49:11.86 jgVPt9Lg0.net
LinQクラスの各メソッドの中身の味方教えてください
894:デフォルトの名無しさん
18/07/26 19:51:33.98 XPlHGtVDd.net
>>852
github
895:デフォルトの名無しさん
18/07/26 19:55:09.78 gWAgddOO0.net
>>852
URLリンク(referencesource.microsoft.com)
896:デフォルトの名無しさん
18/07/26 20:49:53.68 X2GH2dHI0.net
>>847
NGかどうかはお前の都合だがな
ASP.NETでもWebFormあたりは、サーバ側とクライアント側の統合を目指してたんだよ
クライアントスクリプト一切書かなくてもAJAXできるコントロールとかまであった
だが今の流れはサーバサイドはサーバサイド、クライアントはクライアントな流れ
クライアントはすきなライブラリ使え
>それならまだaspnet coreはapiに徹して
apiに徹するのと、html出力に徹するのとどれほどの違いがあると?
897:デフォルトの名無しさん
18/07/26 20:51:44.84 aLLF0qhM0.net
>>848
ASP.NET Coreと相性いいのは無いね
898:デフォルトの名無しさん
18/07/26 20:59:07.08 0BZQ2aB/M.net
ASP.NETの問題というよりC#自体がwebのフレームワークと相性が悪いような…
おとなしくtypescript使ったほうが楽かなとは思う
899:デフォルトの名無しさん
18/07/26 21:10:20.45 aLLF0qhM0.net
>>855
WebFormsの時からずっとだけど鯖で出力したhtmlやバックエンドの挙動を把握してJS書かないといけないからめんどくせえじゃん
なんのためにナマのhtmlを隠蔽したのかって話になる
htmlを隠蔽すると決めたなら徹底しなきゃならん
apiに徹すればクライアントはクライアントで綺麗に切れるからそんな煩わしさから開放される
900:デフォルトの名無しさん
18/07/26 21:25:20.81 +zykdZnW0.net
LinQ は、Rails のQuery object と同じだろ
where 何々
order by 何々
別々に書いた文字列を、1つのSQL 文にまとめて、DB に問い合わせする
901:デフォルトの名無しさん
18/07/26 21:32:16.74 Q5F+5vhQ0.net
>>857
ちょっと何言ってるかわからない
902:デフォルトの名無しさん
18/07/26 21:43:03.68 wePnpHti0.net
>>849
C#が扱うのはTCPあたりだけじゃないのか
そっから下はOSやら何やらの仕事だし上はCISCOのマニュアルなり読めとしか言えそうにない
903:デフォルトの名無しさん
18/07/26 21:45:25.99 F57VHmfS0.net
ソリューションエクスプローラーで.csファイルのなめえ変えてもデバッグできる?データ壊れない?
904:デフォルトの名無しさん
18/07/26 21:47:47.65 0BZQ2aB/M.net
>>862
gitというものがある
そいつを使えば自由自在に試し放題だ
905:デフォルトの名無しさん
18/07/26 21:50:46.39 F57VHmfS0.net
いやあああああああ
これ理解してないと動かなくなるやつうううう
URLリンク(i.imgur.com)
906:デフォルトの名無しさん
18/07/26 21:51:53.07 rEhHpU7y0.net
こういうハッキングの匂いがするやつは回答しないほうがいい
907:デフォルトの名無しさん
18/07/26 21:51:55.20 gWAgddOO0.net
>>862
ソリューションエクスプローラー上での名前の変更は問題なく出来る
908:デフォルトの名無しさん
18/07/26 21:53:30.55 0BZQ2aB/M.net
git使わなくてもソリューションのフォルダごとコピーかzip圧縮でも十分だけど
909:デフォルトの名無しさん
18/07/26 21:55:22.46 F57VHmfS0.net
>>866
>>867
ごめん無事でした
なんかVSがクラス名と一致させようとするからダメかと思いました
ありがとうございます
910:デフォルトの名無しさん
18/07/26 21:59:28.86 F57VHmfS0.net
>>854
これ見てみます
ありがとうございます
911:デフォルトの名無しさん
18/07/26 22:20:23.27 uwMXaYNj0.net
>>868
javaとは違うんだよ
912:デフォルトの名無しさん
18/07/26 22:27:27.51 ySl3KkZ10.net
>>867
gitでもフォルダコピーでも、自由に試し放題なのは同じだが
gitだとフォルダコピーに該当する操作が一瞬なんだよね
フォルダコピーだとある程度大きいプロジェクトになるとプログレスバーを待たなきゃならん