C#, C♯, C#相談室 Part95
■ このスレッドは過去ログ倉庫に格納されています
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら http://www.visualstudio.com/downloads/ ■コードを貼る場合はこちら http://ideone.com/ ■前スレ C#, C♯, C#相談室 Part94 http://mevius.2ch.net/test/read.cgi/tech/1492843013/ ■次スレは>>970 が建てる事 建てられない場合は他を指定する事。 >>156 じゃあstatic使う場合は どこに入れるべきですか? EF Core + MariaDBで行ロックをするにはどうしたらいいですか? >>159 EFに明示的なロックは要らん 保存するときに他の変更があれば保存は失敗する EFは基本、楽観ロックだからね。 自分が更新するデータは誰も変更しないだろうということで楽観的に考えて行ロックを取得しない。 で、実際の更新時に、保存しておいたタイムスタンプ列や全列を比較して更新するUpdate文を 発行して誰も変更してなきゃ成功する。 対して、悲観的ロックは誰か変更するんじゃないかと悲観的に考え前もって行ロックする。 行ロック取得したければ、トランザクションの分離レベル変更して、間接的に取得すればいいんじゃねぇかな。 例えば、トランザクションをロックを使って実装してるデータベース使ってるなら、 トランザクションの分離レベルをREPEATABLE READにして読めば、読み込んレコードには 行ロックがかかる。 Consoleアプリの関数Aから別のスレッドで関数Bをを実行。 Bが終わるまで数分かかるので、その間はAの処理を引き続きやる。 Bが終わったら何らかの通知をA(あるいはアプリ)で受けとる。 そんな処理をしたいのですが、どんな手法がお勧めですか? >>166 普通にTaskとasync-await >>167 情報ありがとうございました。調べてみます。 >>168 それは何ですか? >>169 関数Aの中で関数Bの終了をawaitするとそこでAの処理が停止しますよね? それでは困るんです。 通知を受け取って何をするの? Aが実行中に通知を受け取った場合は? Aが終わったあとに通知を受け取った場合は? >>171 終わったってフラグでも作っておけばいい 何のためにそんなこと聞くの? >>172 実際にコードに起こすこと考えたら>>171 の疑問出てこない? ポーリングの有無とかB終了の通知はA以外で受けたほうがいいのかみたいな void A() { ... Task.Run(() => B()); ... ... } void B() { ... ... SetSomeFlag(); } こういうこと? 何をしたいのかハッキリしないな >>170 関数BをTaskで実行しておいて、たまにTask.Wait(0)がtrueを返すか確認する >>173 何で目の前の問題置いて次の実装考えるの やり方が一つ決まったらそれでやり通す必要もないし 質問者の要件わからないのにそんなこと聞きだす必要はない 多分処理AはUIスレッドなんだろ 処理B実行中にUIは止めたくない そして処理B完了でUIを更新したい そんな要件だと想像した >>177 それだとInvokeやDispatcherの話にも広がりそうだね >>177 consoleアプリって書いてあるやん 元の話が設計で根本的におかしいか思い付きで質問しているかどっちか 後半に100ペリカ コンソールアプリなら EventWaitHandle使うのが楽そう WaitHandleは完了を待つ側のスレッドをブロックするから、 それでいいんだったら普通にasync-awaitでいい Aで何したいかだけどコールバックでいいんじゃないの だったらTask.ContinueWithでいいだろ つかそもそも別スレッドで実行する必要があるのか 別プロセスで良いんじゃねえのか >>187 プロセス間のデータ受渡はsoket通信する感じ? >>188 勝手に要件作る気なのかw しかも中身まで要エスパーとか 皆さんレスありがとうございました。 >Aが実行中に通知を受け取った場合は? 関数Cを別スレッドで実行したいです。例えばこんなふうに。 void C(){ Console.WriteLine("Bが終わった"); } >Aが終わったあとに通知を受け取った場合は? Aは終わらないと言う前提でお願いします。 >>190 >>186 に出ているだろ というかTaskメソッドをMSDNで調べろよ フラット案件どころかこれだけレスとキーワード出ていて自分で解決できないのならプログラムやめるべき 何でもいいけどすぐ動く完動品が出てくるまでこの調子だと思うぜ どうせソースないんだろ、出てきたものを見ていじって作ろうとしてるんだろ >>190 BとCについてはよく分かった Aが現状どういう処理をしているかによって 解決の仕方が違ってくると思うな コンソールアプリで関連性のない2つの動作を同居させるシチュエーションがわからん マルチスレッドにしたら効率が良くなるってだけの頭の悪い発想じゃね >>187 が当てはまらないのならぜひ教えてほしいくらい >>188 コンソールアプリ同士なんだから、まず標準入出力でダメか考えるべきじゃね ソケット通信が必要ならまあやればいいけど、それだとそもそもコンソールアプリなのが正しいのか疑問だ >>199 ASP.NET Coreなんてもろコンソールアプリだけどな >>199 GUIが必要ないからCUIってプログラムは幾らでもあるが。 >>201 それはGUIが基本なのかCUIが基本なのかの違いであって コンソールアプリである必要性とは関係ないよね 別にGUIを基本にしろって主張じゃないよ ただCUI=コンソールアプリってわけでもないだろうと Task<string>型からstream型に変換するにはどうしたらいいでしょうか? 調べてもよく分からず詰まっています よく分からんけどstringを取り出してからTextReaderかなんかに渡す >>205 https://ideone.com/CfSqOZ こんな感じでurlを投げて返ってきたものをstreamに入れたい // 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にしたらエラーが出てもっとわからなくなった ナウなヤングはHttpClient.GetStreamAsync 低水準言語からC#に戻ってくるとlinqが有能すぎて困る困らない ienumなんとかいうヤツにforeachないのはなんでなの?魔女のバァさんの呪いか? List<T>.ForEach(Action<T> action) みたいなやつのことかな? はい副作用ドーン!はLINQとしてどうなのってことで入らなかった console では処理を止めても良いから、同期処理でも良い でも、GUI では処理を止めると、アプリが動かなくなるから、 50ms 以上掛かるものは、非同期処理が推奨 Int32へのIntPtrを渡さなければいけないのですが、unsafeコードしか方法はないのでしょうか? 現状、 Int32 int32; IntPtr intPtr; unsafe { intPtr = new IntPtr(&int32) } someObject.someMethod(intPtr); みたいな感じです。 System.Runtime.InteropServices.ComTypesで用意されてるインターフェース使うと、 IntPtrで宣言されてるんですよね・・ まぁ、自前でrefで宣言しなおしてもいいんですけど。 うーん。どうしよう。 まぁ、out,ref使わずにIntPtrで宣言すると、null渡せるっての1つの利点ですかね・・ COMインターフェースでオプショナルな引数もあって、そん時はnull渡してくれみたいのもあるんで。 >>213 みたくunsafeしなければいけなならデメリットの方が大きそうですけど。 Marshal.AllocCoTaskMemするとか new int[1]してGCHandle.AllocでPinnedしてAddrOfPinnedObjectするとか 直接アンマネージにポインタだけ渡すってどうなんだろ Marshal.AllocHGlobalとかしなくていいのか? いまだにどこまで.Pinnedしなきゃならないのかわからないw 趣味グラマだからわからないままでも問題はないんだけども C#始めたころはいちいち書いていたが最近はずっと省いているな 変数がスタックにあるなら要らん それ以外は必須 GCHandle.Allocは解放漏れでメモリリーク起こす可能性があるしパフォーマンスも悪いからなるべくfixed使った方がいい >>220 サンクス だけどアンマネージ側に渡すのにいちいちunsafeにはしたくないな IntPtrってvoid*相当で型安全もクソもないし AllocHGlobalもmallocを生で使うのと変わらん unsafeよりよっぽどunsafe C#のスクリプト実行がVSなしでも動かせて、Pythonとかの代わりに使える未来はないかな? >>224 >C#のスクリプト実行がVSなしでも動かせて これはもうできるやろ 今のままだとpythonの代わりにはならんわ pythonは標準のモジュールにスクリプト用やOS周りの便利な機能が組み込まれてる pyhtonだと他のコマンドの出力をワンライナーで処理とかあるけど C#はまあ無理だな そういう所ですみわけされてる 適材適所 python だと標準でできて .net だとできないことって何かあるかな? getoptやargparseのようなものは欲しいと思ったな。その点ではMFCよりも退化してる。 ウェブサイトのリプレイスでPHPじゃなくてC#で書きたいので 上司を説得するために、PHPよりC#の方が言語的に優れてる点をまとめた 静的型付け 勝手に文字列、数値、真偽値等のプリミティブ型を変換しない ジェネリクス LINQ 名前空間名を指定してusing 非同期メソッド ラムダ式 拡張メソッド null条件演算子 逆にPHPの方が言語的に優れてる所ってなんだろう・・・ trait? 引数にタイプヒント付けるとnull安全になる所? 言語だけじゃなく、開発環境、ライブラリなど総合的に決めるべきやね。 結果は自明だが。 >>232 WebならC#は言語云々というよりプラットフォームの制約で選ばれるものだと思うぞ サーバーがWindowsならC#はMSが強く推奨する第一の選択肢であり、よほどの理由がなければ他を使うべきではない Linuxなら今では.NET CoreもあるけどPHP使ってるようなところの手に負えるもんじゃない PHP製サイトはフレームワーク使ってるけど 考えなしに機能拡張し過ぎたため 自分が入社した頃には既にコントローラーが大変なことになってて このままじゃヤバイから書き直す事になった >>234 なんか難しいのか 今時はDockerですぐ動く環境ができる感じじゃないの? .NET CoreはDockerで作ったことは無いけど PHPでテスト用の環境は作った事がある バックエンドだけC#で書いて Angular等をフロントエンドに使う事を推す人も居るけど RazorViewより良いの? AngularやReact、Vueは別にクライアント側でしか使えない訳じゃなくて node.jsでサーバーサイドでも使えるらしい Linuxでちゃんとした言語使いたいならJavaでいいだろ 言語機能が不満ならKotlin使えば>>232 は全部満たしてるぞ リプレースでやるにはDocker&.NET Core&C#全部新規導入なんてリスクが大きすぎるし、 成長という観点を込みにしてもそれだけのコストをかけるほど価値のある選択とは思えん DockerってことはAWSかなんかだろ? どうしてもC#に拘るんなら素直にWin鯖立てとけ SPAはサーバー負荷を抑えられるのが良いね。 せっかくのSPAフレームワークをわざわざSSRするのはメリットがよくわからん。 >>237 なぜDockerからAWSになるんやwww 言語に関してはKotlinに変えるのもC#に変えるのも同様にリスキーな気はする .NET Core 1.0が出てから1年半しか立ってないからエコシステムの充実度的には劣るかもしれないけど 何も無い訳じゃないよね Windows固有の物使ってなければ今までの物も移植可能な訳だし >>238 SEO的にはサーバーサイドレンダリングもした方が良いと聞く フロントエンドもバックグラウンドもtypescriptが一番まともな仕上がりになる 従事者数が全然違う フレームワークの開発者のレベルも違う asp.net coreが10年もつとは思えん MSがあっさり捨てて5年後はなくなってるかもしれない asp.net coreがこれからだと思うのはセンスない 今も死んでるのになんで選ぶ? そらマルチプラットフォームに対応せにゃ生き残れんからやろ あれ?Windowsじゃなきゃあんま美味しくねぇな? 詰んだな >>241 いまどき10年も同じテクノロジーを使えると思う方がおかしい 本当に素晴らしいテクノロジーは登場とともに コアなサポーターがつく 残念ながらasp.net coreは誰の噂にも上らない そもそも知られてない 多分web開発者が100人いるとしても知ってるのは3人ぐらいだろう web開発者の間ではASPというワードは別の意味でしかとらえられない ASP.NET Advent Calendarが2016年まであったけど2017年は消滅した >>246 どこのまともな大手企業がasp.net使ってるって? asp.net coreがこれからだとか web開発者の間で知名度が高いなんて思ってるほうがいかれてるわ 謙虚になって状況見ろよ 言語なんて主要なDBとORMに対応しててCRUDが書ければ 好きなの使えば良い 公式の.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だとライブラリの対応がどうなのか EF Coreで[ConcurrencyCheck]属性を使って同時実行制御をしたいのですが IQueryableをToList()で複数取得しようとするとTrackingされなくて困っています SingleOrDefault()ならTrackingされて正しく動作します やりたい事はデータをListで複数件取得して、それらの値を変更してUpdateRangeでまとめて更新したいです どなたか解決策を教えてください >>253 軽く試した範囲ではコンテキスト内ならListでもトラッキングされてるし コンテキストまたいでもUpdateRangeで変更としてマークされて更新されたけど 勘違いじゃなければミニマムコードどっかに上げて ASP.NET以外にWebフレームワークってある? Nancyぐらいしか見当たらない 他言語だと色々選択肢があるのに ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる