X



C#, C♯, C#相談室 Part95
■ このスレッドは過去ログ倉庫に格納されています
0157デフォルトの名無しさん
垢版 |
2017/11/24(金) 09:49:06.09ID:LQb8e4yU
>>156
じゃあstatic使う場合は
どこに入れるべきですか?
0159デフォルトの名無しさん
垢版 |
2017/11/28(火) 20:01:33.21ID:uo9ygS2y
EF Core + MariaDBで行ロックをするにはどうしたらいいですか?
0162デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:02:54.88ID:LyP2QHxX
EFは基本、楽観ロックだからね。
自分が更新するデータは誰も変更しないだろうということで楽観的に考えて行ロックを取得しない。
で、実際の更新時に、保存しておいたタイムスタンプ列や全列を比較して更新するUpdate文を
発行して誰も変更してなきゃ成功する。
0163デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:08:27.80ID:LyP2QHxX
対して、悲観的ロックは誰か変更するんじゃないかと悲観的に考え前もって行ロックする。
行ロック取得したければ、トランザクションの分離レベル変更して、間接的に取得すればいいんじゃねぇかな。
例えば、トランザクションをロックを使って実装してるデータベース使ってるなら、
トランザクションの分離レベルをREPEATABLE READにして読めば、読み込んレコードには
行ロックがかかる。
0166デフォルトの名無しさん
垢版 |
2017/12/02(土) 10:37:02.24ID:OECpFj6Y
Consoleアプリの関数Aから別のスレッドで関数Bをを実行。
Bが終わるまで数分かかるので、その間はAの処理を引き続きやる。
Bが終わったら何らかの通知をA(あるいはアプリ)で受けとる。
そんな処理をしたいのですが、どんな手法がお勧めですか?
0170デフォルトの名無しさん
垢版 |
2017/12/02(土) 13:31:40.26ID:OECpFj6Y
>>167
情報ありがとうございました。調べてみます。
>>168
それは何ですか?
>>169
関数Aの中で関数Bの終了をawaitするとそこでAの処理が停止しますよね?
それでは困るんです。
0171デフォルトの名無しさん
垢版 |
2017/12/02(土) 13:38:50.65ID:/lrBlva0
通知を受け取って何をするの?
Aが実行中に通知を受け取った場合は?
Aが終わったあとに通知を受け取った場合は?
0173デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:11:31.35ID:kxO6m70V
>>172
実際にコードに起こすこと考えたら>>171の疑問出てこない?
ポーリングの有無とかB終了の通知はA以外で受けたほうがいいのかみたいな
0174デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:21:45.96ID:/lrBlva0
void A() {
...
Task.Run(() => B());
...
...
}

void B() {
...
...
SetSomeFlag();
}

こういうこと?
何をしたいのかハッキリしないな
0176デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:22:55.12ID:M5ek0NUJ
>>173
何で目の前の問題置いて次の実装考えるの
やり方が一つ決まったらそれでやり通す必要もないし
質問者の要件わからないのにそんなこと聞きだす必要はない
0177デフォルトの名無しさん
垢版 |
2017/12/02(土) 15:15:48.94ID:XMkOweAB
多分処理AはUIスレッドなんだろ
処理B実行中にUIは止めたくない
そして処理B完了でUIを更新したい

そんな要件だと想像した
0181デフォルトの名無しさん
垢版 |
2017/12/02(土) 18:20:58.48ID:M5ek0NUJ
元の話が設計で根本的におかしいか思い付きで質問しているかどっちか
後半に100ペリカ
0183デフォルトの名無しさん
垢版 |
2017/12/02(土) 21:02:27.32ID:8UWC/wK0
WaitHandleは完了を待つ側のスレッドをブロックするから、
それでいいんだったら普通にasync-awaitでいい
0185デフォルトの名無しさん
垢版 |
2017/12/02(土) 22:01:19.49ID:hEzEqaaq
Aで何したいかだけどコールバックでいいんじゃないの
0187デフォルトの名無しさん
垢版 |
2017/12/03(日) 01:24:35.88ID:R5bnWQiD
つかそもそも別スレッドで実行する必要があるのか
別プロセスで良いんじゃねえのか
0190166
垢版 |
2017/12/03(日) 10:48:55.10ID:fYwJfoN4
皆さんレスありがとうございました。
>Aが実行中に通知を受け取った場合は?
関数Cを別スレッドで実行したいです。例えばこんなふうに。
void C(){
 Console.WriteLine("Bが終わった");
}
>Aが終わったあとに通知を受け取った場合は?
Aは終わらないと言う前提でお願いします。
0193デフォルトの名無しさん
垢版 |
2017/12/03(日) 12:01:59.74ID:mrNMXEOK
フラット案件どころかこれだけレスとキーワード出ていて自分で解決できないのならプログラムやめるべき
0195デフォルトの名無しさん
垢版 |
2017/12/03(日) 12:14:39.54ID:WBs9Zv02
何でもいいけどすぐ動く完動品が出てくるまでこの調子だと思うぜ
どうせソースないんだろ、出てきたものを見ていじって作ろうとしてるんだろ
0196デフォルトの名無しさん
垢版 |
2017/12/03(日) 14:16:09.36ID:VfzmjXdH
>>190
BとCについてはよく分かった
Aが現状どういう処理をしているかによって
解決の仕方が違ってくると思うな
0198デフォルトの名無しさん
垢版 |
2017/12/04(月) 17:37:29.30ID:KH9vP8EW
コンソールアプリで関連性のない2つの動作を同居させるシチュエーションがわからん
マルチスレッドにしたら効率が良くなるってだけの頭の悪い発想じゃね
>>187が当てはまらないのならぜひ教えてほしいくらい
0199デフォルトの名無しさん
垢版 |
2017/12/06(水) 04:39:39.43ID:PV/6ekcb
>>188
コンソールアプリ同士なんだから、まず標準入出力でダメか考えるべきじゃね
ソケット通信が必要ならまあやればいいけど、それだとそもそもコンソールアプリなのが正しいのか疑問だ
0202デフォルトの名無しさん
垢版 |
2017/12/07(木) 12:33:06.20ID:NfkoL/Di
>>201
それはGUIが基本なのかCUIが基本なのかの違いであって
コンソールアプリである必要性とは関係ないよね

別にGUIを基本にしろって主張じゃないよ
ただCUI=コンソールアプリってわけでもないだろうと
0203デフォルトの名無しさん
垢版 |
2017/12/15(金) 07:32:48.50ID:fJhEByrM
Task<string>型からstream型に変換するにはどうしたらいいでしょうか?
調べてもよく分からず詰まっています
0206デフォルトの名無しさん
垢版 |
2017/12/15(金) 22:48:43.84ID:Io6GZfPK
>>205
https://ideone.com/CfSqOZ
こんな感じでurlを投げて返ってきたものをstreamに入れたい
0207デフォルトの名無しさん
垢版 |
2017/12/15(金) 23:04:26.66ID:Io6GZfPK
// HTTPアクセス
var req = WebRequest.Create(url);
var res = req.GetResponse();
// レスポンスをオブジェクトに変換
Stream s = res.GetResponseStream();
StreamReader sr = new StreamReader(s);
string str = sr.ReadToEnd();

もともとConsoleAppでこう書いて動いてたんだがGUIベースのにしようとしたらGetResponseが使えなかった
代わりにGetResponseAsyncにしたらエラーが出てもっとわからなくなった
0209デフォルトの名無しさん
垢版 |
2017/12/15(金) 23:50:34.14ID:aqOMh7+X
低水準言語からC#に戻ってくるとlinqが有能すぎて困る困らない
ienumなんとかいうヤツにforeachないのはなんでなの?魔女のバァさんの呪いか?
0210デフォルトの名無しさん
垢版 |
2017/12/16(土) 00:22:04.98ID:IGcNQYtz
List<T>.ForEach(Action<T> action) みたいなやつのことかな?
はい副作用ドーン!はLINQとしてどうなのってことで入らなかった
0211デフォルトの名無しさん
垢版 |
2017/12/16(土) 00:24:11.12ID:ArLhqftT
console では処理を止めても良いから、同期処理でも良い

でも、GUI では処理を止めると、アプリが動かなくなるから、
50ms 以上掛かるものは、非同期処理が推奨
0213デフォルトの名無しさん
垢版 |
2017/12/18(月) 22:23:42.36ID:5DMorLlq
Int32へのIntPtrを渡さなければいけないのですが、unsafeコードしか方法はないのでしょうか?
現状、
Int32 int32;
IntPtr intPtr;
unsafe { intPtr = new IntPtr(&int32) }
someObject.someMethod(intPtr);
みたいな感じです。
0215デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:03:00.80ID:5DMorLlq
System.Runtime.InteropServices.ComTypesで用意されてるインターフェース使うと、
IntPtrで宣言されてるんですよね・・
まぁ、自前でrefで宣言しなおしてもいいんですけど。
うーん。どうしよう。
0216デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:05:43.88ID:5DMorLlq
まぁ、out,ref使わずにIntPtrで宣言すると、null渡せるっての1つの利点ですかね・・
COMインターフェースでオプショナルな引数もあって、そん時はnull渡してくれみたいのもあるんで。
>>213みたくunsafeしなければいけなならデメリットの方が大きそうですけど。
0217デフォルトの名無しさん
垢版 |
2017/12/19(火) 07:23:44.08ID:FokzMHrG
Marshal.AllocCoTaskMemするとか
new int[1]してGCHandle.AllocでPinnedしてAddrOfPinnedObjectするとか
0218デフォルトの名無しさん
垢版 |
2017/12/19(火) 13:37:53.98ID:IhvApffy
直接アンマネージにポインタだけ渡すってどうなんだろ
Marshal.AllocHGlobalとかしなくていいのか?
0219デフォルトの名無しさん
垢版 |
2018/01/06(土) 23:07:58.15ID:RVXlFPlL
いまだにどこまで.Pinnedしなきゃならないのかわからないw
趣味グラマだからわからないままでも問題はないんだけども
C#始めたころはいちいち書いていたが最近はずっと省いているな
0220デフォルトの名無しさん
垢版 |
2018/01/07(日) 00:09:48.08ID:X58Odkk6
変数がスタックにあるなら要らん
それ以外は必須
GCHandle.Allocは解放漏れでメモリリーク起こす可能性があるしパフォーマンスも悪いからなるべくfixed使った方がいい
0223デフォルトの名無しさん
垢版 |
2018/01/07(日) 00:52:39.44ID:MTMRs8S5
IntPtrってvoid*相当で型安全もクソもないし
AllocHGlobalもmallocを生で使うのと変わらん
unsafeよりよっぽどunsafe
0224デフォルトの名無しさん
垢版 |
2018/01/07(日) 03:57:43.36ID:BXo/eClR
C#のスクリプト実行がVSなしでも動かせて、Pythonとかの代わりに使える未来はないかな?
0226デフォルトの名無しさん
垢版 |
2018/01/07(日) 13:30:19.23ID:6UmxljW6
今のままだとpythonの代わりにはならんわ

pythonは標準のモジュールにスクリプト用やOS周りの便利な機能が組み込まれてる
0227デフォルトの名無しさん
垢版 |
2018/01/07(日) 13:43:21.05ID:6UmxljW6
pyhtonだと他のコマンドの出力をワンライナーで処理とかあるけど
C#はまあ無理だな

そういう所ですみわけされてる
適材適所
0231デフォルトの名無しさん
垢版 |
2018/01/07(日) 15:34:12.12ID:pcvnpBsv
getoptやargparseのようなものは欲しいと思ったな。その点ではMFCよりも退化してる。
0232デフォルトの名無しさん
垢版 |
2018/01/07(日) 20:30:21.44ID:5XHMA74k
ウェブサイトのリプレイスでPHPじゃなくてC#で書きたいので
上司を説得するために、PHPよりC#の方が言語的に優れてる点をまとめた

静的型付け
勝手に文字列、数値、真偽値等のプリミティブ型を変換しない
ジェネリクス
LINQ
名前空間名を指定してusing
非同期メソッド
ラムダ式
拡張メソッド
null条件演算子

逆にPHPの方が言語的に優れてる所ってなんだろう・・・
trait?
引数にタイプヒント付けるとnull安全になる所?
0233デフォルトの名無しさん
垢版 |
2018/01/07(日) 20:36:48.21ID:eDz/bjXs
言語だけじゃなく、開発環境、ライブラリなど総合的に決めるべきやね。
結果は自明だが。
0234デフォルトの名無しさん
垢版 |
2018/01/07(日) 20:40:46.23ID:7cGFvSiG
>>232
WebならC#は言語云々というよりプラットフォームの制約で選ばれるものだと思うぞ
サーバーがWindowsならC#はMSが強く推奨する第一の選択肢であり、よほどの理由がなければ他を使うべきではない
Linuxなら今では.NET CoreもあるけどPHP使ってるようなところの手に負えるもんじゃない
0235デフォルトの名無しさん
垢版 |
2018/01/07(日) 21:06:28.11ID:5XHMA74k
PHP製サイトはフレームワーク使ってるけど
考えなしに機能拡張し過ぎたため
自分が入社した頃には既にコントローラーが大変なことになってて
このままじゃヤバイから書き直す事になった

>>234
なんか難しいのか
今時はDockerですぐ動く環境ができる感じじゃないの?

.NET CoreはDockerで作ったことは無いけど
PHPでテスト用の環境は作った事がある
0236デフォルトの名無しさん
垢版 |
2018/01/07(日) 21:13:58.77ID:5XHMA74k
バックエンドだけC#で書いて
Angular等をフロントエンドに使う事を推す人も居るけど
RazorViewより良いの?

AngularやReact、Vueは別にクライアント側でしか使えない訳じゃなくて
node.jsでサーバーサイドでも使えるらしい
0237デフォルトの名無しさん
垢版 |
2018/01/07(日) 21:27:07.65ID:X58Odkk6
Linuxでちゃんとした言語使いたいならJavaでいいだろ
言語機能が不満ならKotlin使えば>>232は全部満たしてるぞ
リプレースでやるにはDocker&.NET Core&C#全部新規導入なんてリスクが大きすぎるし、
成長という観点を込みにしてもそれだけのコストをかけるほど価値のある選択とは思えん
DockerってことはAWSかなんかだろ?
どうしてもC#に拘るんなら素直にWin鯖立てとけ
0238デフォルトの名無しさん
垢版 |
2018/01/07(日) 21:27:26.11ID:pcvnpBsv
SPAはサーバー負荷を抑えられるのが良いね。
せっかくのSPAフレームワークをわざわざSSRするのはメリットがよくわからん。
0240デフォルトの名無しさん
垢版 |
2018/01/07(日) 22:19:38.07ID:5XHMA74k
言語に関してはKotlinに変えるのもC#に変えるのも同様にリスキーな気はする

.NET Core 1.0が出てから1年半しか立ってないからエコシステムの充実度的には劣るかもしれないけど
何も無い訳じゃないよね
Windows固有の物使ってなければ今までの物も移植可能な訳だし

>>238
SEO的にはサーバーサイドレンダリングもした方が良いと聞く
0241デフォルトの名無しさん
垢版 |
2018/01/07(日) 23:00:33.14ID:6UmxljW6
フロントエンドもバックグラウンドもtypescriptが一番まともな仕上がりになる
従事者数が全然違う
フレームワークの開発者のレベルも違う

asp.net coreが10年もつとは思えん
MSがあっさり捨てて5年後はなくなってるかもしれない
asp.net coreがこれからだと思うのはセンスない
今も死んでるのになんで選ぶ?
0242デフォルトの名無しさん
垢版 |
2018/01/07(日) 23:07:23.71ID:yGWRqm9V
そらマルチプラットフォームに対応せにゃ生き残れんからやろ
あれ?Windowsじゃなきゃあんま美味しくねぇな?

詰んだな
0245デフォルトの名無しさん
垢版 |
2018/01/08(月) 01:16:56.62ID:KwTiDosF
本当に素晴らしいテクノロジーは登場とともに
コアなサポーターがつく
残念ながらasp.net coreは誰の噂にも上らない
そもそも知られてない
多分web開発者が100人いるとしても知ってるのは3人ぐらいだろう
web開発者の間ではASPというワードは別の意味でしかとらえられない
0250デフォルトの名無しさん
垢版 |
2018/01/08(月) 01:38:06.32ID:KwTiDosF
asp.net coreがこれからだとか
web開発者の間で知名度が高いなんて思ってるほうがいかれてるわ

謙虚になって状況見ろよ
0252デフォルトの名無しさん
垢版 |
2018/01/08(月) 09:42:56.16ID:uW1MVRIb
公式の.NET CoreのデバッガーはVisual Studio Code/Visual Studio/Xamarin Studioでしか動かせない
規約で禁止されてる

https://github.com/dotnet/core/issues/505

JetBrainsのRiderは独自の実装を書いて動かしている
.NET Coreはなんか中途半端なオープンソース化だな

VSやXamarin Studio、Rider以外でデバッグするにはMonoしか無いって事なのか
でもMonoだとライブラリの対応がどうなのか
0253デフォルトの名無しさん
垢版 |
2018/01/08(月) 17:26:40.65ID:MM2bwnQX
EF Coreで[ConcurrencyCheck]属性を使って同時実行制御をしたいのですが
IQueryableをToList()で複数取得しようとするとTrackingされなくて困っています
SingleOrDefault()ならTrackingされて正しく動作します
やりたい事はデータをListで複数件取得して、それらの値を変更してUpdateRangeでまとめて更新したいです

どなたか解決策を教えてください
0254デフォルトの名無しさん
垢版 |
2018/01/09(火) 22:28:44.52ID:GTddlW8V
>>253
軽く試した範囲ではコンテキスト内ならListでもトラッキングされてるし
コンテキストまたいでもUpdateRangeで変更としてマークされて更新されたけど

勘違いじゃなければミニマムコードどっかに上げて
0255デフォルトの名無しさん
垢版 |
2018/01/09(火) 23:10:43.20ID:DIgE/yw0
ASP.NET以外にWebフレームワークってある?
Nancyぐらいしか見当たらない
他言語だと色々選択肢があるのに
■ このスレッドは過去ログ倉庫に格納されています

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