C#, C♯, C#相談室 Part94
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured ■過去スレ
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/
C#, C♯, C#相談室 Part93 (実質Part94)
http://mevius.5ch.net/test/read.cgi/tech/1492818720/
>>1
ここは、実質Part95だったorz C#でセレニウムにチャレンジしています。
Chromeを起動すると「Chromeは自動テスト ソフトウェアによって制御されています」と
メッセージが表示されてうざいです。
これを非表示にする方法はないでしょうか? 「練馬350 る 8 08」
〜〜〜〜〜〜〜〜
DQN運転手につき注意!
DQN運転手につき注意!
DQN運転手につき注意!
DQN運転手につき注意! 質問です
C# の struct で
引数無しのデフォルトコンストラクタを上書きできないのはなぜでしょう?
回避方法はありますか?
public struct Hoge {
public int a;
public int b;
public Hoge() { this.a = 123; this.b = 456; }
}
みたいなのがやりたいです public struct Hoge
{
public int a = 123;
public int b = 456;
}
でだめ? 暗黙的な既定のコンストラクタが挿入されないようにとのC#コンパイラの最適化の都合
特に回避策はない
標準ライブラリで
struct Vector3 {
...
public static Vector3 Up = new Vector3(0, 1, 0);
}
みたいなのはある レスくれたひととワッチョイ似てるけど別人です念のため >>13
あまり有難みが無いですが・・・とりあえずレスくれたみなさんありがとう
class にしたくない理由は struct のネストをしたいのと
そのとき struct を Marshal.StructureToPtr して使いたいのですが
ネストの内側に class が含まれてると not blittable とか出て困ってるんです https://teratail.com/questions/251675
回答つかなかったから再投稿して古い質問を削除依頼って、今まであんまり見なかったな。 外側がクラスでも良いならラップするクラス作れば良いだけだけど すみません間違いました
not blittable が出るのは
struct s2 の中に class c1 があるとして
GCHandle h = GCHandle.Alloc(s2, GCHandleType.Pinned);
IntPtr ptr = hndl.AddrOfPinnedObject();
// ptr を利用
h.Free();
ちなみに
struct s2 の中に struct s1 があるとして
同じことをしたときは問題無いです >>18
struct を定義するときにメンバに class があるとき
その class を blittable にする方法を知りたいです そのclassの内容によるとしか…
無制限にマーシャリングできるわけでもないし
classのメンバがblittableならそのままstructにすりゃいいだけだけど
参考になるか知らんがstringを含む場合
[StructLayout(LayoutKind.Sequential)]
struct Foo {
public int id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string name;
}
class Program {
static void Main(string[] args) {
var sizeInBytes = Marshal.SizeOf<Foo>();
Console.WriteLine($"SizeOf={sizeInBytes}");
var coTaskMem = Marshal.AllocCoTaskMem(sizeInBytes);
var foo = Marshal.PtrToStructure<Foo>(coTaskMem);
foo.name = "John";
Console.WriteLine(foo.name);
Marshal.DestroyStructure<Foo>(coTaskMem);
Marshal.FreeCoTaskMem(coTaskMem);
}
} >>21
そもそも内側は struct で充分なんですが
初期値を入れたいのでそのためには class でないといけないとしたら
class にするとエラーになるのでやっぱり困るっていう話です
struct でデフォルト値入れられないと割り切れば済む話です 2度手間っていうか面倒くさいけどStructureToPtrでバイトストリームに一括で変換するのが
目的ならば、外に見せる部分はclassで作っておいて中にstructを定義する
structの要素にはプロパティでget/setする初期値はclassのコンストラクタで設定
classにバイトストリームを取り出す(StructureToPtrに絡むロジック)メソッドかプロパティを
定義するみたいなのじゃダメなのかな
class point {
public point () {
x = 0;
y = 0;
}
private _point _Struct;
public int x {
get { return _Struct.x; }
set { _Struct.x = value; }
}
public int y {
get { return _Struct.y; }
set { _Struct.y = value; }
}
public byte[] bytestream {
get { return structToPtrFunc(_Struct); }//メソッドは別途作成
}
[StructLayout(LayoutKind.Sequential)]
private struct _point {
int x;
int y;
}
} むしろ StructureToPtr を使いたくないっていう話です
やりたいのはこっちです
GCHandle h = GCHandle.Alloc(s, GCHandleType.Pinned);
IntPtr ptr = h.AddrOfPinnedObject();
// ptr 操作
h.Free();
途中のレスで一回変な事を書いてしまったので混乱させてごめんなさい 意図がそれならそもそもなんで親に値型使ってんのってところまで後退しちゃうぞ
値型にGCHandleのピン付けってそこだけ見ると意味不明だし
省略している「ptr操作」の内容次第では初っ端からアプローチを間違えてる可能性がある Cの構造体って構造体の中に別の構造体入れてもコピーが発生する訳じゃない
(子の構造体をいちいち作る訳じゃないから)
C#をCと同じと思わない方が良い >>28
C#の場合、classは、Heapに実態を確保して変数は参照型で、
structは、スタックなどに実態を確保して、変数は値型だと
聞きました。
C++は、strucとclassは、protected/public などのaccess control以外に
違いが無いこととは対照的です。
というわけで、C#の場合でも、structに関しては別のstructの中に入れた場合
は、C++と同じような動作なのではないかと思われます。 そもそも、「無駄なコピー」ってのがどんな想定なのかわからん 質問いいですか?
C#のアセンブリの読み込みってどういう手順で行われてるんですか?
同じバージョンの.net core から.net coreを呼び出してるのにTypeIntializationExceptionが発生します
たぶん正しいアセンブリが読み込めてないのだと思うのですが、アセンブリの読み込みタイミングやバージョンを指定することは可能なのでしょうか 上のお話見てると突き詰めれば値型と参照型の定義の問題になってきそう
C#の構造体は中に値型以外を詰め込むとその部分はCレベルで言うポインタのポインタを保持する形になってコピー時の挙動以外はclassと大差ないものになっちゃうよね
ポインタのポインタの値型だと言えばそうなのかもしれないけど >>31
単に静的コンストラクタ内で例外が出てるだけじゃね?
例外型だけじゃなくて例外メッセージやスタックトレースも読んで 参照してるdllにエントリポイントがないと言われるだけでそれ以上検索してもなにも出てこないです
こう聞いた方がいいのかもしれないです
.net frameworkの時は自前でシステムのアセンブリ参照できましたが
.net coreにも似たような仕組みはあるのでしょうか
こういうアセンブリ関係の問題は.net frameworkの時は自前で参照加えたらできたんですけど
.net coreになってフレームワーク二つしか選択肢がなくなって細かい参照が出来なくなってますがそれはどこがどういう風に解決してるのでしょうか?
特定のライブラリが使いたいというよりそこら辺の内部仕様が知りたいです あ、アセンブリが読み込めてないと思った一番の理由はdllでなくプロジェクトにcsで組み込んだらちゃんと動いたからです
そういう意味で言語レベルでのミスはないです csc -reference:(.NetCoreのpath) hoge.cs でいけるよ WindowsFormで写真データ取り込みを作ってるんですが、
DriveInfo.GetDrives()してもWindows10に接続して認証したあとの
iPhoneのドライブが読み取れず・・・
どうにか拾えないもんでしょうか? あれは普通のディスクとしてマウントされてるわけじゃなくてメディア転送プロトコルってやつだから、
それじゃアクセス出来ないと思う。 >>38 >>39
ありがとうございます
よく調べてみます カレントディレクトリに
\data¥
というディレクトリを作成したいのですが、
どうすればいいのでしょう? >>42
できました。ありがとうございました。m(_ _)m 機器構成の設定を記載したconfigファイルをアプリ上で作成して、
アプリ実行時にconfigの内容を変数に読み込むことを行おうと思ってます。
configファイルって普通どんなふうに書くんだろうと思って、
あるアプリのconfigファイルを覗いてみたところ下のような感じになっていました。
[Config]
StartUpLeft=-2147483648
StartUpTop=-2147483648
StartUpWidth=640
StartUpHeight=480
SaveWindowPosSize=1
SaveWindowRectLeft=597
SaveWindowRectRight=3645
SaveWindowRectTop=1256
SaveWindowRectBottom=3436
SaveWindowMaximize=0
このテキストファイルを
string line = sr.ReadLine();
// 読み込んだ一行をカンマ毎に分けて配列に格納する
string[] values = line.Split('=');
とすると偶数のvaluesに値が入ってるからこれを使用するみたいな感じでOK?
〇〇できちっと書けやぁ!みたいな形式があったら教えて下さい。 >>45
ググってみましたが難しい・・・。
アプリ内で変数を10個ぐらいもっていて
int hoge1=100
int hoge2=12
等
これをテキストファイルに保存し、必要なときに
int hoge1=100
int hoge2=12
にアプリ内で戻したいのですが、簡単に実現出来る方法があればいいなと思ったのですが・・・。 >>44
その形式は ini ファイルなので C# ini ファイルでググれば事例がいっぱい出てくるよ
基本はWin32APIのGetPrivateProfileString( )とかを使う
もし設定ファイルの形式をこれから決められるならjsonおすすめ
DataContractJsonSerializerクラスを使えば読み書きも簡単だし まずアプリケーション構成ファイルを検討するべきだと思うんだが なんかどんどん難しくなってきました。
最近だxmlで書くのがデフォルトなんでしょうか・・・。
iniで書くのも結構荷が重い、気合い入れて勉強するべきか・・・。 いまだとjson以外で書くことないな。
どんなプラットフォームでもjsonはサポートしてるし、どんなものでも入れられることがわかってるしね。 ものによるやろ。xmlで書くこともあるし、もちろんjsonも。yamlだって最近は多いでしょ? xmlはめんどくさすぎるから、DTDでちゃんと定義したいとかじゃなかったら使いたくないな。もちろんケースバイケースなのはそうだけど。
改行区切り、タブ区切りとかもまだまだ場合によっては使うしね。 カンマ区切りと固定長のまざった独自糞フォーマットでのIO書いたことはあるけど、自由に出来る時はjsonかxml
大体はjsonだけど、きちんと定義したデータ使いたいときにRelaxNGで定義してXMLで書いたことはある。 些細な枝葉で悩む時間あったら
本体のプログラムで悩め プログラマーはつい余計な事まで調べてしまう生き物なのです 調べるのはいいが掲示板で最初から聞くのは違うな
そしてどうでもいいことにこだわり始めるのはだいたい行き詰っているとき global::クラス名で
2つがバッティングしてます
外部からのdll2つなんで
namespaceつける等の変更できない
どう解決できる? global::ファイル名.クラス名
とかできない? ちょっとくだらない質問で申し訳ないんだけど
構造体の定義のソースってどうしてる?
クラス内に通信電文用の構造体をいっぱい作ったのだけど
ソースがでかくなっちゃうからpartial使ってわけた方がいいのか
あくまで一個のソース内にまとめるか・・・ どれくらいでかいのかわからんけどあんま分けないかなー?
1万行超えるとかなら分けること考える 分割しようかと迷う規模なら分割もありだと思う。
ベース部分は独立させて、機能毎に実装ファイルの頭に使用する下位レベルの電文を定義する。
電文は全部まとめるか?分割するか?ケースバイケースだね。 クラス内にネストさせるんじゃなくて
下位の名前空間作ってそこに構造体群を置けばいいよ >>68
クラス内に作らないで独立させれば良いのでは? だいたい >>73 方式で、基本的には ファイル名 = クラス名 を目指すな。自分は。 xamarin でTDDを勉強してるんだけど、
public event PropertyChangedEventHandler PropertyChanged;
この PropertyChanged 自体がnullになって例外で終わるのって
どういうパターンがあるんだろう・・・。
勉強したいことと全く別のところで長期足止め。わっけわからん状態。 >>76
ハンドラが1こも登録されてないとnullなんじゃないかな >>77
やめろよ、普通の質問なのに。
Xamarinの話題も良いじゃん。 ここで質問するより
直接ちょまどにツイートしろって意味かな?
返事来るかどうか知らんけど >>78
ありがとう。どうやら「どっかが+=してくれる」っていう前提なんだね、これ。
PropertyChanged?.invoke(this, e);
で呼び出したら動いた。現役じゃなくなって長いもんで(趣味のプログラム)、
このへんの書き方に苦労するなあ。 >>81
null条件演算子が出来る前はeventに空のdelegateを代入しておくテクニックがあった
public event PropertyChangedEventHandler PropertyChanged; = delegate {}; >>82
あ。やっぱそうなんだ。「これ、ダミー関数入れときゃエクセプション
投げられないで済むんじゃねえのか?」って思った。
ところで1つ目のセミコロンて要るの? フォームアプリで
フォームAで検査をして、検査終了後に
「データを記録しますか?」
「はい」「いいえ」
というウインドウを表示して、
「はい」ならデータ記録
「いいえ」ならデータ廃棄
としたいです。 データはフォームAにあるので、
1. フォームAからフォームBを開く
2. フォームBは「はい」「いいえ」を戻り値としてAに渡す
3. フォームAでデータ記録、データ廃棄の処理を行う
みたいな処理でいいのでしょうか?
それとももっとよいやり方がありますか? ありがとうございます。
これですね。
なんかフォーム新たに作るとかこんなめんどくさいことしなきゃいけないのか?
と疑問に思ってたんですが、聞いてよかったです。
ありがとうございます。
明日実装してみます。 C#からpythonのプログラムをコマンドライン引数hoge付きで実行したのですが、
System.Diagnostics.Process.Start("python.exe", @"""L:\main.py hoge""")
とやっても実行できません。
なにかより方法ないでしょうか? なぜスクリプトファイル名と引数をダブルクォートでひとくくりにしてる? >>91
分けて書いたら第3引数は取らないとエラーが出たのですが、
どう書けばよいのでしょう? System.Diagnostics.Process.Start("python.exe", @"L:\main.py hoge") >>93
ありがとうございます!
解決しましたm(_ _)m var sb = new StringBuilder();
var c = 'a';
while (true)
sb.Append(c);
これで一番下の行に破棄'_'を使用っていうVSによるヒントが出てくるんだけど、
こういう場合の破棄って使用する場合としない場合でどういう違いがあるの? >>96
破棄は、未割り当ての変数と同等です。つまり、値がありません。
破棄変数は 1 つのみであり、破棄変数には記憶域も割り当てられないため、破棄を使用するとメモリの割り当てを減らすことができます。
また、コードの意図がわかりやすくなるため、読みやすさと保守性が向上します。 linqて出た頃はselectとか予約語になってたはずだけど、今は使わん方がいいの? LINQやクエリ式を連想するからやめといた方がいい あくまでコンテキストキーワードだから当初から識別子として使えたよ
group辺りは変数名として割と使う groupって変数名としてほとんど何の情報も持たないし普通にバッドネーミングでは
GroupTheoryのGroupとかの専門用語でもない限り >>101
右辺から意味がはっきりしてる寿命が短いローカル変数ならいいんじゃない?それこそlinqのグループバイの戻り値とか。まぁそんなんだったらgとかにしちゃうけど LINQの話題になってるから聞きたいんですが、LINQって結構遅い?
ベンチマークとって襲いって主張してるブログとかはあるけど、実業務で遅さを実感する事ってどのくらいある? LINQ使わないで書くよりも遅いことは遅いんだけど、経験的にはあんまり問題にはならなかった
実際に使ってみてどうしてもLINQ使ってる辺りでネックになるようなら、
そこだけ書き直す感じでいいと思う Linq使ったほうが楽に高速化できることもあるし、場合場合じゃないかな。
PLINQは良くコア数指定せずにぶん回して「遅い」って言ってる奴いるけど、コア数指定したら割と良い線行く。 処理速度が求められるような部分だとネックになってると感じることもある
シミュレーションみたいなのね
そういうの以外では全く気にならない
どうせ処理速度より通信やファイル読み書きのほうが圧倒的に時間かかるから linq to sqlだと気付かずにクエリがクライアント側で行われるなんてことが無くはない ループのコストを気にするレベルの処理(数値計算とか)だとLINQは遅いが
大半の処理は0秒の範疇で終わるし遅さを実感できるタイミングは少ない むしろ普段使いこそLINQ
ガチで組むときだけ使わない ほぼC#経験しか無いのですが、最近iPhoneでアプリ作りにトライして貰いたいと言われました
経験的にC#とXamarinで作れたらと思うのですが、実用に耐えるものなのでしょうか?
王道のSwiftを覚えるべきでしょうか
オススメをお聞きしたいです 産まれながらに豪運をお持ちであるか
最終的に開発するアプリがごく小規模でないのなら、Swiftを薦めるかなあ
ネイティブのクロスプラットフォームフレームワークって機嫌よく動いているうちはいいんだけど
いざトラブルが起きた時、フレームワークそのものの知識と目的のプラットフォームの知識、両方がないと問題を解決できないのね iOSの事はあんまりわからんけど、Androidの場合でも、結局Androidの記事を読むことになるから、ネイティブの知識は必要になるよ。
だから逆にネイティブの知識で何とかなるXamarinは好きなんだけど。
ネイティブに対してLinqが書けたり、C#のライブラリが使えるメリットを感じられなければ、ネイティブの方が良いと思う。
俺はサーバ側もc#で済ますときに圧倒的に楽だし、Linqめっちゃ使うし、LiteDBとか使いたいからXamarinは割と選択肢にしてる。
気持ち悪いとか、信者がどうとかそういう話に持ってくのはやめてほしいわ。 やはりネイティブで慣れた上が無難ですかね
情報量はネイティブのが多いのは確実でしょうし
アドバイスありがとうございます docker使うときって、
単一バイナリビルドしてalpineイメージに乗せる、
普通にビルドしてdotnetイメージに乗せる
どっちがいいんだ winforms で webview2 の source プロパティ設定しても表示されないんだけどなんでか教えてくれさいエラーは出ません >>121
CanaryチャネルのEdge入れてる?
https://docs.microsoft.com/en-us/microsoft-edge/webview2/gettingstarted/winforms
>Ensure you installed the following list of pre-requisites before proceeding:
>Microsoft Edge (Chromium) Canary channel installed on Windows 10, Windows 8.1, or Windows 7.
>Visual Studio 2017 or later. NAudio.Lameがサンプルレート44100&16bit以外のwavをmp3に変換できないのってなんでなの?
lame_enc.dllのラッパー作ったらこっちではどんな形式のwavでも変換出来たからまぁ問題は解決してるんだけど上記じゃできない理由が知りたい Visual Studio インストールできない環境なんですが、csc でコンパイルはできます。
using SpeechLib
を使うためにはどのファイルを /r: で指定すればいいんですか? Microsoft スピーチ SDK はインストールされています。 >>125
ゆうちゃんがしていた方法じゃん
SharpDevelopをお勧めしますけどね tlbimpでsapi.dllからマネージDLL作ってそれを参照 かね
msbuildも使えるだろうからcsprojでCOMReference要素使った方がいい気がするけど >125
https://rti7743.?diary.org/entry/20111215/1323965483 VisualStudio が大きすぎて重すぎてインストールさえできないんです ( ノД`)… >>129
PC買い換えろや
インストールすら不能ってそれじゃVisualStudio以外のことするのもきついだろ VS入らないマシンにリモートデバッガだけ入れて、VS入るマシンから開発すれば? 個人的にはVisualStudioかVScodeが使えなかったらC#は使わないだろうな
それらのサポートがあってこそ楽できるC#だと思ってるw
>>132
最初からVS入るマシンでやれよw メモ
var environment = Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(@"C:\Hoge\Homo\Microsoft.WebView2.FixedVersionRuntime.87.0.664.8.x64");
await webView21.EnsureCoreWebView2Async(environment.Result);
webView21.CoreWebView2.Navigate("http://www.google.com"); EnsureCoreWebView2Asyncをawaitするならenvironmentもawaitすればいいのに VisualStudio 2019 入れても SpeechLib 使えんかった。 まほろばサイトの通りにしてもエラーで .exe 作れなかった。
まほろば の環境に合わせて VisualStudio 2010 入れるしかないのか。
VS2010 手に入れられるのか? メンドクセー string.Createでの書き込み先ってゼロクリアされた状態なのが仕様? > The initial content of the destination span passed to action is undefined.
> Therefore, it is the delegate's responsibility to ensure that
> every element of the span is assigned. Otherwise,
> the resulting string could contain random characters. >>139
そう書いてる割には渡されたSpan<char>をループで回してみると0オンリーなんだよね
これはプログラム立ち上げたばかりで余ってるヒープから確保されたものではなく、メモリ確保とセットになってるからってことかな? debugとreleaseでメモリの初期値が異なるのって.NETもそうだっけ? 責任まできちんととってくれるなら、理想の上司ではある。 ソフトウェア開発において絶対正義は絶対存在しないので無理です
そのマンガのキャラみたいな台詞は顧客に向かって言うべき List<T>で要素数30億個が必要になった
しかしList<T>のインデックスはint32なので普通には無理
サードパーティ製のLargeList<T>を使えば80億までは行けると聞いて試したらList<T>の倍以上の時間がかかるから使えない
なんかいい手がないですかね? 30億個必要な設計を見直す
1億×30個じゃダメな理由でもあんの?
そらそんな個数必要なら時間もかかるだろうよ ・本当にList(ArrayList)が妥当か?
・どうしてもC#でやらなければならないか?
をまず考える 30億のインデックスが必要という案件自体に
なんか無理がありそうな気がしますがね…
データが固定長ならば
30億xデータ長のファイル用意して
ランダムアクセスすれば比較的容易かも
キーが1〜30億の間の数値というだけで、
データ個数がそこまで無いならDictionary
データ30億個ガチで必要かつ可変長やソートが必要なら
LiteDBみたいな外部DB使うとかしないと現実的じゃない C++のマクロが欲しすぎる
コードジェネレーターってコレじゃないんだよ… コードジェネレーターはあらゆることができるけど手軽さは無いね System.Runtime.Intrinsics.X86っていう面白そうな標準ライブラリ見つけたが
ストリーミングSIMD拡張命令を扱う割にはVector256とかに吐き出してレジスタだけで済ませられないからパフォーマンス目的で使える訳じゃなさそうだな >>155
具体的にどういう使い道ありそう?
ポインタからロード → ポインタへストア、これが出来ればコピーを4倍速で出来そうなもんだけど
この間にstructへ吐き出し(スタックへ書き込み)が混じると利点が台無しになってないか? 今から本番稼働想定したasp.net書く場合.net5は避けた方が良いのでしょうか?サーバーはコンテナ稼働想定してます。 別にいいと思うよ
.NET6がでたら乗り換えるだけ
コンテナということは高頻度で更新するんでしょう? 西村博之 「10年くらい前にMSがC#っていう言語をリリースしたんですよ。その時は「これからはC#の時代だ!」ってみんな言ってたんでけど今はもう誰も使ってないんすよねw」
元WEB系から見たらこんな印象なんだな
文字列の関係からweb系からは程遠い言語ではあるけど、そろそろutf8string実装して見返してもらいたいわ 俺も見てた perlと同じ扱いされてたな
さすがにちょっとだけ反論でてて一言謝ってたけど Unityでめっちゃ使われてるからゲームだとC#だらけってイメージ >>161
嘘を嘘と見抜けない人にはネットを使うのは難しいって言った人間だぞ
こいつの言う事はすべて嘘だと思っておくべき C#がリリースされたのは約20年前
つまり西村の時系列が10年ズレてると考えたら、2010年前後のC#はデスクトップ開発専用言語でありスマホWeb時代の到来によりオワコンって評価だったからそういう認識になるのも分かる
実際はその後マルチプラットフォーム対応やUnityでの採用により今では上位で健闘してるが Web系の人は世の中にWeb系以外存在しないと思ってるからね
HTML、CSS、JS、PHPを勉強してプログラマー転職とか言ってる胡散臭いイメージの方が強いんだけど C#の作者がTypeScriptに行っちゃって
あっちの方が進化が早い気はする どんな変遷だろうが知りもしないことをのたまったのは変わらんのだからフォローにならんぞ C#の作者ってDelphiの作者だよな
どこまで行くんだ TSは型システムが自由度高くて契約プログラミングの立場から見ると魅力的なんだが、
いかんせん記法が複雑すぎて黒魔術化するケースがしばしばある
その点C#は見た目素直で扱いやすい
でも判別共用体と型クラスははよう実装してくれ >>172
まぁ、そうだな、どうしてもってんなら考えてやってもいいな
でも、それが人に対する頼み方か?
頼み方ってもんがあるだろ? null許容参照型とオブジェクト初期化子って相性悪すぎでは?
昔のコードをコンストラクタ初期化に変更するのめんどくさい null許容参照型自体が微妙
null許容参照型の動機は立派だし尤もだと思うが既存の言語仕様やコードに馴染まない
導入するならC#8.0未満との互換性を切り捨てるくらいの覚悟でやるべきだった むしろもっと積極的に警告なんかじゃなくエラーにするぐらい厳しくnullチェックしてほしい この言語進化もしつつ、後方互換も残しつつよく頑張ってきたけどそろそろ限界なのかもね
ヘルスバーグさんがtsの方いっちゃってからはどういう人が方針決定したりしてるんだろう。 >>180
なんか君と絡むとめちゃくちゃめんどくさそうな予感
この言語が好きなのは分かる。俺もこの言語が好きで付き合いも長い。
しかし、言語は宗教ではない。
長所も短所もあるし、作るものによって合う合わないもある。
そして大抵の場合新しく出た言語の方が優れている。
ゲームを除いていまからC#学ぶ人は少ないんじゃないかな…
最盛期は過ぎてるよ。 そら後から劣化版なんて出しても意味ないんだから基本的には優れてるだろ
ただ新しく出された言語が広まるかはわからんし、何が広まるかの予測も難しい
ちょいと昔にはスクリプト言語は死んで関数型言語の時代になるって主張はよく見た気がするけど未だにそんな時代来そうにない
現状、ある程度広まっているものを学ぶ価値は十分にあるでしょ
完全新規ならjsやpythonでいいんじゃね?っていうのはわかるがC#は無いと強くいい切るのはまだ早いように感じる > 完全新規ならjsやpythonでいいんじゃね?っていうのはわかるが
それはわからない
スクリプト言語では代替にならないし後から出た言語でもない
後方互換に限界が見えるだけであって
C#が限界なんて主張してる奴は何も分かってない 新規にプログラムを学習する人の話なのに何の代替が必要なの?
C#の代わりに学ぶべき言語の話なんかしてないぞ
後から出た言語を学ぶべきなんて主張もしてない JSやPythonに比べるとC#のほうが新しいし高機能だからね
もう少し新しいSwift、Rust、TypeScriptあたりと比べてみるといいと思う
Swiftはいろいろ評判悪いところあるけど言語の機能としては学ぶべきところがたくさんある
.NET言語ならF# >>184
新規で勉強すべき言語も少なくともJSやPythonではないから論外 C#と比べるならKotlinだな
Swift、TypeScriptは知らんがRustはC#と比べるには低レベルすぎるしF#は現状ジョークみたいなもんだと思ってる 文字で記述するのを数式だけにして
あとポトペタとかラダーブロックとかで組み上げるようには出来んかね?
言語で思考する人が作れば、どうしても文法ありきのものしか生まれない 組込み機器の言語は未だにCがメチャ多いな。
ルネサスの開発環境見ればわかる。
組込み機器の操作パネルにラズパイを良く使うが、pythonだな。
windowsで操作パネルやるときはC#にするわ。 >>188
言語で思考しない奴は人間ではない
>>189
一般的に言って組み込み機器は環境がプアだからな
pythonなんて使えばimport文読み込むだけで数秒は掛かる mruby の本が出た
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11
宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応
人工衛星イザナギ・イザナミで、使っている c言語の知識しかない人が
10年前に新しい言語を学ぶとしたら
DelphiとC#どっちを選ぶだろう
今、新しい言語を学ぶとしたら
C#とTypeScriptどっちを選ぶ? KotlinのC#版作ってほしいなあ
C#と100%相互運用可能で、変数の再代入可否がvarとvalで書き分けできて、
レガシーになってしまったC#の文法(delegateとかC的なswitchとか)を全部そぎ落としたようなやつ
ネーミングは・・・K#とか? 後方置換無くすとしたら
.net5が最後のチャンスだったんではなかろうか
このままズルズルと古い言語のイメージを払拭できず
人口は減り続ける 互換切るくらいだったら新言語作ってくれた方がいいな 互換切られたVB6はどうなりましたか?
VB.NETやってますか?VB6続けてますか?
どっちも終わりましたね
BASICは終わったのです >>195
じゃ、今はdelegateを使わずにどうやってメソッドを呼んでるんだ?
代替手段あったっけ? >>199
VBは完全に終わればいいのにな
VBの文法が貧弱なのは公知の事実で
VB上がりのプログラマは変なクセがついてしまって
他の言語に移行したときに変なコードを書く
もちろん俺もVBで書くこともあるがマスターする気はサラサラない
10年以上前からいつか廃ると思ってるからな
去年MicrosoftがExcelでのマクロなどを
Pythonにするとかいうニュースが流れたがガセだったんかな >>202
そのニュースホントに去年?
OfficeのマクロをPythonにするの撤回してJavascript積むって発表したのが2018年末だよ
その後またPythonにすることに決めたってこと? >>204
聞いたことないの?結構話題にはなったけど web版のofficeのアドインはjavascriptで組むんじゃなかったっけ
C#で書いたデスクトップ版のアドインをweb版で使えるようにするにはjavascriptで書き直すしかないのかね 今年後半発売予定のOffice 2021に期待やで。 ノーアロックCOM呼びを実現するためにマニュアルマップインターフェースstructを丸一日かけて実装したぜ…
オブジェクト指向の偉大さが身に染みたわ Googleのスプレッドシートはjsでマクロ組めるし、それに倣ったのかな
どんな言語でも構わんけどVBAの開発環境はいいかげんマトモなものが欲しい >>211
マジで?
それ、むっちゃ良い情報
俺のJS魂に火が点いた >>212
jsわかるならGASでググればあとはノリでいけるよ >>213
GASでqiitaの情報見つけた、サンクスコ!
>>215
そっちのJSぢゃねーよ!!
・・・いや、無論、なんの意味かさっぱり分からんが・・・ オーケー、遅くても動くだけで満足
LibreOfficeも似非VBAライクなスクリプトじゃなくてJSにしてほしいぜ GASはデフォルトアカウントとファイルオーナーが一致してないと開けなかったりGoogleのよくわからん仕様(しかもエラーメッセージから解決しにくい)に振り回されるんだよな
個人的にはc#でエクセルマクロをvsで開発できたら最強だと思うんですけど >>220
普通にc#で作ったexeをキックしろよ無能 C#で作ったアドインをBookに同梱できればいいのにね
>>222
無能はお前だろw >>223
は?目的が不明
どうせマクロなんて大手じゃセキュリティで動かんで
本体は別exeにしとけ
エクセルでやるのはjson作るまでや それ、かみ合ってない。
a) C# でマクロを作れる環境があったらいいのにな
b) セキュリティで動かんから無駄
仮定と言うか希望に対して現状を持ち出しても仕方ないだろ。 >>225
だから作れても(望み成就)動かんて(結果) マクロって標準関数じゃ面倒見切れないような
入力値→シート内でなにか表示、系の処理がやりたくて使うんじゃないの?
json吐くとか外部連携だからレイヤーが違うんじゃないのか >>226
現状動く動かないじゃなくて
動けば良いなって話だろw >>227
UI部分だけエクセルでやるならありかな Excelでマクロ作るユーザー層はVSTOを開発できるユーザー層が違うからどうしようもない 大手って言っても色々
うちも定義上は大企業だけど普通にマクロは使えるし
そもそもマクロすら禁止してる職場でテキトーな.exeファイルを動かせるのか? 禁止されてるなら自前でルートキット仕込んでプロセス隠蔽しろよ >>233
マクロも.exeも禁止された環境に自前でルートキット仕込めとか頭おかしいとしか思えない 作成した実行ファイルまで引っかかると納品できないしexeは通るだろ
エクセルマクロは引っかかることはある exeはうちひっかかるぞ。
自分でビルドしたものは自分は問題ないが、人に渡して実行させた瞬間に某セキュリティソフトが「あんまり見ないexeだけど大丈夫か?」ってダイアログ出してきて、
迷いを見せたら情シス子会社にアラートが飛んでフルスキャンさせられる。 >>237
じゃあ、どうやってc#でビルドした納品物受け取るん? >>239
予めバイナリをひとつ受け取って情シス子会社に送ってスキャン対象外にしてもらう必要がある。
そこそこの企業はこういう運用だと思うけど。
マクロからexe蹴るなんてキチガイじみた行動絶対許可下りないよ。
exeをすげ替えられたら死ぬじゃん。
マクロは比較的動く。 >>240
ありえないなぁ
再ビルドしたら別物でしょ?ダッサw >>241
別物だよ。
納品物をコロコロとビルドし直さないといけない環境なの?って事。
なので自家ビルドは許されてる。
>>242
もちろんそれでも良いよ。 もちろんそれでも、じゃなくて署名以外ないだろ確実な方法は >>244
そういうわけでもないよ。
電子署名だと有効期限もあるし、単純につければ良いという話でもない。 電子署名付けたところで改竄されてない証明になるだけで、
元々の悪意の有無やバグの有無の証明にはならないからね おっしゃるとおりで、否認防止、改ざん防止にはなるけど、その署名や署名されたバイナリに悪意がないかは、別途登録は必要ね。
署名元に対して完璧に信頼できるなら、署名を資産管理に登録するって方法で、ある程度面倒くささを回避できるから「それでもいい」になってる。 詐欺サイトも平気でhttps使うし証明書もある時代ですし >>248
大嫌いなエビデンスの山。
それに加えて検収の時にそれなりの違約金が発生する契約するよ。 >>252
httpsに関してはLet's Encryptがあるし、変な証明書は探せばあるよ。 >>252
経路上での改竄がされてないって証明だけなんだから認証局は普通に認証するよ
EVSSLあたりになると会社の実在証明求められるけど そもそもGoogleがhttps始めたのはNTTみたいなスパイ企業に検索情報を渡さないためだからな
個人の安全なんて考えていない httpsを使ってる詐欺サイトの運営者はマジでタヒねばいいのに
もしエロサイト探してて詐欺サイト開いたんなら半分自業自得だけど
真面目に勉強のサイトを探してても詐欺サイトに出遭ったりするからな 技術用語検索してると「貴方は何人目の来訪者です」系の詐欺サイトたまにある >>257
>>258
技術用語でググって最初のページに出て来たサイトでも
開いたら「おめでとうございます!」っていうのを良く目にする
そっ閉じ あんまりそんな目にあったことないが…
一体どんな技術用語でググってるんだ? >>261
何で検索してるってより、
単にアドネットワークに詐欺サイトも便乗してるだけ
代理店が広告を精査しない限り無くなることはない 最近この手のサイトが検索上位に食い込むこと多くなったよね >>262
いやどんなワードで検索したら
> 最初のページに出て来たサイトでも
> 開いたら「おめでとうございます!」
なんてのをよく目にするんだ?
って話 >>264
リンク先の広告がリダイレクトかけるって話なんだから、
検索語が何だろうが広告が表示されるページに行く以上は無関係
って話 >>265
だから広告がリダイレクトかけるようなやばいページが最上位に出るようなワードって何よ?
って話な
そんなページって今時エロサイト位しかないと思うが… マジで理解できてないみたいで笑う
サイトには特定の広告しか載らないと思ってるのか?
広告はアドネットワークを介して表示されるけど、
アドネットワーク自体の広告審査はザルなのが多い
ザル審査を通っておかしな広告が紛れた場合におめでとうございます
だから同じサイトでも起きたり起こらなかったりする
検索語は全く関係ない 広告ブロックがもっとも効果的な防ぎ方
アドネットワークを特定できるならそこに報告すれば広告主はBAN
特定できるアドネットワークはなかなかないけどね >>267
そんな理由なら下手したらページ開く度にリダイレクトされるだろw
よくわからんからどこのページが
> 開いたら「おめでとうございます!」っていう
のか具体的に教えてくれ 見たいときに見られるような広告なら困らねーよw
理解できてないことを殊更に主張しなくていいからw >>270
わかったから具体的にURL出してよ
よく見るんだろ? 最近検索してないんでしょ
1日中検索するレベルで調べものしてたら週に1回くらいの割合で引っかかるイメージだから1000回に1回くらいかな
検索結果画面にはそれっぽい記事であるかのように表示されてるけどリンク踏むと全然中身の異なるページに飛ぶ
Adblock入れてるけど普通に出てくるな
調べ物中に出てくるから問題あるサイト見つけても即閉じてドメインごとブロックしちゃうからどういうときに出てきたかとかいちいち覚えてないわ
今度見つけたら教えてあげるよ ここまで盛り上がってるレスバではあるが、もはやプログラミングとは無関係な話題なのである 俺はよく目にするなんて一切言ってないんだけど普段からそういう勝手に相手の意見を捻じ曲げてレスする感じなの? >>271
俺も>>272と同様
俺は200〜500回に1回ぐらいと言っておこうかな
キーワードとしては本当に「微分方程式」とか「回帰係数」とかで引っ掛かる
例を挙げようと履歴を今月初めまで探したが…見つからない
Avast入れてるんだけど、開くと「危険なサイトです!」とか言ってブロックされるんだよ
それは履歴に残らないんかな?
>>271が単に気付かずに地雷踏みまくってるっていうオチも無きにしも非ず…
俺も見つけたら教えるわ
そん時までに絶対にセキュリティソフトは入れとけよ >>275
よく目にするは>>260の話
その流れで>>272を書いてるからそうかなって思っただけなんだが、すまんな 日本語だとリファレンスが機械翻訳だったり碌な情報がなかったりで
Googleで地域の設定をアメリカ+普段は日本語のページを検索にしてると
割とよく有るかな、Wikipediaのクローンみたいな謎のサイトも出てくる stackoverflowのクローンサイトの話か? よく目にする
割とよくある
でも具体的には出せませーん
ってか?w 見たことあるという複数人のレスがあるけど僕は見たこと無いから知りませーんwwwて小学生かな?
わざわざ怪しいサイトのurlなんぞ記録なんかしてないっつうの
調べものしてるときに出てくる関係ない情報をいちいち記録なんぞしてたら作業終わらんわ 機械翻訳かましただけのクローンサイトも検索妨害してきてうざいけどそれでは無い
記録してたわけではないから正確ではないけどここ半年〜1年くらいで出現し始めた印象
俺個人は多分10回くらい踏んだかな?
ほっときゃそのうちgoogleが対処していなくなるっしょと思ってるから大して気にはしてない >>281
どんなワード使ってるのかもわからん
※ 「微分方程式」とか「回帰係数」ではそれっぽいのでないし
どんなページかもわからん
でも複数の人が見たことあるって言われてもなぁw
単にエロサイト踏んでるだけにしか見えんわ 結構出てくるけどな。
この間優待で作ったカードを検索したらめっちゃそれっぽいのひっかかったよ。
シークレットウィンドウで検索しても出てくる。
貼れるのかな。
3ページ目ぐらいから変なリンクばっかりになってくる。
https://www.google.com/search?client=ms-android-google&ei=ERQ5YPmdMIi5wAOEgY3oCg&q=%E3%81%BF%E3%81%9A%E3%81%BB%E3%83%97%E3%83%AD%E3%83%A0%E3%83%8A%E3%83%BC%E3%83%89%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BA%E3%82%B4%E3%83%BC%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89&oq=%E3%81%BF%E3%81%9A%E3%81%BB%E3%83%97%E3%83%AD%E3%83%A0%E3%83%8A%E3%83%BC%E3%83%89%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BA%E3%82%B4%E3%83%BC%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89&gs_lcp=ChNtb2JpbGUtZ3dzLXdpei1zZXJwEAMyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgUIABDNAjoECAAQRzoECAAQBDoGCAAQBBAeOgQIABANOgYIABANEB5QqCBY_k9g-FFoB3ABeACAAawBiAHOEZIBBDIuMTWYAQCgAQHIAQXAAQE&sclient=mobile-gws-wiz-serp#ip=1 見たことないと主張できる程度には検索してんだよね?
個人的には検索回数なんか数えたことも無いけどここ半年で1万回くらいは少なくともしてんだよね?
調べものが少ない仕事なら1週間で10回も検索しないような人も多いと思うけど、まさかその程度で周囲にいる複数人の証言を馬鹿にしてるなんてことはないよね? >>285
技術用語でもよく出てくるけど、直近で思い出せる範囲で再現性のある言葉がこれしか見つからんかった、それに関してはすまん。 技術じゃなくてゲームだけどまとめてくれてる記事あったわ
https://note.com/setohima/n/n379c3947ad68
リンク踏んでくれりゃなんでも良いからあらゆるジャンルの記事から飛ばしてるだろうし、その一つに技術まわりのものがあるってだけ ゲームでもあるのな。
いや、ホント最近多いよ、こういう類の変なサイトに飛ばされるやつ。 俺も検索はしまくってるけど経験ないわ
uBlockが効いてんのかな
ESETがそのサイト行っちゃダメ!って止めてくれることは偶にある >>286
スレチだな
そんなことが本当にあるなら一度見てみたいと思ってる人がいるかもしれないから
その状態を再現できる検索語を挙げるのは良いとしても
それ以外で続けるようなことではないな スレチかどうかと言うなら初っ端からそうだろw
なに俺ルールで一部を正当化してんだw
そもそもうちじゃ署名なしビルドされたexeなんてセキュリティ上使えんよ、って話からスレチだ
そこからセキュリティ→https→詐欺サイト→最近の検索結果と脱線し続けてるんだから ゲームとかエロとかちょっと頭の弱い子が飛びつくようなワードならまあなんとなくわかる
> 技術用語でググって最初のページに出て来たサイトでも
> 開いたら「おめでとうございます!」っていうのを良く目にする
って言うのが単に疑問だっただけ
Googleの検索結果が近年劣化してるのは俺も認める みずほプロムナードメンバーズゴールドカードが、頭の弱い子が飛びつくようなワードか?
疑問だったとか言い訳せんと、そういうタイミングもあるんだな、すまんと謝って幕引けよ。
お前が認めようが関係なく、すれ違いの話をねちっこく「ほんとか?」「嘘だろ」と繰り返したからだろ。 >>292
ストレートで勝負できなくなったピッチャー感あるよね >>294
なんでわざわざそのワード出してきたのかわからんし指摘済みだけど
技術用語じゃないよね
どんな技術用語でそうなるかまだ出てないよね >>294
> みずほプロムナードメンバーズゴールドカードが、頭の弱い子が飛びつくようなワードか?
そうだと思うよ…みずほだし…
まあマジレスしとくと金絡みに飛びつくやつ狙いなんだろうね、お前みたいにw みずほでまともなのはCBの方な。
なおIBM系やみずほ自身はF系や 技術用語でも出るんだけど、再現例を出すのがめんどくさいから再現性の高い例を上げたんじゃん?
多分これで出るわ。
「stackoverflowerror jre7 ibm oracle」
微妙に間違うのが良いのかな。
>>297
なんやろこれ…って思って飛びつく前に検索したんよね。オリコなのは残念。
みずほプロムナードメンバーズ自体知名度低いしなぁ。
みずほはそこまで悪くないぞ。 釣る側は技術用語であるかどうかなんてどうでも良いんだから適当な単語埋め込むであろう
もちろん検索ヒットする可能性が高い単語である方が効率は良いが、bot等駆使して大量に作るんだからそこに技術用語が紛れる可能性があることは容易に想像できる
web上には技術絡みのページはそれなりの数があるんだからわざわざ除外する必要性がない
ゲームはあるけど技術用語にはあるわけが無い、あるなら例示せよ!って言う主張はどういう根拠から? 気になるから例見つけたら教えてや
で終わってた話をエロサイト踏んでるだの頭弱いだの煽る必要があったの?
普段からそうやって煽ることしかしてないの? 大企業エアプのパソコンの大先生が空想上の解決法を唱えて、否定されたらそれを認めたくなくて他の意見を見えないふりするスレ >>306
どんどんページくっていってみ。
一番上ではないわ。 順番ばっかりは広告の出稿状況だからな。
存在はしてるって事をまぶ認識してくれ。 めんどくせえな
そりゃどんなワードで検索しても後の方は変なもん出てくるわ >>302
> 普段からそうやって煽ることしかしてないの?
いきなり
> 見たことあるという複数人のレスがあるけど僕は見たこと無いから知りませーんwwwて小学生かな?
とか言う人に言われてもねぇw >>307
要するに
> 技術用語でググって最初のページに出て来たサイトでも
は盛ってたって言う認識でいいかな? >>311が認識していない事象は世の中に存在していない
唯>>311論 >>311
俺は最初に出てきたとは言ってないし、
広告の状況や検索ワードによっては一番上に出てくるぞ。
検索ワード連動広告なんて水物なんだからこれだって言えるわけ無いでしょ。
馬鹿なの? >>303
ふらっとの隔離スレ
ここで見た変なワッチョイNGしとけばふらっとの方でも見えなくなって便利
レス番飛びまくっても気にしない >>312-313
だから
> 技術用語でググって最初のページに出て来たサイトでも
> 開いたら「おめでとうございます!」っていうのを良く目にする
というワードがあるなら教えてよ
順序は水物って言うなら日頃からそういうサイトを見まくってるんじゃね?w >>315
そういうサイト見る意味がわからんが、検索ワード連動広告の仕組みも知らんのかな?
水物の意味がわからんとか?
https://www.google.com/search?q=execute+deploy+pascal+delphi+interactive+online+script+compiler+explorer+decompiler+linux&client=ms-android-google&prmd=vni&source=lnt&tbs=li:1&sa=X&ved=2ahUKEwi0-M2rvYnvAhXMG6YKHQ3CB0kQpwV6BAgEECA&biw=432&bih=736&dpr=2.5 詐欺に使うキーワードなんて大体決まってるんだから
AIで学習させて排除できないんだろうか そんなのあったら排除されるキーワードを避けるAIができちゃうんじゃない? セキュリティ対策周りも検索エンジン周りもすでにAIは活用されてる 詐欺サイトなんていくらでもあるから
普段からそういうの踏みまくってんだったらセキュリティ意識低いんだろうな vXrabasWdや俺・・・勉強熱心で検索回数が桁外れに多いため、危険なサイトにも出遭いやすい
その他大勢の愚民・・・馬鹿で鈍間な亀のため、危険なサイトにはあまり出遭わないが、出遭ってもまったく気付かず個人情報を抜かれまくってる 今度はセキュリティ意識が低いとw
逆に意識してるぞ、なるほどわけわからんドメイン、レジストラどこなんだとか、どこのミラーか、とか。
生で踏むわけも無ければ、一応セキスペだしな。 >>316
> そういうサイト見る意味がわからんが、検索ワード連動広告の仕組みも知らんのかな?
アホすぎてずっとシカトしてたけど広告なんて普通クリックしないだろ… >>326
「Excel ○○するマクロ」程度でも普通に詐欺サイトあるぞ
見たことも無い馬鹿がほざくな、カス >>325
アホかな。
広告が終わったあとの残骸も検索にひっかかるんだが。
ごく普通のウェブサイトに見えるし。
しかし俺の貼ったURL踏んでもないのなwwww
理解力も無ければ見る能力もないのかwww
必ずしも広告自体をクリックするわけではない。
ほんとにアホなのな。
もうみっともないから黙ったら?
クリックはプライベートウィンドウとか、VM立てて敢えてやるときあるよ。
注意喚起もしないといかんしな。 >>327
具体的に書けよ
書けないなら黙ってたほうが良いかと
>>328
> 広告が終わったあとの残骸も検索にひっかかるんだが。
連動広告の話か?
ならあり得んよ、契約終わったら単なるWebサイトだからトップページになんて出てこないし
> しかし俺の貼ったURL踏んでもないのなwwww
⇒ >> 3ページ目ぐらいから変なリンクばっかりになってくる。
既に>>309で指摘されてるだろ
> ほんとにアホなのな。
> もうみっともないから黙ったら?
お前がな
> クリックはプライベートウィンドウとか、VM立てて敢えてやるときあるよ。
> 注意喚起もしないといかんしな。
話をそらそうと必死かよw 「よく目にする」じゃなくて「ごく稀に目にする」と言ってれば良かったのにな こんなとこじゃないと喧嘩出来ない奴らだな。かなしー >>329
トップページに出てくる検索ワード出したよね。
もういいわ。
>>330
俺は一週間に一度ぐらい見るぞ。
CADのカーネル系のことを検索してたりすると割と出る。
ニッチな、普通の検索結果が尽きる部類を検索してるか否かではないかな。
みずほプロムナードメンバーズゴールドカードもその部類だと思うわ。
まずみずほプロムナードウェブがニッチだから。 >>330
だよね
まあちょっと盛っちゃって引っ込みつかなくなった感じかと
今度はCADのカーネル系とか言い出してるしw
>>333
> トップページに出てくる検索ワード出したよね。
ごめん、見落としてるみたいだからレス番示して引用してくれるかな? C#のスレで技術用語検索の話してて最後はCADだとか言ってんの
全然一般的な話じゃない、ある種のおま環だわな >>337
CADデータをC#で操作したりすることなんかもしてるし、別に逃げでもなんでも無いが。
おま環というなら、出てこない方もお互い様におま環だろ。 CAD や カーネル は普通に技術用語だと思うけど CAD カーネル で検索しても特に怪しいのは出てこない
(1ページ目しかみてないけど)
この状況だとまたそれっぽいこと言ってごまかそうとしてるとしか思えない
> 別に逃げでもなんでも無いが。
そうかな?
> トップページに出てくる検索ワード出したよね。
と言いながら具体的に聞かれたら
> 自分で探せ。
とか逃げ以外の何物でもないだろ CADカーネルでググるやつ居たら馬鹿だわ。
具体的なCAD名とかそのSDKの名前でググるんだよ。
会社バレたら嫌だから名前出さんけど、大手数社のCADとそのSDK名でぐぐってみたら? >>340
CAD名でバレる会社?
言い訳もどんどん迷走してるぞw ca01-Xw+Oは業界に限らず何も知らないよ
知らない上に想像力も無く実務経験も無い
だから企業情報の漏洩に関しても頓着無い
自分の知る世界が全て この突然現れる擁護が自演臭い
なんの主張もなしにただただW4Olの味方をするw >>344
公正世界仮説の人じゃん、どうしたの急に >>342
意味わからん
大手のCADなんて使ってる会社いくらでもあるだろ
俺は電気系でOrCAD使ってるけどどこの会社なのかわかるってエスパーかよw
>>345
お前こそ急にどうしたw >>341
すごいよなw
大手の会社のCADなのに1社でしか使われてないってw
本当にそんなので会社名がバレるなら、誰かが大手数社のCAD名でググって該当するものを見つけて
〇〇でググると最初のページに出て来たサイトでも開いたら「おめでとうございます!」って出てくる
と言ったらワッチョイ 0bad-W4Olは会社がバレて困るわけで、そんなのを例に出すなよとw
〇〇以外にも□□とか△△とか、該当するものは他にもあるということなら
その名前を出せばいいんだし、そういう状況なら〇〇の名前を出しても
会社がバレることはないんだよな
ワッチョイ 0bad-W4Olの会社で使ってるのが〇〇かどうかは分からないんだから ああ、全然レベルが違うわ。
他社さんだけど、CATIAとWindchillに移行した大手、と言えば、あのグループしか思い浮かばんだろ。
お前の思う程度の大手ではない。 とにかく認めたくなくて必死なのはわかったわ。
大手エアプって言われたのがそんなに悔しかったんだろうか。 スレタイも読めない知能で喚くな
板違いだから全員出てけ すまんな。
以後普通にC#とかexeの話のみするわ。 >>348
まあ話作ったのはいいけどほころび見えまくりってやつでしょw >>349-350
そりゃ最近大々的に移行したって言うなら特定もされるかも知れんな
でもそう言うケースは正式発表してるからバレても問題ないだろ
あと大手エアプのクソレス無視してゴメンねw
>>352
そもそも
>>335 > もうレスしないわ。
って大見えきってたのに…
とっとと遁走しろよw CADってAutoCADとかVectorWorksとかどこでも使ってるようなのもあるけど、
2DのそういうCADばっかりが全てではないし、特殊性高いソフトも多いと思うけどな
基板CADだってCADだし、ぶっちゃけ自分がCAD使ってたとしても他の会社のCADのことは想像できないぐらいまちまちだと思うけどなあ。 >>356
特殊性があるかどうかどうでもいいことだな
使ってるCADの名前が知られたら会社がバレるから嫌と言いながら
そんなのを例に出すのはバカ過ぎるだろってことだから >>348 C#の話しようぜ。
実例は出したんだからイチャモンでしかないわw >>358
> 実例は出したんだからイチャモンでしかないわw
実例ってどれ?
まさかと思うけどみずほプロムナードメンバーズゴールドカードとやらなのかな?w なぁなぁ、F#ってC#の後継言語のつもりで作ったん?
だとしたら、F#はこけたけどさ、うまく行ってたら取って代わられてたじゃん?
この先、マイクロソフトはC#の上を行く言語を作って
「C#、今までご苦労ね、バイナラー〜、みんな新しいZ#に移ってね」するつもりあるんかな? .Net 6は早く試してみたいんだよな。
Xamarinの名前が無くなって、単なる.NET 6のAndroidアプリになるから、そういう意味でも期待。
Xamarinは名前に対して悪評が流れすぎ。 >>363
あくまでCILの上で動く1言語って方向じゃないの?
基本的にはC#がメイン言語になってるし、コンパイラもC#で書かれるようになったし。 >>365
じゃ、またCIL上で動くJ#なんていうC#と似て非なる新しい言語が開発されたらどうすんのさ?
J#はC#よりも短くて曖昧さ無く書けます、なんて言いつつ、
C#とは別に覚えることが増えて・・・みたいになったらC#で覚えたこと無駄になるじゃん
そりゃその先もC#は続けられるだろうけどさ、そこまで良い言語とも思えてないからやる気出ねぇ そういうのが出てきたときに君の好きにすればいいよ
今それ話す意味あるかい? >>363
https://fsharp.org/history/
The Early History of the F# Language
>>366
J#は既にある
https://ja.wikipedia.org/wiki/J_Sharp
C#と似て非なる新しい言語が開発されたらどうするかについては>>367と同じ 仕事なら文句言わずに指示された言語覚えて書けって話だし
趣味ならやる気の出ない言語使わなくていいんだし好きにしろとしか c#の言語仕様がある程度踏襲されてvs上で快適に開発できるならなんでもいいかな >>366
勉強したことが無駄になるかもしれないなんてありえないからやらないとかいって、
やらない理由探しをしてたらいつまで経ってもプログラムなんて書けないよ
そこまで良い言語とも思えない、というのはどのような思考を経てそう思うに至ったの? C#を越えたと誰もが認めるほどのNew#が出来たんならそれはそれで良い事だしな もう言語名に記号を入れるようなマネは止めていただきたい >>374
ググラビリティ悪いよな
まあC#よりGoの方が最悪だが >>376
C#に関しては不便はほとんどないよ。
まれに無関係なC/C++のドキュメントが引っかかることはあるが、
これはGoogleに逐語的に検索する機能(というか、余計な忖度を抑止するオプション)
が存在しないためであってC#のネーミングのせいではない。
もう20年ぐらいになるけど、Googleは独占的地位に胡坐をかいて堕落してる。
Chromeなんてポンコツでも信者みたいな奴がみんな褒めまくって熱心に
布教してくれるような状況が続いてるんだから堕落して当然だけど。 ああ、Rはググラビリティー最悪!
無理矢理RStudioとか統計とかクソいっぱいキーワード付けて探してる visual studioのことググってvscodeの記事引っかかるのなんとかならんか
MSはなんでこんな混同する名前付けたんだよ だからそれMSのせいじゃなくてGoogleの問題でしょw
何で誰もあの糞使いづらい検索エンジンに文句言わないのかほんと謎
近年は調子にのって事実上の「検閲」までやってるって話だよね いや名称の問題でしょw
visual studio codeだとvisual studioと被ってしまうのでvscodeという略称を使ってんじゃん
同じ単語が入った名称だけど、使用者に応じて結果を切り替えない検索エンジンに問題があるの?
「visual studio」という検索ワードに対してvscodに関する記事は除外するのが理想な挙動なの?
名称に記号を使うのも同様
識別子に記号が使えない箇所ではcsharpと記載したりすることもある
wikipediaの記事なんかがそうね
これをwikipediaの問題である、とかいうの?もしくはwebの問題かな? 利用しないからわからんがbingだったら検索性能は問題ないの?
知らんがgoogleと似たような結果だよね?
ってことは結局MS自身すら対応できてないんじゃんw ちょっと何言ってるのか分からないけどGoogleの問題点は
>>377に書いてるように指定されたキーワードを逐語的に検索するオプションがないこと。
"visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない
ドキュメントが検索結果に表れることを抑止できないことだよ。
>>380の人も"visual studio"で検索して"visual studio"と"VSCode"の両方のフレーズが
使われているページが引っかかることには文句はないだろう。
正直、検索エンジンはGoogleに駆逐された日本のガラパゴス検索エンジンの方が
シンプルで使いやすかった。富士通とかNTTがやってたやつね。 「フレーム問題」というのがあるから検索エンジンといえどもドキュメントの文脈まで
把握できないことは仕方がない。
だが"visual studio"と"vscode"を区別するのに文脈を理解する必要があるか?
"C#"と"C++"を区別するのに文脈を理解する必要ある?
ないね機械的にできるじゃん。 むしろ君が何言ってるかわからんよw
"visual studio"で検索して"visual studio"と"VSCode"の両方のフレーズが
使われているページが引っかかることには文句はないだろう。
いや、そこに文句があるって話なんだが…
例えばvs2019の拡張機能を調べたいときにvscodeの拡張機能に関する記事が引っかかる
これを問題視してるんだよ
2019もcodeも一般的な単語なのでvs2019、vscode双方のページにこの単語が普通に含まれてしまう
単語が入っているから検索エンジンで引っかかる
これを検索エンジンの問題だというの? どう考えてもMSの名称の問題だろ
Visual Studio Community
Visual Studio Professional
Visual Studio Code
これらをすべて打ち込めば、ある程度問題は解消される
しかし、記事を書く側が上記二つを"Visual Studio"と略して書くことが多いので、
"Visual Studio Professional"で検索すると見つからない記事が出てくる
なので"Visual Studio"で検索すると、今度は上記三つが引っ掛かってしまう
こんなことすら考えないMSが問題 そのパターンでProを区別していない記事が出てこないって
Pro固有の情報を求めてる読者に向けての記事じゃないんだから当たり前じゃん まだやってるよ
そんなに語ることあるなら専用のスレ作ればいいのに
その方が5chの検索性上げれるやん >>384
それ検索オプションの完全一致でできるよ
英語だとオプションの名前はverbatim(つまり”逐語的に”検索)
括弧やカンマのような記号入りは無理たけど
"visual studio”とかなら問題ない
>>382
バージョン名やマイナス検索を追加して
visual studio 2019 -vscode + 検索ワード
とかでやってみれば >>390
> visual studio 2019 -vscode + 検索ワード
まず、なんでそれをユーザーにさせるんだよ、って話だよ
それとVisual Studio Communityの記事の中に
「VSCodeの場合は…」とか言う文章が入ってた場合、
その検索方法だと一生見つからない
そこまで擁護するのはMSの人間か、相当の馬鹿なのか DataGridView 略して DataGrid >>386
なるほど、確かにまったく一致部分がない完全な別名なら
しなくてよかったはずの苦労が存在するのはその通りだと思う。
だけど企業のブランディング上そういう訳にもいかんでしょう。
やったことはないが生物の病原体のvirusを調べていてcompurter virusの記事が
引っかかることは多くないはず。
これは検索エンジンが
(1) 両者を区別した上で
(2) 記事のタイトルや内容からどちらを扱う記事か区別している
からだと思うが、本来同じことはVSとVSCodeについても可能なはず。
どうでもいいが、次のように入れたら
「"visual studio" 拡張機能 -"visual studio code" -"vscode"」
これはある程度機能するみたいだよ。
困るのは""や-の演算子が常に機能するとは限らないところ。 >>390
Googleに逐語的に検索するオプションはない。
""は機能したりしなかったり実に気まぐれだ MSの命名がお排泄物なのは昔からだから、こんなところで口からお排泄物垂れ流してるだけ時間の無駄 >>391
だから、それは本来はMSの責任じゃない。
本来責められるべきは検索エンジンの方だって
コンピュータウィルスについて調べていて
病原体のウィルスをコンピューターウィルスと比較する記事が
引っかかってしまうのは"computer virus"なんて名付けた人のせいか?
>>396
Windows RTとWinRTみたいに擁護のしようがないのは確かにあったね >>397
>コンピュータウィルスについて調べていて
>病原体のウィルスをコンピューターウィルスと比較する記事が
>引っかかってしまうのは"computer virus"なんて名付けた人のせいか?
ああ、その通りだ
MSと同じぐらい馬鹿だ
お前はもっと馬鹿だけどな スレチだけど新しい言葉を作る時って既存の単語を組み合わせるケースが多くない?
それをバカ呼ばわりってどんだけ増長してるの 命名なんてかばん語と既存単語が殆どで、
オリジナルの単語なんてまず無いし、
オリジナルの単語はイメージ付けづらくて廃れがち
検索エンジンが検索する人をバカにしすぎなだけ >>401
普段Google使ってないのか。
だからそれは不完全にしか機能しないんだよ。
ちなみに、調べてみれば分かると思うが、Googleは以前逐語的な検索を可能にする
オプションを検討している時期があったが、結局実現していない。 >>403
馬鹿な奴だ
では君に宿題。
Google先生に"アルゴリズム + データ構造"というありがちなフレーズを含む
ドキュメントを見つけさせてください。 記号を検索対象にできないのは常識だと思ったが未だにこんな奴がいるんだなw >>406
これも酷い
こんな奴って誰のことだよw しかし、どんな世界にも頭が悪いくせに謎の上から目線のバカはいるけど
今の議論はちょっと度を越してるねw > こんな奴って誰のことだよw
バカだと言う自覚はあるんだなw
まあ何がどう酷いかを書けてない時点でハッタリ臭しかしないけど なんかこの前からGoogle検索でマウント取りたがる奴が増えたな
てか同一人物か?w 俺じゃないぞ。
おとなしくしてるんだからいちいちそういう事言わないでくれ。 "visual studio"と"vscode"の区別についての話で
>>390が「検索オプションの完全一致」について
>括弧やカンマのような記号入りは無理たけど
>"visual studio”とかなら問題ない
と書いてるのに、それが「不完全にしか機能しない」例として
>"アルゴリズム + データ構造"
を挙げるってどうなんだろ >>412
こいつも」酷い。
何度も繰り返し言ってるけど、論点はGoogleに逐語的な検索を行うオプションが存在するかどうか。
逐語的って言葉の意味は理解してますか?
逐語的に検索するオプションは存在しない、という主張に対して>>390は反論として成立しているだろうか?
マジで大丈夫か
ここからはおまけ
もちろん、例えば機械翻訳が不完全であることがそうであるように、
Google検索の件の制約が技術的な限界に起因するものであればそれを批判するのは
言い掛かりだと言えるかもしれない。
Google検索の件の制約はそういう類の物だろうか?
考えるまでもないね。 >>413
問題になってるのはこれだよな
>>384
>"visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない
>ドキュメントが検索結果に表れることを抑止できないことだよ。
「検索オプションの完全一致」でこれは防げないの?
防げないのならその例を挙げればいいわけで
防げるなら「逐語的」の意味は関係ないよな >>414
また始まった
だから逐語的って言葉の意味を理解していますか?
防げない例は既に>>405に挙げている。
この例で君が引用した箇所に書いた問題を抑止できない理由は
Googleに逐語的な検索を行う機能が存在しないから
フレーズに記号を含むことがGoogleを「免罪」する理由になるとまったく思えないが、
仮にその言い訳を認めるとしても同様の問題は記号を含まない検索でもしばしば起こる
こんなのGooglle毎日使ってれば誰でも経験してるだろ。 >>415
>同様の問題は記号を含まない検索でもしばしば起こる
と言うなら実例をいくつか挙げればいいのに挙げないんだよな
>>384
>"visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない
>ドキュメントが検索結果に表れることを抑止できないことだよ。
これは「検索オプションの完全一致」で防げるってことでいいのかな C#の話するんじゃなかったのか?
喧嘩したいだけか? 連動広告で喚いてたやつと同じだろ
具体例を出せばいいだけなのにグダグダのオレオレ理論を書き連ねて誤魔化そうとしてるだけかと 連動広告は具体例出したけど認めない人が居たんじゃん。
結局なんにでもイチャモンをつけたいだけの実務経験ゼロの人だと明確になったんだし、そっちを排斥してくれ。 とりあえず、検索とかgoogleの話題で盛り上がってるのは区別なくアホだなぁ…と 例を出せって言うと勝手に相手が疲弊するからな
それに対していちゃもん付けるだけで論破した気になれて気持ち良くなれる
目的がそこだからやり合うだけ無意味 >>420
>>335とか言ってた人?
その後CADとかで取り繕うとして失敗してたねw
とりあえず具体例を出したと言うならレス番示して引用しなさいよ >>423
取り繕うも何も。
もういいよ。
無限に文句いうだけだろ。 >>422
例も出せないなら黙ってろって話な
腐ってもここ技術板なので具体的に語れない奴は要らんよ >>424
まともな例を出せばいいだけ
出せないなら黙ってろ >>425
黙っていれば疲弊しないですむしな
>>424
「もういい」のなら>>420も言わなければいいのに >>420
具体例出したけど認めないやつと同じやつでしょ
検索オプションすら知らずにしょうもないマウンティングして恥書いたので
エクストリーム言い訳してるだけ >>428
認めない奴はその理由も書いてあるだろ
理由がおかしいと言うならそう書けばいいだけ どっちが言い訳の言い訳だかわからんね。
認めない理由ww 恥知らずに勝てる人はいないよ
恥知らずに恥を知れと言っても無駄だ 無知は恥じゃないんだが無知を認められなくなったら終わり
過去の知識がどれだけあっても周囲の足を引っ張る老害でしかない
2件とも完全に老害パターン
同一人物ならまだ救いがある >>433
殺伐とするのがC#ならまだ良いんだけど、検索エンジンの話題で争ってるからなぁ… 200レスくらい関係ないレス続いてんじゃね
回線切り変えながらレスバトルやっている奴までいて引くわ
スレ違いのネタなら適切な突っ込みないからって自覚無くてもクズ ふらっとでも同じだけどC#と関係ないところでマウント取り合うよね c#ってWindows10の2004でコンパイルしたものって
win10 1803とかでは動かなかったりしますか? >>440
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/versions-and-dependencies
1803は既定で.NET Framework 4.7.2が入っているのでTargetFrameWorkをそれに合わせればいい。4.0〜4.72にしとけば動く
.NET CoreならTargetFrameWorkは考えなくていい おまいら、お待たせ
https://robotcheckion.online/?p=mjrdmmdgmy5gi3bpgm2dsmby&sub1=wbly&sub3=3v34qm1oqpiu&sub4=negative+binomial+distribution+problems+and+solutions+pdf >>266
はよ踏めよ、カスが!
踏まないならタヒね C# Seleniumでブラウザを閉じるときに
Quit();
Close();
の動作が最近のChromeのアップデートでかなり遅くなっています。
私だけでしょうか? https://news.mynavi.jp/article/20210325-khara_system/
>“新しい作り方”としてUnityとBlenderのワークフローに可能性を感じています。
>スキルセットとしてはC#やPythonが扱えると即戦力
シンエヴァの技術管理統括がこういってるんだけどUnityって映像業界でも活用されてるんだな 映像業界はだいぶ前からそんな感じだよ
建設業界なんかもUnity使ってるところでてきてるくらいだし C#もPythonもレビュー担当できる程度に普通に扱えるけど
Unity未経験だと雇ってくれないor新卒並の待遇でしか採ってくれない印象 3DCGは特にUnityなんかだとアート方面のことを考える人と
テクニカル方面のことを考える人が分かれてるから、
アート方面の人と会話さえ出来れば自分のアートセンスはあんまり関係ないと思うけどな
アーティスト向けのDCCツールはきついだろうけど うちも映像制作で使ってるよ。
PBRで良いものであれば、めっちゃ楽。
フェードアウトとか色々スクリプト書いて、タイムラインに並べられるように用意して、あとは3DCGが得意な人と分担してやってる。
レンダリング用のバッチ書いたりとか色々足回り作る部分は多いけど、便利よ。 どなたか以下の現象の解決策をご存知なら教えて下さい。
----
(1)フォームアプリケーションにRichTextBoxを配置
(2)RichTextBoxの縦スクロールを有効にする
exe実行
(1)RichTextBoxの枠内に入り切らない行数のテキストをペーストする。
※この時点でカーソルは最下位行になる。
(2)カーソル位置をそのままにして、スクロールバーを一番上に持っていく。
(3)フォーカスを別のウィンドウに移動
(4)フォーカスをRichTextBoxのフォームに戻す
すると、カーソル位置がRichTextBoxの枠内の一番上にくるように再描画が行われてしまう。
結果、RichTextBox内の文字が消えたように見えるが、スクロールバーをクリックすると正常表示に戻る。
----
以上です。 >>455
ペーストしたテキストの末尾の行が最上位に来てしまうってこと?
再現できまへんわ。 >>455
100%再現するプロジェクトをアップロードしてくれれば親切な誰かが調査してくれるかもよ ありがとうです。
余計なものを削ぎ落したプロジェクトに、
再現の様子を収めた動画を同封してアップしました。
https://media-uploader.work/?mode=detail&id=7574&original=1
どなたか気が向いたら見てみて下さい。
なお、環境依存の可能性もあるかと思って手持ちのPCで実行してみたら
win8.1とwin10 は再現し、win server2012 は非再現でした。
動画を見て頂けるとわかると思いますが、フォーカスが当たった瞬間に余計なイベントが発生している感じにみえます。 >>459
俺は見る気はサラサラないが、>>460の言う通りエラーが出る
media-uploader.work へのアクセスが拒否されましたこのページを表示する権限がありません。
HTTP ERROR 403 こちらではどうでしょうか
https://media-uploader.work/?mode=detail&id=7574&original=1&key=d19f328b-ab29-4095-84be-2a9edfc7af4c >>463
ああ、今度こそ見える
おかしな挙動
他の人頼む 再現しないっす。
win10 pro + vs2019 Linqで.max()とかしたときに、その要素が配列の何番目かも取れますか?
やっぱら普通にloop回して値なめてインデックスも保存するしかないかな? そうだね
var index = list.Select((x, i) => new { x, i }).Aggregate((a, b) => a.x > b.x ? a : b).i; 即レスあざっす。
コードはシンプルですが、やっぱりループは2周回しちゃいますよね?
aggregateは使いなれてないので勉強してみます。 上のコードは二周してないよ
Aggregateがループ一周するとき、Selectでインデックス付きの値に変換してるだけ
自分でIEnumeratorを実装してWriteLineなりステップ実行なりで確かめてみるといい ありがとうございます。
aggregateのたびにselectが一個ずつ呼ばれてその都度newってことですね。 >463
Win10 Pro 20H2 VS2019 16.9.2 再現した >>472
再現しましたか・・・
ググってるとScrollToCaret()あたりのバグらしき情報も拾えますが、
解決策は分からんですね・・・気持ち悪い。 前に似たような問題踏んだんだけど、当時どうやったかな……
ちょっとソースコード消したっぽくて見当たらない int[] hoge ={1,5,8,3,6,1,2,5,4,1,1,4,8,1};
みたいな配列がある時に一番出現回数が多い要素を取る方法ある?
この例だと1が5個あるから1みたいな。
1の出現回数、2の出現回数、3の…って数えた結果を入れた配列作って、またその配列を頭からなめるしかないかな?
普通に↑書くとなんだかんだで10行に全然収まらず汚くなっちゃいます。 hoge
.GroupBy(x => x)
.Select(x => new { Value = x.Key, Count = x.Count() })
.OrderByDescending(x => x.Count)
.FirstOrDefault()
.Value
とかかな、動かして確認してないけど 普通にforeachでやれば?
なんだかんだしても10行もかからない >>477
それでも正しい答えを返すけど、グループ化後、カウントするのに1巡し、ソートして (最大カウントを取得して) いるから、ソート結果を他の用途で使う必要がないならムダがある。
1巡で最大カウントを探すならこう。
hoge
.GroupBy( x => x )
.Aggregate(new { Value = (int?)null, Count = 0 },
(total, next) => next.Count() switch {
var count when count > total.Count => new { Value = (int?)next.Key, Count = count },
_ => total,
})
.Value;
switch 式を使っているのは next.Count() を変数 count で受けるため。 同着1位が複数ある場合に備えて少し拡張。結果は int ではなく IEnumerable<int> で返るようになります。
hoge
.GroupBy( x => x )
.Aggregate(new { Value = Enumerable.Empty<int>(), Count = 0 },
(total, next) => next.Count() switch {
var count when count > total.Count => new { Value = Enumerable.Repeat(next.Key, 1), Count = count },
var count when count == total.Count => new { Value = total.Value.Concat(new [] { next.Key }), Count = count },
_ => total,
})
.Value; 回答色々ありがとうございます。
LINQ慣れてないので、これから481さんのを、確認したいと思います。
動作確認用にまずはシンプルにこんな感じに書いてみました。
loopで適当に
for( int i=0;i<hoge.length;++i){
hogeIndex[hoge[i]]+=1;}
で集計と最大値みて
Array.IndexOf(higeIndex,max) using MoreLinq;
int[] hoge ={1,5,8,3,6,1,2,5,4,1,1,4,8,1};
hoge.CountBy(x=>x).ForEach(x=>Console.WriteLine(x));
[1, 5]
[5, 2]
[8, 2]
[3, 1]
[6, 1]
[2, 1]
[4, 2] morelinq初めて知りました。
他にもimportedLinqとかみんな今のLINQに物足りなさ感じで色々作ってんですね。多言語にあるものは純正LINQにもガンガン取り込んで欲しい。 あの目的で481みたいなソース書くやつがいたらわしだったらチームから外すな。
万事あんなソースで埋め尽くされてたら、
超簡易で済むソースがわけわからんもんになるわ。 >>485
チームから外された人はどうなってしまうのですか? >>485
まあわかる。というか、そういう批判が来ることを承知で書いた。
LINQ は map, filter に強いが reduce に弱い。reduce する場面では無理に LINQ にこだわらずイテレーション回した方がよい。
なんで LINQ で書いてみたかっていうと、そうは言っても手続を混ぜずに関数型で書きたいって場面もあるから、思考パズルとして。
どうせ、この課題は学校の宿題とかだろうし。さすがにチーム開発の場面で濫用はしない。
プログラムはリソース制御とデータ変換に分かれるが、データ変換を純粋に連ねていく場面では LINQ から外れたくないってこともある。
そういう場合は 481 のようなのをメソッド定義し、中身は隠蔽してモジュール化しておいて、宣言的に LINQ メソッドを連ねていく。
LINQ to Object なら手続が混じっても問題ないから LINQ にこだわりすぎるのはよくないけれども、一方で LINQ to Entities にする場合は完全に関数型で書かざるを得ない。だから、LINQ to Entities の使い手なら、いかに関数型に閉じて記述するか、っていう思考訓練はしておく必要がある。(481 の例は Aggregate 使っているから LINQ to Entities にならないし、現状の LINQ to Entities には限界があるけど。) LINQ乱用せずに書いたらどうなるかなと思っていろいろ考えてみたけど
思ったより綺麗に書けんね。
結局>>483が使えるならこれが一番簡潔でいいな
っていうかヒストグラム求めるって標準のライブラリにありそうでなかったんだね。 >>488
どうか責任を以ってあなた様がお召し上がりください >>490
リンクを一切使わなくても別にって感じだけどな
var dic = new Dictionary<int, int>();
foreach(var h in hoge){
if(!dic.ContainsKey(h)) dic.Add(h, 0);
dic[h]++;
}
int maxCount;
List<int> maxKeys;
foreach(var pair int dic){
if(maxCount == pair.Value) maxKeys.Add(pair.Key);
else if(maxCount < pair.Value){
maxCount = pair.Value;
maxKeys = new List<int>(){ pair.Key };
}
} >>492
個人の感想です、だけどあんまり綺麗じゃないよねそれ。
重要なのは何を使うか使わないかじゃなくて
読みやすいかじゃないかな。
LIN}Qを乱用云々と書いたのはそれは一般に読みづらいから
自分ならこの辺で手を打つかな。知らんけど
効率無視ならUniquelizeなんてメソッドはいらない
int[] hoge = { 1, 5, 8, 3, 6, 1, 2, 5, 4, 1, 1, 4, 8, 1 };
var uhoge = Uniquelize(hoge);
var histogram = uhoge.Zip(uhoge.Select(x => hoge.Count(y => x == y)), (x, y) => new { Item = x, Count = y });
var max = histogram.Aggregate((candidate, next) => next.Count > candidate.Count ? next : candidate);
....
static IEnumerable<T> Uniquelize<T>(IEnumerable<T> source) where T:IEquatable<T>
{
var list = new List<T>();
foreach (var item in source)
if (!list.Contains(item)) list.Add(item);
return list;
} >>493
uniquelizeの方が、hashsetを作るより速いのかな? int[] hoge = { 1, 5, 8, 3, 6, 1, 2, 5, 4, 1, 1, 4, 8, 1 };
var fuga = hoge.ToLookup(i => i).Select(g => new { g.Key, Count = g.Count() }); >>493
uhoge.Select(x => hoge.Count(y => x == y))
↑O(n^2)なのでデータ量が増えると桁違いに遅くなるよ >>496
そうだけど、どんな数え方しても必然的にそうならない?
任意の要素xの個数をO(1)でカウントできると思えないんだけど違うんか? >>497
O(n)でカウントできるよ
>>492のDictionaryに変換してるところとか見れば分かると思う >>498
いやいやいやw
それも普通にnの2乗のオーダーでしょ
ContainsKeyのコストはO(1)じゃなくO(n)なんだから .NETの辞書はHashテーブルだからほとんど定数時間でアクセスできるよ >>500
あーそうかw
定数時間は言い過ぎだろうけどO(n)じゃないのは確かだね
俺がアホだった うんだからほとんど定数時間ね
intのHash計算とバケツへのランダムアクセスは定数時間
運が悪いと短いシーケンシャルアクセスが入るかもしれないが確率的には気にしなくていい >>494
あれはforeachの中でContainsしてるから良くないね
HashSetで十分だと思うよ Enumerable.Distinctでいいよね?
Dictinctの中身はこれ↓
Set<TSource> set = new Set<TSource>(comparer);
foreach (TSource element in source) {
if (set.Add(element)) yield return element;
} 元がhashsetでいいかって内容だったからね
hashsetは型で重複がないことがわかりuhoge変数の仕様とも合致しているからより適切だと思うけど、別に気にする程じゃない LINQ盛り上がってるので、この流れで。
複数の配列の積集合求めたいときおすすめありますか?
intersectを順番にやってく? 特にパフォーマンスが必要ないなら手軽に順次Enumerable.Intersect
多少パフォーマンスを求めたいならHashSet化して順次HashSet.IntersectWith
複数のコレクションの積集合を取る操作を頻繁に行うならそういうメソッドを作っておくが吉 件数のバラツキが大きいなら一番少ないのをHashSetして少ない順にIntersectWithしていくと多少高速
Enumerable.Intersectは引数で渡されるほうがSetに変換されるのでHashSetとは逆 windiws form applicationでreflectionを使って名前でForm1 class内で定義されたメソッドを呼びたいときはどうしたらいいですか?
var mtd = this.GetType().GetMethod(名前);
だと拾えませんでした。 thisって何よ
適切なBindingFlags指定すればいいんじゃね NonPublicとかInstanceとか 実現させたいことと、やろうとしていることとがマッチしていない予感 数年ぶりにForm使う事になりました。
Controlを座標決め打ちで配置する事になんとなく違和感感じるんですが、
Dock・Padding・Marginでレイアウトしていくのは避けるべきでしょうか?
例えば、1つのフォームを左右2つに分ける場合は、Dock.FillのPanelとDock.RigthのPanelを置いて、
それぞれのPanel内に配置するコントロールも、Dock・Margin・Paddingでレイアウトしたいです。 当たり前だけど座標決め打ち配置なんて滅多に行わないのが普通
そういう場合はTableLayoutPanelを利用するのが一般的じゃないかな
RowとColumn指定で表みたいに配置できるタイプのコンテナ
つまりその場合はColumnCountを2にして左側に置きたいものをColumn=0、右に置きたいものをColumn=1とすればいい
Dockとかで左右分けるのも無しではないが、そうするとコントロールの長さによっては被りが発生する >>513
ありがとうございます!
TableLayoutPanelで思い通りに配置出来ました。 うへ、絶対座標使わないんか
そんなことするんだったらWPF使うなあ Formで*LayoutやPaddingでレイアウトしてくの、VisualStudioのデザイナで保存した瞬間に座標決め打ちされるのがね……
個人開発なら問題ないけど個人開発なら素直にWPFなり使えば良いし
複数人での開発だと1人でもデザイナでレイアウトしたい人がいるとその人が保存したら決め打ち座標が設定される 独学で小さな会社の社内用にちまちまやっているのですが
フォームの数やクラスファイルが次第にでかくなり
VisualStudioが重く感じたり、デバック立ち上げるときのもっさり感が気になります
いくらかDLL化するとVisualStudioでデバックするときの処理の軽さや
Setupファイルのビルドの速さなんかに影響したりしますか?
個人レベル(単独で)で開発してる限りでDLLにするメリットってありますか? ソリューションやプロジェクトを分割すればVisualStudio自身の負荷は軽減されるとは思う >>518
ビルドはプロジェクト単位で走るから、早くなると思うよ。
各プロジェクトのソースコードをまとめていじって、まとめてビルドしたら時間は変わらないけど。
※同一ソリューション内にあって、ソリューションごとビルドしても変わらないけど。
dllに分ける必要があるかは個人レベルとか関係ないからやってみたら?
そんで色々考えるのがいいと思うし、楽しいよ。 >>518
そもそもプロジェクトの規模に比例してVSが重くなったりしないと思うよ。
少なくとも「ちまちまやってる」程度なら絶対にありえないと断言できる。
重くなってる理由は他にあるんじゃないのかな
必要性もないのにアセンブリを分ける(dllにする)ことには反対。 皆さんレスありがとうございます
ソリューション内にプロジェクト分けてそれぞれ書き出したDLLをメインのプロジェクトで
読み込ませて使う・・・メインのビルド(動作テストなど)は軽くなるという理解であってますか?
修正があれば、そのプロジェクトだけビルドし直す、
最終的な製品にするインストーラー生成時はかわらないと
>>521
かれこれ2年近く機能拡張続けていて、Form画面だけで300くらいで
それとほぼ同数のサードパーティ製の表形式コントロールやら帳票やらもある感じです
vsフォルダ作り直したり、VisualStudioの軽量化はいろいろ試して
多少は軽くなってますが、ファイル数が多ければビルドに時間がかかるし
InteliSenseやエラーの出力など、プロジェクト内のファイル数が多ければ多いほど
そのための処理が入るのかなと思ったのですが違うんでしょうか
何分素人レベルなので、デバック→エラー→修正→デバック→の繰り返しでなんとかやってるので
ビルドの速さが結構切実だったりします そりゃ必要ないソースもビルドされるから遅くなるわな
まずは処理単位でプロジェクトを分割することオススメするよ こうやって情報を後出しすると話がなかなか進まないのです 普通にソース書いてデバックするだけのプロジェクトなら差分ビルドでそんなに時間がかかるイメージないけどな
別の要因が色々出てきそうだけど、まあ分割して解決したらいいね makefileとかだと依存関係が正しくなくて差分ビルドのつもりでも全ソース
フルビルドになっていたとかあるけど
あと、サードパーティーのコントロールとかって話なので、パッケージが
なんでも無条件にフルビルドするので、自分の修正とは関係ないところで
ガンガンビルドがはしっているとか VisualStudio2019のクエリビルダー使ってFillを生成してるんですが、
クエリビルダーの「クエリの実行」ではパラメータに「%」使って目的のデータを取得出来るのに
生成したFillの「データのプレビュー」でパラメータに「%」使うと何もヒットしないという現象が起きてて途方に暮れてます
ちなみにアンダースコアは任意の1文字で検索してくれるので初心者女子高生の私には
もう原因さっぱり判りませんの(´・ω・`) 自力で簡易なセキュリティソフトを作りたいと思っています。
動きは単純で、登録されていない実行ファイルが勝手に外部に通信しようとしたらブロックするだけのものです。
AVASTがやってる動きです。
何らかのAPIをフックするのだろうという事は想像できますが、取っ掛かりが分かりません。
どのAPIを見れば良いのかご存じの方いらっしゃいますでしょうか? Windowsの話だったらWindows Filtering Platformとか wpf でtabcontroleで複数タブにrediobutton配置支店ですけど
これを全部一つのグループにすることってできないんですかね?
groupname指定しても駄目だったので仕様的に方法なしなんでしょうか……(´・ω・`) GroupNameでは無理
IsCheckedへのバインディングとかでうまいことやって >>535
明らかにC#の範囲外の質問でOSハックレベルの話だが、例えばWindowsならカーネルドライバを利用した通信フックライブラリはいくつかあったはず
んでTCPやUDPのソースポートから発信元プロセスは特定できるからそれくらいならすぐ作れるだろうけど
想像以上に多くのシステムプロセスが通信してるから登録するのめんどそうだけどな >>539
バインディングなんてわかるわけ無いだろ!(`;ω;´)
もう仕方ないからボタンと背景色でタブっぽい見た目作ってラジオボタンをVisibleったりhiddenったりしてそれっぽいの作った…… functorに関する質問です
C++で次のように書いとけば
template<typename Functor>
double Example( Functor func,・・・){
呼出し時に、引数funcに関数へのポインタでも、ラムダ式でも、関数名でも記述できますが、
C#で同じように、引数に、デリゲートでもラムダ式でも関数名でも記述可能にするにはどーすればいいのでしょうか? > 引数に、デリゲートでもラムダ式でも関数名でも記述可能にするには
デリゲート型を指定すればいい
double Example<T>(Func<T, double> func, T obj) { ... }
double ToDouble(Hoge hoge) { return hoge.Value; }
this.Example(obj => obj.Value, hoge);
this.Example(ToDouble, hoge);
this.Example(new Func<Hoge, double>(ToDouble), hoge);
ただしシグネチャが同じでもデリゲート型が違うと無理なのでラムダ式なりとおす必要がある
delegate TRet Converter<TArg, TRet>(TArg arg);
var conv = new Converter<Hoge, double>(obj => obj.Value);
this.Example(conv, hoge); // エラー
this.Example(obj => conv(obj), hoge); // OK System.Collections.Generic.List<System.String> hips =
new System.Collections.Generic.List<System.String>(0);
hips.Add(@"尻");
hips.Add(@"ケツ");
hips.Add(@"Buttocks");
hips.Add(@"んまら");
hips.Add(@"臀");
hips.Add(@"ω");
hips.Add(@"Hip");
foreach (System.String hip in hips) {
System.Console.WriteLine(hip);
} 俺のツレの先輩がc#プログラマに酷い目に遭わされたことがある
c#プログラマから金借りて返さんかったら、拉致られて拷問うけた
指の爪全部ペンチで剥がされてその後ペンチで指先を挟んで潰されたらしい
4本目くらいで痛みに耐え切れなくて舌噛み切って死のうとしたけど死ねなかったって
命までは取られなかったけど指先全部駄目になって切断したみたい メモリ不足での相談です
小さいjpg画像ファイル(1ファイル50KB程度)を10,000ファイル程度
サードパーティ製のGridViewに投げ込んで表示させようとしてます
その前にList<Image>に下のような感じでStreamで投げ込んでいくのですが
var fs = System.IO.File.OpenRead(@filepath);
ListData = new Bitmap(Image.FromStream(fs, false, false));
fs.Dispose();
4000ファイルあたりでメモリ不足に陥ります
VSの診断ツールで見ていると、読み出しはじめて4GBで止まります
メモリが4Gでアウトになっているのは理解できるのですが
ローカル上のファイルの総データ量は800MB程度で、実際に読み込みがとまるあたりでは
せいぜい200MB程度読み込んだ程度と思います
2000ファイル程度にグループごとに都度分けて読み込ますしかないかなと思っていますが
確認すべき点(余計に容量食っている要因)やなにか他に方法があったらご教授ください >>548
JpegをBitmapに展開してるのだから容量が増えるのは当然では >>549
レスありがとうございます
同サイズ程度のbmpファイルもあるのでそっちでやってみましたが
4000ファイルが6000ファイルくらいに限界数が若干のびだだけでした 32bit優先が付いてるとか?
ただどっちみちアプリ全体どころか、1つのリストで4Gもメモリに保持とかは筋がめっちゃ悪いぞ。
4000ものフル画像が同時に必要とかあり得ないし。
表示上必要ならメモリ上にもつならすごく小さなサムネイルをダイナミックに並列処理で作りながら持つとか。
今表示に必要なものだけ、ダイナミックにメモリで並列処理でサムネ作るとかでしょ。 今時VirtualMode的なものが無いグリッドコントロールなんてあるのか? >>552
やっぱり、そうですよね
実際には10000ファイル越える予定だったのでなおさらですよね
スクロール時のスピード感は多少落ちますが
素直にグリッドコントロールが描画する際に都度読み込むようにすることにします >>554
良い悪いは置いておいて、とりあえずファイル郡をまとめて読み込んでおくのが
目的で、Bitmapで変換するとメモリを消費してしまうのならば、ファイルの内容を
Streamの配列に読み込んでおいて、表示するときにBitmapで変換するとか
そして表示するだけならばBitmap使わなくてもImageでStreamから読んで
DrawImageでよいんじゃないかなとか 要するにサムネ表示したいんだろ
SSDなら1万ファイルの読み込みにもそんな時間掛からんし
ファイルをインデクス化して画面に出る部分だけ都度読み込んで描画すればいい
グリッドビューなんて必要かね 仮想化すればいいだけの話じゃん
何兆個のファイルがあろうとどうせ表示される項目は多くても数十なんだからスクロール位置などから表示すべきファイルだけサムネ表示すればいい 日本語の変数名使えるのに記号の変数名はダメなのかよ
競馬関係のアプリ開発受注したから予想記号の変数名として分かりやすく記号使いたいのに enumの値とかならまあわからなくもないかな
enum 予想記号 {◎, ○, ▲, △, ☆, ☓};
var 予想 = ◎;
https://umasiru.com/wp-content/uploads/2019/03/IMG_4633-2.jpg フォームを開いてその画面での処理中に
Form fs = new FormA;
try{
fs.ShowDialog(); ←ここ
}
catch{}
ここのところでハンドルされてないエラーがでて止まります
FormAでの例外処理などには一切ひっかからず
この場合解決の道筋はどこからでしょうか
ちなみにFormAではwebview2でオフィス365のウェブ版エクセルの新規作成を開こうとするとエラーになります
ワードではでないのですが
ここででるエラーは、System.Runtime.interior services.COMEException
0x8007139Fです >>564
まず意味が分からんけどFormなの?Dialogなの? >>566
すみません、書き間違いです
Form fs = new FormA();
>>565
ググったのですが、webview2がnullなってるのだろうと考えられるくらいで、同じケースはなかったです
そもそもなんでワードは開くのにエクセルはwebview2がnullになってしまうのかわからず、どこの時点でそうなるのか調べたいのですが、FormA側ではcatchできず、上の位置で停止するんですよね それ以前の根本的な問題があるのだろう
君には無理とは言わないがしばらく距離を置こう 変な所でフォーム表示しようとしてんじゃね
そのコードだけじゃなくてメソッドごと見せてみ >>569
FormAにはwebview2を配置していて、ブラウジングさせています
通常のサイト閲覧は何も問題ないのですが、ブラウザ上でエクセルが開けるoffice365を使用中、新規作成で開くときだけ呼び出し元のフォーム(上でこことしたところ)で停止します
既存のエクセルファイルなんかはFormA上のwebview2できちんと開けているのですが
なので、自分で書いた特定のメソッド中のエラーではなく、ページ遷移中に停止し、呼び出し元のShowdialogのところに戻ってハンドルエラーになってしまいます 再現する最小コードを作る
それでも不明ならその最小コードを公開して質問 ゲイツが収入マイナス7兆円ぐらいで苦しんでる。
c# プログラマから金を集めて、ゲイツに寄付するべきだと思う。
損失の一部 5兆円ほどc#プログラマから強制的に集めたい。国内に5万人ぐらいc#プログラマはいるから、1人1億ぐらい払えばいい。
土地とか家を売ればこんぐらい払えると思う。
払えないひとは肝臓とか売ればいい。 >>572
では早速言い出しっぺのあなた様から肝臓を差し出して下さい DBから取得した重複なしの文字列List (要素数約4000) をComboBoxのDataSourceにセットする処理が、
約900ms〜1100msかかり、その間Formが固まるのですが、どうすれば固まるのを回避できるでしょうか。
A5M2でSELECTクエリの所要時間を見ると、だいたい700ms〜900ms台で、ここは改善のしようがなさそうです。 ComboBoxで4000の中から選ぶのは大変そうだな
DataSourceに設定する前後にComboBox::BeginUpdate/EndUpdateを呼べば多少は改善すると思う
それ以上はComboBoxじゃ無理じゃないかな 仮想モードもないし >>578
DBから取得する部分を別スレッドで動作するasyncメソッドにするです
UIの更新は別スレッドなのでInvokeで awaitしとけばUIスレッドに戻ってくるからInvoke要らんだろ みなさんありがとうございます。
BeginUpdateとEndUpdateで20〜40msほど早くなりました。
現状、DBからの取得部分は別スレッドにしています。
ただし、フォーム表示時に、
@ComboBox の DataSource に List をセット。
A別の個所で設定した値で、ComboBox.SelectedItemを決定。
BComboBox.SelectedItem に応じて、それに対応するデータを DataGridView に表示。
という処理をしているので、結局ComboBoxへのDataSourceセット待ちになります。
むしろUIと同じスレッドでデータ取得すればスレッド切り替え処理がなくなって微妙に高速化出来るんじゃ?と思ってます。 データ取得をUIスレッドで行ってみましたが、別スレッドでしたケースと比較して、実行するたびに優劣変わる程度でした。
これ以上の改善は無理そうなのでいったん諦めます。 Formが固まるのを回避したいってのは高速化したいということだったのか・・・
ま、がんばって >>578
転送時に圧縮かけたら高速化するんじゃね
構成わからんからあてずっぽうでいうけど
DBサーバと近いWEB鯖のPHPでデータ一覧取得してJSONとかで転送(要するにPHPでAPI作成)
サーバの設定等でHTTP圧縮をON
圧縮かかってるから転送そのものが高速化される
どうやって圧縮かけるかは他にも色々やり方あるだろうけどね
LAN内に全てそろってる(例えば同一PC内)としてもかなり速くなるはずだよ
クエリで700msってのが気になるけど時間かかりすぎじゃないかな
Explainみた?
プロファイラはどう?昔はEQATEC Profiler使ってたけど今は何がいいんだろうね
どこにどれぐらいの時間がかかってるかわからないと理論値と比較できない
初見の感想は4000件程度で700msもかかってるのが気になる
応答だけ?それとも結果の羅列まで込みの時間かな
クラサバでそんなにかかる処理ってあまりないと思う そもそも一瞬で取得すれば固まらないからね
あとはUIに先回りして裏で取得するとか、DB側でキャッシュするとか、小出しにしていくとか・・・
まぁ、一番簡単なのは画面にプログレスバー出してめっちゃ高速に処理してる風を装う事とかだけど
ただ、何も知らずに直観でいうと100msは切るはず 実処理時間と言うより、
取得中に割り込み入れないと固まったように見えるってだけの話では 時間が掛かっているのはデータ取得の部分じゃなくて
取得したデータをコンボボックスに渡す処理(>>584の@)だから
>>579が全てだな たぶん「犯人」はComboBoxだろうが一応問題の切り分けが必要だと思って
public Form1()
{
InitializeComponent();
var asm = Assembly.GetAssembly(typeof(Form));
var bl = new BindingList<Type>();
foreach (var item in asm.GetTypes()) bl.Add(item);
var sw = Stopwatch.StartNew();
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = bl;
Console.WriteLine($"Time = {sw.ElapsedMilliseconds} ms, Number of Items = {bl.Count}");
}
こんなコードを書いてみた。10年前のポンコツPCで実行してるが約2400個のアイテムをぶち込むのに
デバッグモードでも10ms程度の時間しか掛からない。
つまり「犯人」はComboBoxじゃないんじゃないの?知らんけど。 >>591
フォームのコンストラクタで測ってるけど、フォームがロードされた後で測るとかなり変わるよ
うちの環境ではデバッグビルドで、コンストラクタ:3msec、Loadイベント時:226msec DB の実行計画を見れば?
インデックスを使わずに、全件探索でもしてるのでは?
2分探索なら、2 ^ 10 = 1,024
2 ^ 12 = 4,096
つまり、12回探索するだけ
ミックの本でも読んだ方がよい インデックス張ったら挿入や更新の度に毎回ソートしてるとでも思ってるんだろ 約900ms〜1100msの処理のうち
クエリが700ms〜900ms台で、改善のしようがないっていってるんだから
それがホントなら速度的なものはどうしようもないと思うんだが
画面が固まる対策ならクエリを非同期に(正確にはUIスレッド以外で、か)しろで終わりだろ ルビおじに絡むおじさんはルビおじよりさらに無能だからな >>600
それWPF
>>578はWinFormsみたいだけど WinFormsのComboBoxに仮想モード追加する例ってありそうで無いな じゃ俺がWinFormsのComboBoxを仮想化する知恵を貸そうか? みなさん本当にありがとうございます。
原因は、約4000の要素をDBから取り出す所要時間でした。
約60万レコード内の、文字列カラムのデータを、重複しないように、GROUP BYする処理が時間食ってました。
なので、該当の文字列カラムだけを重複なしで格納するキー一覧テーブルを作り、
データINSERT時に、キー一覧テーブルの既存レコードと一致しない文字列だけをキー一覧テーブルに追加するトリガー処理を作りました。
そして、ComboBox の DataSourceにはそのキー管理テーブルのデータをセットするようにして、表示所要時間を5〜6割短縮出来ました。 高々60万レコードの group by に700msって遅くね?
DBMS 何使ってるのかわからんけどインデックス張るだけで良いような気もするが… GROUP BY自体が遅いもんよ
SQLが悪いとインデックス使っても無視されてFULL検索になってしまう それより結局ComboBoxは何の関係もなかったってことだよね?
つまりボトルネックがどこにあるのか計測して確認もせず思い込みで
ComboBoxが悪いとミスリードな質問をした。
ここは反省して欲しい。 最初の質問で問題の処理に約900ms〜1100msかかっていてそのうちクエリの所要時間が700ms〜900ms台と書いていて、その上でクエリ以外の部分(約200ms)を改善したいという話だったから測ってないわけではないかと
クエリ部分は改善不可能と思い込んでたのはあるが >>611は毎度お馴染みで皆さんご存知の、
ComboBoxに責のあるマイクロソフトの犬 最初に戻ると結局画面は固まってなかったってことなんだろうな
これが一番のミスリード FormのLoadで何も表示されないまま1秒以上かかるとかなり固まった感は強い
だからスプラッシュやプログレスバーというのは非常に大事
これがあるだけでクレーム率はかなり下がる
速度最適化というのは実際のレスポンスやスループットだけではなくて
体感速度も最適化するべきなんだ いや、クエリの間は固まってたんじゃね
そういう意味ではコンボボックスは無関係だな 別スレッドでの取得結果を待たずにコンボボックスが表示できるとは知らんかった >>621
それが期待する動作だったとは読み取れなかったわ… なるほど
同期で待つのと非同期で待つ違いがわかってなかったのか >>613
なるほどね。読み返してみると確かにそういう風に読めないこともない。
でもその解釈だと辻褄が合わないように聞える部分もいろいろあるね。
まあ揚げ足取りは本意じゃないのでこれで >>610
group by の動作原理考えればそうでしょう
ソートと集計の複合技でっせ
EFを初心者に進めたくないのがその辺りかな
実行計画取れやと言いたくなって来る >>622
期待する動作は
> その間Formが固まるのですが、どうすれば固まるのを回避できるでしょうか。
だよ? その間ってのがどこからどこまでか
固まるとはどういうことか
が、普通に考えるのとずれてるんだがな 今回みたいなケースは再現しようがないから想像するしかないんだよな
齟齬が出るのはしょうがない メインウィンドウが開かれるのに時間がかかる場合って自動的にマウスカーソルに砂時計付くよね
これってWindows 10だけの機能なのかな?
スプラッシュはそういうことに気付かない人にはわかりやすいからいいと思うけど C#について詳しくなりたい。
.net独学だからテクニックが全く身についてこない。
働きながら学べる人たちが羨ましい。 >>632
Effective C#とMore Effective C#買って読めば >>632
オープンソースのソフトウェアをただそのまま使うのではなく
自分で使いやすいよう改造して使ってみたらどうかな ひとが使いためのライブラリ作らない限りテクニックなんかロクに身に付かんでしょ。
テクニックが要らないように作られれてるのが人気があるライブラリなんだから。 async・awaitを使った非同期処理の並列処理数をSemaphoreSlim使って制御しています。
https://qiita.com/tadokoro/items/28b3623a5ec58517d431
を見ると、SemaphoreSlimのパフォーマンスはそこまで良くないらしいんですが、async・awaitを使いつつパフォーマンスを上げる方法はないでしょうか?
並列処理数の上限は4が理想です。※多ければ多いほどいいのはいいです。
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,4)
await semaphoreSlim.WaitAsync();
try {
await 自分の非同期メソッド
}
finally {
semaphoreSlim.Release();
} 必要な場所にだけlockを掛ける
lock不要なロジックにする >>637
await,asyncはlock使えないから基本>>638の通り排他不要にするか、そのコードで頑張るしかないんじゃね >>637
そのベンチマークは同期のオーバーヘッドを気にするくらい
ゴリゴリ共有リソースにアクセスする場合のための比較だから
4並列でawaitするような処理をする場合とは全然違うものじゃない? async,awaitってlock使えないのか。。 >>638-640
ありがとうございます。
必要な場所にだけ lock 使うようにします。
lock 不要に出来るかも検討してみます。 これだけだとロックのパフォーマンス差なのかawaitのオーバーヘッドなのか分からん気がする #region を使うのは駄目ですか?
開くの面倒だ!ってセンパイに怒られました・・・ コーディング規約に従え
個人的には使わないし他人が使ってても気にしない
メソッド1個ずつにregionあったらちょっとうざいけど、ショートカット一発で全部開けるしどうでもいいかな >>646の言う通り
うちには規約にregionについての記載があるのでその通りにしなかったらレビューの指導対象
こんなことをここに書き込むと言うことは
>>644は規約を読んでないか規約そのものがないかのどちらかだと思うけど regionは規約がないなら使わないのが無難
特に〜のプロパティ、〜のメソッドみたいな囲いかたは最悪で、今後regionを意識してメンテしなきゃいけないのが面倒
折りたたまないと把握出来ないほどぐちゃぐちゃになってますって言ってるようなものだしね #region (規約)
把握できないほどグチャグチャになるくらいなら囲んだ方がマシ
#endregion 画面のクラスとかだとregion的な機能つかいたくなることはあると思うけどなあ。
画面って結局、人間にとって都合のいいように複数のデータを出すものなので、そのデータ毎にregion作ったりするのは変じゃないと思うけど。 Formに依存するコードを、 Form外の別クラスに書いたりしたくないじゃん。 コメントを書かない論者と同じ臭いがする
誰が読んでも自然言語と同じレベルで即座に理解可能かつ
解釈の余地の入らない完璧なコードを書けていて
しかもチームの全員がそのレベルに達しているという
地球上に存在しないチームで働いているかのような思い込みをしている 自分しか読まない使い捨てのテストコードならコメントも書かないし、ましてや#regionなんて使わない #regionはあまり使わないが
IDisposableパターンの実装とか定型文的なのはでregionで畳んでおくな 俺もそんな感じだな
インターフェースを継承するクラスは定形文が多くなるから囲んで畳んじゃう IDisposeパターンなどはpartialでクラスごと隔離するのがお薦め partialはお勧めかなぁ?
一見、Disposeが必要なメンバーを持っているのにIDisposableパターンを実装し忘れたクラスに見えてしまいそう。 自動生成してくれるならpartialでもいいけど自分で書くなら俺はやはりひとつのクラスにするな VSでクラスから別に定義されたpartialクラスに飛ぶ方法がよく分からないので、partialは使わない。 まあクラスに飛ぶとか言ってる時点で使わない方が無難だろうね… F12とかCtrl+F12とかできなかったっけ
知らんけど >>661
言い方が雑なだけでおかしなこと言ってるようには見えないけどなあ partial は元々自動生成コード用の機能であってクラスを分割する機能ではない
明らかインターフェイスの実装を#region化する方が可読性が高い >>663
相手を否定せずにはいられない可哀想な人達が一定数いるから、そっとしておいてやりなよ。 partialでクラスを分割してもファイルは1つのままでも問題ない
目障りなコードを#regionより明確に隔離できるから良いんだけどね
まあ1クラス1ファイルの規約が有るなら無理だけど partial→見るな触るな
region→見てもいい触ってもいい
という使い分けになりそう そんな教条主義的に考えなくてもいいでしょw
トポロジー的(?)には部分クラスは本の1巻2巻、
#regionディレクティブは章に近い感じがするので必然的に部分クラスの方が
出番は少なくはなるわね。
何のために使うべきか、何のために存在するかってそれじゃ哲学だw
エンジニアリングの発想は「何に使えるか」でしょう #region 定数
#endregion
#region 変数
#endregion
#region プロパティ
#endregion
みたいに整理? クラスの一部をT4で生成させたときに手で書いた分とファイル分けてpartialにするのとかやったことはある
regionはIDisposableとかインタフェース実装した時に囲っておくのはよくやるし、
>>669 みたいな使い方するときもある 定数が増えるなら外部ファイル定義にしろ
変数やプロパティが増えるならクラスを分けろ
と思ってるから滅多に無いが、何らかの理由でやむを得ず肥大化した時は>>669のやり方してるな フォルダ整理と似た話だよね
regionってつまるところデスクトップにアイコン敷き詰めてるやつが画面上で1列空けてわかりやすいでしょって言ってる感じ
フォルダ作るなりツールなりで管理した方がと思うけどそれが本人にはわかりやすいんだろうな というよりデスクトップにファイル並べてるのをフォルダに入れて整理するようなイメージ vs2022へ向けてちょっと気合い入れて学習直しすわ 多数のクラスが、イベントを相互に Invoke・Listen するようになってきて、
無駄な Invoke・Listen が多数あるような気がする場合、整理するいい方法を教えて下さい。 >>675
N対N関係を整理したいって聞いたら真っ先に思い浮かべるのはmediator? Utf8Stringって闇に放り去られたの?
C#でHttpClientとか利用してると都度気になっちゃうんだけど そういや8だか9だかで採用って話があったね
10の新機能候補にもないもたいだが… >>675
Microsoft.Toolkit.Mvvm.Messagingでイベントを構築し直したら良いんじゃね?
こいつは .NET Standard 2.0対応だからwinformsでも動くはず とりあえず(ReadOnly)Span<byte>使っとくかと言ってる間に
もうそれでいいかってなってる感がある HttpClient周りじゃReadOnlySpan<byte>すらも利用できないじゃん
URLとかヘッダに直接utf8放り込みたいのにstringしか受け付けてくれないし
その点System.Text.Jsonは直接utf8で行けるからまだマシだけど
それでもせめてC++みたいに「u8"あいうえお"」みたいに簡単にリテラルUtf8書けるようにしてほしいわ
byte[]で良いから C# やってる奴らとかマジで仕事舐めてんだろ
俺なんてくっさいゴミ回収の仕事して、年収たった900万円台やぞ
ゴミの回収は、無かったらお前らだけじゃなく、お前以外の皆全員が困るが、お前らがやってる C# なんて
なくてもお前らやお前の身内以外誰も困らんわボケ
そもそも C# なんてただのお遊びやんけ
頭使ってる? 頭が良い? そんな頭が良いなら、研究者や医者やもっと世の役に立つ仕事に就けよカスが
一部の頭のおかしい意識高い系どもが C# を神格化して
アフターコロナの立派な文化だ! だなんてほざいてるが根本的にやってることは eスポーツと変わらん
そもそも遊びは仕事じゃねーんだわ
ただの遊びでしかないもので客から金を巻き上げて立派な仕事だの崇める
まさに不労所得じゃねーか
そして不労所得者に向けられた言葉
「働かざるもの食うべからず」
これ C# プログラマに対する言葉だよ
お前に俺がやってる仕事やらせてやろうか?
熱い炎天下の中を走りながらくっさい生ゴミの入った袋を何百個とひたすら回収する。パッカー車に手を巻き込まれりゃ腕切断してカタワになるリスクもあるんだぞ?
夏も冬も空調の効いた部屋でキーボード打ってるだけのお前らなら3日も持たねーだろうな
でもな、これが仕事じゃ。仕事舐めんなカス 間抜けな仕様なのは重々承知なんだけど
c#で作ったアプリケーションでアイコンダブルクリックして起動したあとに
もう一回アイコンダブルクリックしたときに
新しいプロセス起動させないで
すでに起動してるプロセスのmainwindow以外の
window起動させることできないですかね? >>689
今俺が作ってるアプリではMutex見て、その上でプロセス間通信してる。
coreだとどうしたもんか、と少し悩んでる。 xamarin.formsでタブAからタブBのテキストボックスの値を参照できないので、どうすればいいですか?
タブA.csから
タブB.txtName
を参照するとエラーが出る。 >>692
どっか別のインスタンスにもっといたら?
入力された時点で親に入れたり。 ArrayPoolの内部がよくわからないんだけど、GCに負担かからないっていうのは逆に言えば内部バッファは常駐されるってこと? audioSource.PlayOneShot(Announcement);
で1分ぐらいの説明音声を流しているのですが、
音声が流れている間、入力を受け付けない良い方法って無いでしょうか? .NET5でないと動かないライブラリがあるので.NET5をインストールしたいのですが、
↓を参考にしてインストールしても対象のフレームワークには今まで使っていた4.7.2のバージョンまでしか表示されません。
どうやったら5が使えるようになるのでしょうか?
教えてください。
.NET5とVisual Studio2019のダウンロード、インストール | イメージングソリューション
https://imagingsolution.net/program/visualstudio2019v167p1/ >>697
.NET Framework と .NET5 は全くの別物だよ。
参照
ttps://docs.microsoft.com/ja-jp/dotnet/core/porting/ >>697
VS Installerで、[変更]→[個別のコンポーネント]で、[.NET5.0ランタイム]にチェック入ってる? >>698
初心者ですいません。
>>699
確認しましたが入ってます。 >>700
もしかして、.NET Framework4.xで作ってある既存のプロジェクトを対象のフレームワークの切り替えだけで.NET5にしようとしてるの?
それは無理だから、>>698が挙げているページにあるように移植作業が必要だよ >>701
そうなんですね、勉強になりました、ありがとうございます。 それほど複雑じゃ無い(いかにも企業ユースなフレームワーク使ってるとかで無い限り)プロジェクトなら.net frameworkのソースそのままで.net5としてコンパイル出来る。
ついでにいうとこういった複雑でないものは、.net frameworkのまま、.net5から参照可能。 一方、net frameworkから.net5を参照するのは無理。
この場合既存部を.net frameworkのままで通したい場合は、
.net5の方は薄くCOMインターフェースでうっスーいラップ挟むのがいいかな。 なんでそうぶち上げては切り捨てるを繰り返すのかねMSは 初心者用書いたのですが返答こなさそうなのでこちらに書きます(マルチすいません)
GoogleChromeにあるイメージファイルをデスクトップにドラッグすると大抵の場合イメージファイルを保存できますが
これをPictureBoxに直接ドラッグしてイメージを表示させたいです
※URLを取得してからのダウンロードだとjavascriptなどで読めないイメージが多いので他の方法を探しています
これはクリップボードを経由してるんでしょうか?もし経由しているとしたらクリップボードのフォーマットは何を使ってるんでしょうか。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.dataformats?view=net-5.0
それ以外ならどういう仕組みなんでしょうか、何か手掛かりになるものがあれば助かります。
もし無理なら特定フォルダ作り定期的に監視して増えたファイルをロードしようと思いますが
できればコントロールにドラッグしたいです、よろしくおねがいします。 https://github.com/davidegironi/advanceddatagridview/releases/tag/1.2.x.3
上記の、AdvancedDataGridViewを使っています。
フィルタリングする為に、
@カラムヘッダークリック
ATreeView表示される選択肢の内、表示しない項目のチェックを外す。
までは動くのですが、選択内容を変更するために、再度カラムヘッダーをクリックすると、Aで非表示化した項目が消えるので、
一度フィルタークリアするしかなくなります。
int型・string型データのカラムだけで発生します。
公式サンプルも同じ状態なのですが、何が原因でしょうか? ref structの強制using欲しいと思うのは俺だけ?
C++みたいな暗黙でデストラクタ呼ばれる方式じゃなくてちゃんとusing書かないとコンパイルエラーになる感じのが欲しい >>712
先に質問してたふらっとの方で既に解決しているがそれじゃダメだ 自分でanalyzer書けば警告でもエラーでもだせるよ
そこまでやってる人がどれほどいるかは知らんが 環境依存だと他人に使わせるのはちょっと身が引けるな
disposable ref structとでも書いたら絶対Dispose実装しないといけないし絶対using宣言しないといけないってなれば多少アンセーフな機能も公開しやすいんだけど需要は無さそうだな 50,000レコード、テキスト換算30MBある(想定最大値)JSONデータを取り回すのに向いている、ローカル用のDBエンジン(SQLiteのような)って何かありますか?
出来れば、Xamarin.Forms(Android)でも動くものを探しているのですが、他の方がどうやっているのか知りたいです >>720
LiteDB。ずっと使ってる。
Linqで引けるから凄く便利。 >>722
LiteDB、良さそうですね。ちょっと試してみます。
>>721
俺の知らない別の使い方とか同じ名前の別のRedisがあるのかと思って1時間ググって見たけど、わからんかった。
Redisで、SQLite的な組み込みの使い方があるの? 比較したいので具体的なところ教えて欲しい…… つか5万レコードで何するかしらんが、そのままJsonで持つとかないわ >>724
あるんだなそれが
GTA5はそうしてたし 5万レコードぐらいの参照系で頻度が高いものだと結構あって、結局メモリにのせたりしないか?
どうせメモリにのせるし、となると、JSONでもなんでもいいし。
LiteDB推したけど、そういう意味ではRedisはそこまで的外れだと俺は思わんかったぞ。 ソースジェネレーターの開発効率悪すぎやろ
マクロと違って受動的な生成できるから便利だけど個人開発程度の規模だと返って遠回りになるな >>732
StringBuilderオーバーライドしたSourceBuilder的なクラスがあればミスも無くなってマシになるんじゃないか
もしくはUtf8JsonWriterと同じ感じでもいいな
自分で作れって話なんだけど、ソースジェネレーターってWinFormsのInitializeComponent筆頭に内部では元々あった訳だしMS社内ではSourceBuilder的なクラスは既にあるはずだから公開されるんじゃないかと期待してる WebView2でどんなページ開いてもスクロールバーが表示されずページの下の方が見ることができない。
htmlやcssでスクロールバーを非表示にしていないから、WebView2の設定を探してみたけど見つからず。
スクロールバーを表示させるにはどうしたらいいですか? WinForm? WPF?
WPFだと親子関係によっては親が子であるWebView2のレイアウト領域無限に取ったりしてるとか
とりあえずWinFormでもWPFでも特にプロパティとかいじらず普通にブラウザとしてのスクロールバーは出る >>739
WinFormです。
普通に出るのですか…何も出ないので残念です。 親コントロールからはみ出してるんかな
WebView2側のDockを有効にしたら? まさに今WebView2を使ってるところだけど普通にスクロール出るね
>>741が正解な気もするけど C#のComInterfaceってちょいちょい頭おかしいな
これとかなんやねん
HRESULT IEnumFORMATETC::Next(ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched);
↓
IEnumFORMATETC.Next(int celt, FORMATETC[] rgelt, int[] pceltFetched);
C#風にラッピングするなら普通はこうやろが
int Next(FORMATETC[] rgelt, ref int pceltFetched); //Span<FORMATETC> rgeltなら尚良し public Foo<T>(byte[] dat) where T : new() { 〜 };
という定義の関数があります。通常は
var IntData = Foo<int>(dat);
とやって、バイト配列からインスタンスを作成するのですが、Tの部分をType型の変数を使ってインスタンスを作成したいのです。
上記の例でいうと
int intValue = 0;
var t = intValue.GetType();
var IntData = Foo<t>(dat); // 型ではなく変数なのでエラーとなる
とやりたいのです。
なにか方法はないでしょうか。 >>749
説明を簡易にするためにintにしましたが、実際はclass/struct定義を指定して、
byte配列との相互変換するための自作ライブラリです。
クラス内クラスといった入れ子状態でも動くようにするために、内部から自分自身を
再帰呼び出しするのに、Type型の変数からジェネリックでの呼び出しが出来るように
したいわけです。 >>748
これならできた
static class Extensions
{
static T Foo<T>(this T x, byte[] dat ) where T:new()
{
return new T();
}
}
型推論はコンパイラの機能。
実行時に決まる型をコンパイラに推論しろってのは無理筋 危険性を理解した上でBinaryFormatter使え案件では >>754
どこから実行時なんて出てきたんだ?
>>750が書いてるdecltype相当の機能が欲しいって話だろ
俺も欲しいわ C#の標準ライブラリにもよくジェネリック版関数とType版関数があるようにそれ真似ればええだけやろ
後からジェネリック版が続々と追加されたことからも分かるようにType版はリフレクションに頼る羽目になるのでパフォーマンスに劣るがな
そういやネットワークメッセージをルーティングするにあたってそのたびにDynamicInvokeしてるバカなコード書いてる奴思い出したな >>756
そっちこそ何を言ってんの。
ジェネリックの型テンプレートはコンパイル時に確定している必要がある。
それをType型の変数tの値(当たり前だが実行時に決まる)からコンパイル時に
推論できるの? >>759
>>748には
> int intValue = 0;
> var t = intValue.GetType();
> var IntData = Foo<t>(dat);
って書いてあるけどやりたいのは
int intValue = 0;
var IntData = Foo<decltype(intValue)>(dat); // もちろんC#にはdecltypeはないからエラーになる
だろ
コンパイル時にintValueの型はわかってるから原理的にはできるはず >>748
普通にもう一段ジェネリック関数でラップしたらいいだけじゃん
static T Foo<T>(T value, byte[] dat) where T : new() => Foo<T>(dat);
int intValue = 0;
var IntData = Foo(intValue, dat); まあそうなんだけど値を使わないのに引数に指定するのもなんか気持ち悪いし
※ 個人の感想です >>762
var t = intValue.GetType();をする方がめちゃくちゃ気持ち悪い
GetType()はオブジェクトヘッダからタイプ情報を抜き出すっていう実行時処理だからそれこそ求めてるものとは全く違うと思うけどな
逆にジェネリックは完全にコンパイル時計算なので>>761とか>>754ならほぼ確実にインライン展開される それに下手したらintに対してGetType()するとmalloc(sizeof(int32_t) + sizeof(void*) * 2);みたいな処理が内部で走って糞効率悪いぞ(Boxing) >>763
> var t = intValue.GetType();をする方がめちゃくちゃ気持ち悪い
まあ気持ち悪さの基準は人によって違うから、お前はそうなんだろうね よしわかった!
リフレクションでジェネリックメソッドを生成しよう! >>755
後出しですみません。
既存の機器と通信するためにByte配列との相互変換なのですが、
BCDとか、エンディアンの指定があるんです。
なので、BinaryFormatter は使えないんです。
>>761
なんとかなるかな?
ちょっと試してみます。
アドバイスありがとう。 >>766
引数指定しなくていいバージョンも754が書いてくれてるだろ
int intValue = 0;
var IntData = intValue.Foo(dat); >>769
申し訳ないけどそれもっと気持ち悪いわw
1週間後にそのコード見て一瞬何してるのか戸惑う自信がある 久しぶりにC#で書いてるんで勘違いしてたら悪いんだけど
var str = "abc";
で、strがstring?になるんだけど前からこうだっけ?
非null型にするには string str って書かないといけないんだっけ? 今でもそうじゃない。
Null許容オプションを変えればそうなるが、デフォルトは無効。 C#8.0以前と昔と同じ動きになるようにしてるからオプションデフォだと?付けてるんだぞたしか >>748
Reflection使えばなんとかなるんじゃね
https://devlights.hatenablog
.com/entry/20081107/p2 unsafeでゴリゴリするのとNETの中間言語(IL)を直書きするのってどっちが速くなるのかな
unsafeでゴリゴリも結局ILに直されるんだよね? そらちゃんと最適化されたものがかけるならILじゃないの?
規模次第だけど大抵はunsafeが早くなると思う ネットワークドライブ上のNASに映像ファイルをコピーする処理をTaskで非同期処理を
おこなっているのですが、たまーにネットワークがきれるのかNASの問題なのか
転送がとまったきりになります
CancelTokenでファイルごとにキャンセルは入れられるよう進捗ウィンドウを作ってるのですが
File.Copyが1つのファイルで走り始めてから止まり、Exceptionも吐かないので
中断処理入れようにもどうにもならず
とりあえずApplication.Exit()でアプリごと落としてお茶を濁しているのですが
なにかうまい方法ありますか? >>777
問題を良く理解してないけど
まあ生ThreadならAbortできるね。
昔はデッドロックするバグがあるネイティブdllの関数呼ぶときにはこれ使ってた。
さすがに今時は別の方法が用意されてるはずだと思うけど HOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMO >>771-773
これすごい機能だな
.NET 6から新規プロジェクト作成するとデフォルトで有効になると書いてある
引き継いだから知らなかった >>780 >>781
レスありがとうございます 返信遅くなりました
参考にいろいろやりましたが結局FTPで切断して中止させる方が簡単で
送信データ量などの進捗が拾えて残り時間の計算も簡単なので
NASとFTPでやりとりすることに落ち着きました MSの.NETチームってアジア人少ないのか?
表に出てくるメンツ見てると黒人とかラテンアメリカンはちょいちょいいるのにアジア人がほぼいないんだが、
アメリカのIT企業って総じて黒人よりアジア人の方が従業員比率高いはずなのにおかしいだろ
ポリコレソードで一刀両断して良いか? ブリザードの闇を知ってからはアメリカのIT業界も色々とやべぇんだなとは思った
ああいう闇があるからこそ日本人からは到底理解できないようなポリコレが流行るのも致し方ないと思えるようになったわ Streamで非同期のreadを行っています。Stream.BeginRead(〜);
このBeginReadをキャンセルするにはどうすれば良いのでしょうか。
通常の読み込みだと、BeginReadで指定したコールバック先でStream.EndRead(〜);を実行するのですが、1バイトも受信していない場合、EndReadを実行すると待ち状態になってしまいます。 StreamをDisposeすればEndReadで例外が出る >>790
BeginRead をキャンセルしたいのは、同じストリームに出力を行いたいためです。
なので、Streamは破棄できません。 >>789
BeginRead 見たら ReadAsync の使用を検討しろって書いてあるからそうしたら? Readがデッドロックするような状態なら常識的にはWriteが成功するとは
考えにくい気がするんだけど違うのかなw デッドロックは言葉の使いどころが違うと思う
ReadAsyncでCancellationToken渡したとしても
CancellationTokenSource.Cancelでキャンセルできるかどうかは具象クラスの実装次第なのに注意
.NET Core系は多分問題ないと思うけど.NET Framework系はあんまりサポートしてない印象 デッドロックがどこで出たかわかりませんが、やりたいのは名前付きパイプでのプロセス間の相互送受信です。 >>789
適当なこと書くけど、コールバック先の中でEndReadするのだと、データの読み取りが
完了しない限り実行されないのでダメなのではないかな?
やるならばBeginReadの返却値であるIAsyncResultの内容を保存しておいて、Read
処理をやめたくなったら、保存しておいたIAsyncResultの値をEndReadに指定して
呼び出すんじゃないのかな? >>794
確かに「自分で自分の処理が完了するのを待つ」
状態に陥ることを指す場合が多いけど、
単純に何かの処理が終わらないことや終わらないことも
デッドロックと言うと思うけどね。
>>795
それならReadをキャンセルする必要なんか最初からないのでは? >>797
デッドロックについて言ってること全部間違ってるように見える >>798-800
いや言うからw
言うまでもないけどdeadlockは座礁のこと。
つまり身動きが取れなくなることなんだよ。
それは自分で自分を待つケースに限らない。 デッドロックとは
対策に徹夜で3日以上かかるバグの事を指す >>801
英語の元の意味と業界用語が違うなんていくらでもあるぞ
NIC の promiscuous (mode) とか調べてみw そもそも名前付きパイプって同一のストリームを読み書き両用でつかえるのか? 組み込みの資格の問題集では、
デッドロックは、資源のたすき掛け
タスクA が、資源X, Y の順にロックして、
タスクB が、資源Y, X の順にロックする
ここで、どのタイミングでデッドロックが起きるか、という問題 最初から説明すると、やりたいのは.NET5のWorkerServiceで作成したWindowsサービスの状態をタスクトレイに表示することです。
Windowsサービスから直接タスクトレイに表示する事が出来ないということで、タスクトレイ表示用のフォームアプリを作成。
両者間でプロセス間通信を行い、フォームアプリからWorkerServiceへの問い合わせという形では問題なく通信できました。
※フォームアプリ:送信専用/WorkerService:受信専用
ただ、WorkerServiceの状態が変わるのは希なことなので、フォームアプリから頻繁に問い合わせるのは無駄が多いので、
フォームアプリからWorkerServiceへの接続以外はWorkerService側からのPush通信を行うように修正しました。
フォームアプリ:受信待機、WorkerService:送信。WorkerService:受信待機、フォームアプリ:送信のテストは正常に終わりました。
送信はいつ発生するかわからないため、双方を受信待機にしたところ、その状態では送信が出来ません。
受信待機状態で無ければ送信出来るのは確認しているので、受信待機を解除出来れば送信出来ると考え、その方法を探している途中です。
>>806
上に書いているとおり、受信待機状態で無ければ送信できます。もちろん、受信待機状態で相手から送信されれば受信できます。
実際にテストし、確認しています。 >>796
コールバック先ではなく、送信用関数の頭でキャンセルするようにしています。
BeginReadの返り値を保存。キャンセルしたい場所でEndReadの引数に渡すようにしているのですが、EndReadを呼び出すとそのままだんまりです。
なので、なにか手順でもあるのかと思い、検索をかけたのですが解決法がわからないため、ここで質問しました。 >Windowsサービスから直接タスクトレイに表示する事が出来ない
サービスの登録で「デスクトップとの対話を許可」してあれば表示出来ますよ? 送信がちゃんと動いてるならそこ変える必要なんてないし
送信と別に受信用の接続つくれば解決するんじゃ >>813
.NET 5 ではサポートされないと、どこかで読んだ覚えが・・・
参考になるWebPage等あれば教えてください。
直接やった方が単純なので・・・ Windows 管理ツール
→ サービス
サービス名で右クリックしてプロパティ → ダイアログ → ログオン
「デスクトップとの対話をサービスに許可」にチェック
HKLM\\SYSTEM\\CurrentControlSet\\Control\\Windows\\NoInteractiveServices
0にする必要があるかも >>816
教えていただきたいのは設定の方法ではなく、.NET 5のServiceWorkerでタスクトレイにアイコンを表示する方法です・・・ さすがにサービス作るのは面倒だから同一プロセス内で試しただけだけど
BeginRead中に普通にWriteできたよ
NamedPipeXxxStreamをnewする時にPipeOptions.Asynchronous指定してる? >>818
していませんでした。
サーバ、クライアント双方にオプションを指定し、Stream.Read中にStream.Writeが可能なことを確認しました。
ありがとうございます。 前提をすっ飛ばすと突拍子もない解決手段を思いつきそれを実現しようとしてしまい四苦八苦する典型例みたいですね レジ袋有料化みたいな話だね
ただ、批判する意図はないけど、位置の概念がないストリームなら普通「全二重」であるはずだ、
ってのはちょっと考えれば気づけたはずじゃなかなとは思う 出来ることを出来ないと思い込んじゃったとこから始まってるんだな。
サービスからのタスクトレイアイコン然り、Streamのリードライトも然り。 >位置の概念がないストリームなら普通「全二重」であるはずだ
お前の勝手な思い込みだとしか思えん >>822
その方法で判断してるなら既にいくつかバグ孕んでそう r/wを排他的にせざるをえない必然性や制約が存在しない限りわざわざ排他的にする合理性はないというだけの話。
馬鹿じゃないの。
というか、例えば2.0までのUSBは物理層が「半二重」だが、上位の層ではそんなことを
意識する必要はないようにしてある。
そんな制約を意識する必要があったらやってられないからだ。
必要もないのにそんな制約を課す馬鹿がどこにいる 双方向に通信できるか、一方向にしか通信できないことと、全二重半二重は別の概念じゃない?
双方向通信になって初めて半二重なのかと考える必要があるし、そもそもIPCをOSのAPIで使ってるときにそんなにシビアに考えることかな?という気がする 双方向のプロセス間通信なら、パイプじゃなくてIPC使ったほうが楽じゃね? >>825
お前の言う「普通」はお前の思い込みだって指摘だが、普通が読めないとかどっから出てくる話だ
そもそも位置の概念と双方向か片方向かは関係ないし
双方向のストリームは全2重であるべきだって意見なら理解しないではないが
お前の希望が普通に実装されてるとは限らんのだよ 白鳥は普通白い、というのは全称命題(黒い白鳥はいない)ではない。
イキり馬鹿って本当に馬鹿で笑えるねw
ファイルのように位置の概念があるストリームでは排他的にr/wされたら困るだろうw
馬鹿じゃなかろうかマジで 最近ヤフコメの規制が話題になってるけど、
webくんだりで他人に居丈高な態度を取る奴の動機の源泉(うだつ上がらない)
なんて見え透いてるよねw
別にうだつ上がらないのは悪くないが(俺もそうだし)
いい歳こいてそういう自分の動機を自覚できないのも、他人から自分がどう見えているかを
意識できないのもかなり痛々しいよねえw >>831
普通のファイルのシークしながらの読み書きなら困る、はわかるんだけど、
それを一般化して、位置の概念のあるストリームで「普通」成り立つべき性質なのかよくわからない。
後学のために、いい例を教えてくれないか? そもそもファイルストリームって(単一ファイルでは)双方向通信に使えるものじゃないから、
全二重という思い込みがよく分からないし
ワッチョイ的にデッドロックの意味勘違いしてた人っぽいし
全般的に用語の使い方がいい加減な人なんだろうなと思った ファイルストリームって、追記モードで複数オープンされたファイル扱えないのか? 双方向のストリームなら、非排他的にアクセスされると困るという意見ならまあ理解はできる
排他的とか、自分以外のアクセスの話で、自分が全2重でアクセスできるかどうかとは無関係だがな >>837
なるほど
全2重/半2重から排他/非排他の話になってるのは
話をずらそうとしてるんじゃなくて自分の中でもちゃんと区別できてないのか >>837
俺が用語を正確に使ってないのでなく君に読解力がないだけじゃないのかな。
俺はファイルストリームは「半二重」だと言ってるんだよ。わざわざ括弧を付けて。
括弧を付けているのは全二重/半二重という用語は普通はストリームを対象にした
用語ではないからだ。 というか、「必要のない制約をわざわざ課す馬鹿っているんですか?」
っていうのが俺の主張の本質なんだけど、その辺も含めて文脈読めないにも程があるね。 ああ、ほんとに双方向か片方向かと全/半2重の区別がついてないのね 全二重と半二重は鉄道で例えれば単線と複線の違いだよ。
RS485通信は半二重通信になるけどな。 >>843
またそれか。
片方向の文脈であれば全二重/半二重の区別は意味を持たない。
区別がついてないのは君じゃないの。マジで大丈夫か だいたい双方向とか片方向とかいう話がどっから出てくるのw
意味がわからないよ
だから、必要もないのにr/wを排他的にする制約を課す馬鹿っているの?って話をしてるんだけど 次の展開予想すると、>>843みたいな人はたぶんそれでも片方向/双方向の違いに固執して
「片方向っていうのは片方だけが能動的にr/wすることをいうんだ」みたいな話になるんだろうねw
だから、だから何だよw
この文脈でそれ重要ですか? ああ、排他的ってのは自分自身からのリードとライトについて言っているのか
つまりお前の中では、全2重=非排他的 半2重=排他的 ってことなのね
で、片方向っていうのは片方だけが能動的にr/wすること だと
まあこれからも独自路線を行ってくれ。できればひっそりと ファイルストリームに半二重ないやろ?
途中で方向変わるのか?
全二重もないし。 誰かこいつらの脳幹をdisconnectしてくれや >>847
既に定義された用語と違う独自用語使うならスレ外でやれ
デッドロックがどういう状態かの理解はできたか? 海外の機関車のハンドルとかについている装置
運転手が突発性の病気で倒れたりして手を離すと緊急停止する >>853
それは Dead man's switch >>852
いい機会だから言っておくか。
それは違う。
言葉というのは置かれた文脈によって意味が変わる、
という中学生でも知っている事実を君が知らないだけじゃないの?
だいたい文脈無視して意味不明な用語法の問題にすり替えて、
それを指摘されてもまだ「おかしいのはお前だ」と言い張る神経が俺には理解できない。 どうでもいいけど技術的なやり取りをするのに言葉の意味を明確に定義せずにするのは困難しか産まないと思うけどな。
独自用語でもちゃんと定義したらよろしい。
定義なしに文脈によって意味が変わるなんて言ってるのは技術者失格。 えっちょっと待って
IT用語としての「デッドロック」なんて基本情報レベルな単語だしこの板に書き込むような人なら常識だと思ってたんだけど
>>801なんかはてっきりギャグとして書いてるか、さもなくば
デッドロックって言葉の意味を知らない人を馬鹿にするためにわざと書いてると思ってたんだが
ひょっとして本当に知らなかったの??
でもって無知を恥じるでもなく「読解力」とか言い出して責任転嫁してるの?
「ボクチャンわるくないもん、読み手が馬鹿なのが悪いんだもん」って言ったところで
馬鹿をさらしてる人が言い出したところで説得力ないと思うよ
そのうえさらに自分の語用・論理展開が支離滅裂なのを棚に上げて「文脈」とか言い出して正当化してもなあ
>それを指摘されてもまだ「おかしいのはお前だ」と言い張る神経が俺には理解できない。
その言葉を反芻すべきなのは>>857だと思うよ 文脈無視して意味不明な用語法ってか
さすが自分の常識は絶対だって自信がある人はちがうな
で、技術論を人格攻撃で逃げようってか
相手してられん お前らそろそろ落ち着きませんか?
c#10の話でもしようぜ(錯乱) 特定の会社なりグループなりの小さなコミュニティ内で本来の定義とは異なる意味で用語が使われることはある
そのコミュニティ内で齟齬なく意思疎通取れてるならまぁ問題ない
ただその輪から出たら本来の意味でのみ使用すべきだし誤解を招きそうなら補足を入れるなりすればいい
定義にシビアなことが求められる技術者がこういう場で文脈によって変わるとか言っちゃうのはどうかと思う
こういう場というのが便所の落書きじゃん、というなら否定はできんがw みんなわかっているくせにいつまでも指摘しないのな。
デッドロックは暗礁でも座礁でもない。壊れた錠前のことだ。
https://www.nhk.or.jp/bunken/summary/kotoba/gimon/170.html
IT 用語では、並列処理時に異なるプロセスが、互いが専有するリソースの解放を求めて睨み合い、うごけなくなってしまうリソース競合のことだ。それ以外の意味はない。
一般用語に行き詰まりという意味があったとして、IT 用語としてリソース競合という意味のズバリの状況定義があるのだから、IT に正しい理解がある人間なら、行き詰まりという一般的な意味でこの語を IT 関連の説明に使うことは絶対に避ける。他人に誤解させるし、伝わらないし、紛らわしいのが目に見えているから。
色々な意味で、非常に恥ずかしい部類の誤用。強弁もたいがいにしておくべき。 >>865
壊れた錠前とかそういう比喩でなく、
膠着状態を指す英単語だよ
a situation in which a disagreement cannot be settled. そもそもdead rockなんて勘違いしてる奴いないじゃん
座礁って言葉使ってる奴はいるけど身動き取れなくなると説明付き
リソース競合ってまた狭い意味だし座礁と同じで狭い意味でデッドロックを使ってる
デッドロック(IT限定)でもプロセス競合のほうがまだまし
しかも競合それ自体には行き詰まりの意味はない
あくまでも競合による行き詰まりがデッドロック 座礁がdead rockからきた勘違い
deadlockは身動き取れなくなるという意味はない
語源はdead+lockだから「壊れた錠前」であってるけど
今はその意味で使われることはない >>870
座礁もdeadlockで間違いないし、rockとの勘違いでもない
ただ英単語としての意味とIT用語としての意味を混同していたことが問題なだけ たんなるウェイトとデッドロックの区別がついてないバカがうだうだ言ってるだけ >>865
壊れた錠前では無いよ。
行き詰まりそのもの。
リソースのlock自体、錠前のことではない。
名詞としてのlockは、カギで開け閉めするものに限られるので、リソースなどを指してない。輪留めとか、にっちもさっちもいかない状態とかそういうのを指す。
動詞としては、固定するだよ。
リソースを取得するのにカギが必要なら錠前だろうけど、カギは要らない。 >>871
Pope Francis urges end to migrant boat deadlock
https://www.bbc.co.uk/news/world-europe-46777844
↑この船は座礁してるのかな? 多義語を知らない>>875
辞書引くだけで良いのに引けないんだね >>876
座礁って書いてある辞書教えて
そしたら納得するよ >>877
納得はいらんけど、deadlockの自動詞、他動詞の意味調べてみ >>878
低頓する、低頓させる、「交渉は賃金問題で行き詰まった」、旺文社シニア英和辞典
行き詰まる、行き詰まらせる、低頓する、低頓させる、研究社リーダーズ英和辞典 さすがに「言葉の意味は文脈に依存する」ってことを知らない人がこれだけ多いと日本の将来心配になるねw
この業界でデッドロックと言えば普通は非同期処理の文脈におけるデッドロックのことを指す、
これは最初から言っているように間違いない。
ただ必ずそうとは限らないと言ってるだけ。
イキってる皆さんがどう思おうが自由だけど、メソッドが制御を返さない状態のことをその原因を問わずに
「デッドロック」と呼ぶ用法は普通に使われてる。 そもそもデッドロックの意味とか、片方向と双方向の違いがどうのとか、そんなのどーでもいいわw
誰がそんな話してるんだよw
俺は時々ニュース系の板とかでネトウヨ馬鹿にして楽しませてもらってるけど、
この追いつめられると別の矮小な問題にすり替えて誤魔化して逃げるやり方って
連中そのものだねw >メソッドが制御を返さない状態のことをその原因を問わずに「デッドロック」と呼ぶ
まあ、たんなるロック待ちをデッドロックというやつはたまにはいるけどな
あきらかに間違ってるわけで、それが普通とかもう話にならん
>追いつめられると別の矮小な問題にすり替えて誤魔化して逃げる
まさに今のお前だな >>878
名詞が動詞化したものだから意味に違いはないよ
自動詞は「デッドロックになる」こと
他動詞は「デッドロックをもたらす」こと
デッドロックとは「相対する2つの勢力が拮抗して事態が進展しない状態」
DBMSのデッドロックも非同期処理のデッドロックも状況が特化してるだけで意味は同じ
座礁は船と岩礁の力が拮抗してるってことなら
その辺に転がってる石ころもdead rockだね >>884
deadlockの言う座礁する、座礁させるは日本語では比喩的な使われ方をする座礁だよ
交渉が座礁するとか交渉が暗礁に乗り上げるって意味での座礁
だから名詞じゃなく自(他)動詞 つまりデッドロックマンは何もかも間違ってると言いたい >>885
「deadlockの言う座礁する、座礁させる」って何? どこから出てきたの?
deadlockの言う?
交渉が座礁するとは日本語では言わない
交渉が暗礁に乗り上げたとしてもそれがデッドロックとは限らない
単なる待ち状態をデットロックと言ってるのと同じレベル >>887
少なくとも英辞郎には暗礁に乗り上げるって意味が載ってる
意味として膠着状態を指す慣用句としての暗礁に乗り上げるが使われてる >そもそもデッドロックの意味とか、片方向と双方向の違いがどうのとか、そんなのどーでもいいわw
>誰がそんな話してるんだよw
>追いつめられると別の矮小な問題にすり替えて誤魔化して逃げるやり方って連中そのものだねw
まさにこれ
話を逸らすついでにスレ流して汚点を忘れさせようとしてるのが観える >>891
東大話法、てのが大昔流行っていましたね ニコニコ弾幕ツールを作りたくてプログラミングとC#を初めて触ったのですが
なにか参考になる動画や書籍資料等ないでしょうか?
簡単なメニュー程度なら作れるようになったんですがどうすれば弾幕打てるツールになるのか全く分かりません。
弾幕ツールソースとかでググってもそれっぽいのが全く出ず…
超初心者スレでも聞いたのですが回答もらえなかったのでこちらで… >>894
ぐぐるんなら、「ニコニコ動画 コメント api」とかじゃね?
ちょっと古いけど
ttps://qiita.com/tor4kichi/items/74939b49954d3e72d789
こんな感じで以前は出来ていたようです
が、今春にコメントサーバーがリニューアルされているようなので、おそらくは上記の記事そのままではなくなっていると思います
https://blog.nicovideo.jp/niconews/141893.html
ブラウザコントロール上でアレコレさせるのとどっちが楽かは知らん
いずれにしても、言語そのものの知識以外の、httpだとかニコニコの仕様そのものだとかの知識の方が必要かと思います 勉強のためにやりたいのなら別だけど・・・・
自分で使いたいとかそういう目的なら、ほとんど完成品みたいなものが既にある
https://www.nuget.org/packages/NicoNico.Net/ >>895-896
回答ありがとうございます
C#の知識だけじゃ実現できないのですね(;´Д`)
C#の他にJavascriptとかCのAPIですか…3,4年はかかりそうですね…
やったことが無駄にならないことが分かったので頑張ります 日にどれくらい時間かけるかにもよるけど早い人なら無学から始めても1ヶ月かからんやろ
すでにほとんど完成品といえるようなパッケージがあるならなれてる人なら1日かからず完成する
始めて開発というものをするにあたって半年以上かかりそうなもんはモチベーション続かんから普通はおすすめできない
もしこのコメントツールで年単位で掛かりそうだと感じたならもっと規模の小さい、長くても1ヶ月くらいで完成させられるかな?って想像できるようなものから始めたほうがいいと思うよ >>894
10/20にニコニコ動画関連総合ツールスレで質問して回答もらえなかった人?
そこまでできるようにはなったんだ
ニコ動の弾幕なのか、ニコ生の弾幕なのかわからないけど
・ネットアクセスのやり方(httpclientかなんか)
・WebSocketの使い方(ニコ生のみ)
・jsonの知識
・非同期の使い方
はわかってないとできないと思う
以下を見て理解できるまでがんばって。以下のニコ生・ニコ動の説明は古くてそのまま使っても動きません。
ブラウザーのディペロッパーツールで解析してね。
ニコ生
https://qiita.com/tor4kichi/items/5c438aa11fea5422103b
https://qiita.com/tor4kichi/items/4df5b11ec564bb8f8d16
ニコ動
https://qiita.com/tor4kichi/items/91550a71119f3878bfba >>897
Web関連は基本人間が理解出来る文字列でやり取りするから比較的難易度低い方
C#で作るならCの知識が必要になる場面なんて全くないはず
Html、Css、JavaScriptの知識はどの言語で開発するにしても多少必要にはなってくるがそんな難しくはない >>897
あなたが作りたいツールを作るにも10年ぐらい前ならもっと簡単な知識でつくれたんだけど、Flashからhtml5になった頃から技術的なレベルが高くなったのも一因
ニコ動、ニコ生にしても以下のステップを1つづつ目標にして。
1.ニコ動かニコ生のURLを入力してそのページの内容を取得して表示なり取得確認する
2.そのページから必要な情報を選択して取得する
3.ニコ生の場合は、その情報からwebsocketに接続して各種情報を取得
4.ニコ動の場合は、その情報からコメント情報を取得する
たぶんこの辺までできれば次どうすればいいかはわかると思うよ 今時はIEコンポーネントブラウザを使わないからだよ
ニコニコの場合は
(1)Javascriptでブラウザの拡張機能を書く
(2)Pythonでダウンローダーや巡回、予約
で大半だよね、C#の出番はあまりないん 各サイトのルールは、robots.txt を見ればよい
そこに、スクレイピングできる間隔などが書いてある SQLのパラメータって使いまわせなかったっけ?
例えば下みたいなSQLがあったとして
string sql = "UPDATE HOGE_TBL SET HOGE = :hoge WHERE HOGE = :hoge ";
パラメータが下1つだけだったら更新件数0件で上手く動かない…
cmd.Parameters.Add(new OracleParameter(":hoge", "huga"));
Javaだと上手く動くけどC#は明示的に分けないとダメな感じ? 最近c言語習い始めた初心者なんですがwhile()のカッコ内の条件式に論理演算子を使うことはできますか
もしできるならif文の時のように入力すればいいのでしょうか >>910
ここはC#の相談室なんだが・・・
まあ、ifの書き方と同じで良いですよ。 C#10で文字列補間が大幅に最適化されたってことらしいけど、
stringオンリーの4個以内(Concatの最大引数以内)以外は$"{}"で繋げていった方がむしろパフォーマンス良くなるって認識でOK? わけあってVisual Studioをインストールできない環境があるのですが、
その環境で
Windows標準のC#コンパイラ(C:\Windows\WinSxS配下のcsc.exe)
+
Visual Studio Code
でC#コンパイル環境を作成したいのですができますか?
以上、よろしくお願いいたします >>915
積むかどうかは分からないですね
私は超能力者ではないので ビスマルク「愚者は経験に学び、 賢者は歴史に学ぶ」 そもそもコンパイル環境なら、VS Codeすらいらないんじゃ VSはダメでVSCodeはインストールできるんだ
よくわからない環境だな ジャップには分からんだろうが世界的には9月からはもう2022年だぞ コマンドが格納されたListを順番にサーバへ送信し、
1が返ってきたら次のコマンド送信、1以外かTimeoutしたら即中断みたいな処理を
ractiveでサクッと書けますか?
var cmdList=new List<string>{ cmd1, cmd2, ... };
cmdList
.ToObservable()
.TimeOut( ・・・ )
.SendCommand()
.WaitResponse()
.PostRecv(1だったら次のコマンド送信、1以外やタイムアウトなら処理中止);
みたいな感じで。。 cmdList
.ForEach(x => { if(x.SendAsync(cts.Token).Result == 1 ) throw new Exception() }); var results = await cmdList
.ToAsyncEnumerble()
.SlectAwait(async (c) => await c.SendAsync(cts.Token))
.TakeWhileAwait(async (r) => r == 1)
ToArrayAsync(); タイムアウトで値や例外が返ってくるタイプだったらいいけど
時間経過で勝手にタイムアウト判定しろよってタイプだと詰みそう ReactiveExtentions(System.Reactive名前空間 ver5.0)を使ってます。
自分なりに書いてみましたがこのライブラリの使い方がよくわかってない状態です。
(疑問点をコメントに書きました。分かる方教えてください)
IDisposable d = cmdList
.ToObservable()
.Timeout( TimeSpan.FromSeconds( 3000 ) )
.Select( cmd =>
{
var res = this.SendCommand( cmd ) // 自作のコマンド送信関数;
return res;
} )
.Where( res => res == 1 )
.Subscribe(
res => /* ここで次のコマンド送信を行う書き方が分からない*/ res.ToString(),
ex => Debug.WriteLine( ex.Message /* Timeout発生時 */ ),
()=> Debug.WriteLine( "Complete" /* 全ての送信完了?それとも1つだけ送信完了? */ )
);
>>927
やはりToAsyncEnumerbleからアプローチするべきなんですかね。。 Timeout関数の中身は
TimeSpan.FromMilliseconds( 3000 ) // 3秒
の間違いでした Rxは監視を行うもの
時系列に沿って要素が流れてくる時に使うもの
なのである要素が流れてきた時に次の要素なんてのはまだ無い
要素が最初から揃ってるListから始めるからわからなくなる
最初から揃ってるなら普通にLinqかforeachを使う
Listでなくストリームならこれでおk
var d = CommandStream
.Select(c => Send(c))
.Timeout(t)
.TakeWhile(r => r == 1)
.Subscribe(); 次元の違う配列ではArray.Copy出来ないのでしょうか。
例)
var foo = new int[4];
var bar = new int[3, 4];
ArrayCopy(foo,0,bar,0,4); // 例外発生 "The specified arrays must have the same number of dimensions."
1個づつコピーするしかないのでしょうか? プリミティブ数値型の配列ならBuffer.BlockCopyできるけど
まあ多次元配列なんて肩身が狭いもんだから仕方ないね classを配列に保存しているから、BlockCopyもダメなんですよね・・・
あまり数も多くないはずなので、1つずつコピー(代入)していきます。 >>932
若干アンセーフだけど行ごとにならSpan利用すればマネージ型でも出来る
for (int i = 0, len2 = b.GetLength(1); i < b.GetLength(0); i++)
foo.CopyTo(MemoryMarshal.CreateSpan(ref bar[i, 0], len2)); MemoryMarshal.CreateSpan(ref bar[i, 0], 5000)とかやっても確か例外でないから最新の注意を払う必要はある
まぁこうやってもソースの長さがデスト以内であれば問題は生じないけど 入力を検知したときにメソッドを実行する処理において、
要素Aがnullでなく(エラー防止)、Aの子要素Boolがtrueの場合のみ処理をスキップしたい場合に いい書き方はありますか?
!A.Bool でメソッドを実行にしてしまうとAがnullだったときに実行されなくなってしまうので……
ひとまずgotoを使って以下のようにしているのですが、もっとスマートな書き方ありますでしょうか
if (Input)
{
if(A != null){
if(A.Bool){
goto INPUTSKIP;
}
}
Method();
}
INPUTSKIP: >>937
こう?
if (Input)
{
if (A != null && A.Bool)
{
// INPUTSKIP
}
else
{
Method();
}
} >>939
それを反転させて
if (Input)
{
if (A == null || !A.Bool)
{
Method();
}
} >>937
goto 使いたくないと言うなら A が null か、A.Bool が false の時に処理したいってことだから普通に
if(A == null || !A.Bool){ 処理 }
って書くか>>938が言うnull条件演算子とnull合体演算子を使って
if(!(A?.Bool ?? false)){ 処理 }
でいける
個人的にはこの場合だと上の方がわかりやすいと思う AがnullだったときにORで並べてA.Boolの条件式を使ってしまうとそんなもんないよってエラーを吐くのでは、
と思い込んでいたのですが大丈夫なんですね……!
!A.Boolだけで判定したときに怒られたので頭凝り固まってました!
ありがとうございました! >>945
ああーなるほど、ORの場合どれか1つでも満たされてれば実行されるから
左側が条件を満たしてたら右側はもうチェックされないのか!!
良いこと知れました! ありがとう! >>947
OrElse 使え
>>948
> 論理演算子2つ並べるのがショート サーキット評価なんだけど
とか言う玄人w はあ?
C# ⇔ VB.Net
---------------------
& ⇔ And
&& ⇔ AndAlso
| ⇔ Or
|| ⇔ OrElse
ってなってるだけやぞ >>937
条件式をネストしたり&でつないだりと複雑にするのは難読性が高くなるから分けたほうがいいだろ
どういう条件ならMthod()を呼ぶのか明確に
if(Input){
//事前処理
judge=(A==null) ? true: //Aがnullのとき
A.Bool==false ? true: //Aの子要素がfalseのとき
false; //それ以外
if(judge) Method();
//共通処理
...
} >>952が分かりやすく見えない…
>>940が誰が見ても一目瞭然でいいと思うわ
シンプルな条件分岐なんだからこだわる必要ない skipするほうが例外的処理だろうからskip条件を明確にしてearly returnしたほうがいいと思う
論理式の細かい書き方よりも意図が伝わるかどうかのほうが大事
if (ShouldSkip(a)) {
return;
}
Method();
bool ShouldSkip(A a) {
return a?.Bool ?? false;
} メソッドにすんのはいいけど、>>937 が入力を検知したときメソッドを実行したいって言ってんだからその通りに書けばいい
設計書通りに条件分岐すりゃいいのに無駄に置き換えて実装する人多いけどなんなんだろうね
if(入力検知(input, A)){
Method();
}
bool 入力検知(bool input, A a){
return input && a != null && a.Bool;
} 昼飯食いながら適当だから何か勘違いしてるかもしれないけど、>>937って要は
ある条件を満たした時だけMethodを実行したい、それだけでしょ?
だったら四の五の言わずに素直にそう書くのが一番じゃないの。
if( input && (!A?.Bool ?? false)) Method(); 求めてるのは「もっとスマートな書き方」だからな
主観的な問題だから、俺らが言えるのは「こういう書き方もある」ってのだけ
正解(どれが一番か)を決めれるのは本人だけ コードでも文章でも読み手に「要するにそれってどういうこと?」って思わせないのが一番。
これもコードでも文章でもそうだけど、読みにくいものは書いた本人がそこをよく理解せずに書いている。 ReSharperが薦めるように書き換えたら、何をしてるのかわからなくなった。 最近のc#はマルチパラダイムで構文が増えてカオスだ >>955,956
>>937を読む限りでは入力を検知する処理と
検知した後に特定の処理をスキップするかどうかを判断する処理は別じゃないのかな?
「A.Boolがtrueなら入力を検知しない(or 入力を無視する)」ってことなら
入力よりも先にA.Boolを確認するよね ちなみに回答ざっと見てこんなだな
こういうのはコードが長くなっても動作が分かりやすい方がいいと思う
>>939,940,952
おk
>>954,955
バグあり >>960
それ。言語の表現力が豊かでも、自分やチームで一貫性を担保するのが面倒ξ >>963
そして、コーディング規約が底辺プログラマーに合わせられて生産性が低下する どうせ好き勝手に言語機能使って上がる生産性なんて微々たるもん .net の 1.1 で書くとめちゃくちゃ不便で絶望するぞ linqがある.NET Framework3.5ですら今これでやれって言われたら不便に感じるしなぁ
使えるものは使わせてもらった方が全然楽だわ 色々使えた方が個人的に楽だと思うのは否定しないが、もっともらしく「生産性が上がる」とか言っちゃうと
意外とそうでもなかったり。 心配しなくても今どき1.1で書いたり書かされたりすることはないでしょ さすがに今どきvar使うなとかLINQ使うなとか言われないよね? >>973
var使うとわからなくなるというのは名称が明示的になってないだけだと思うわ MS公式はvar推奨してるけどさすがにintとかstringとか基本的な型はvarにはしないな 明示的に型を書かないとダメなところ以外全部varで書くよ 最近はnew()で書けるようになったから、極力varはやめてる
Hoge hoge = new();
実装当初の想定通りlinqの戻りくらいかなvar、使うの。 はやくおれのレベルまで上がって来い
上で待ってるぞ new()で書けるようになったけど、コンストラクタで初期設定値渡すようにしちゃうから全然使わんなぁ。
セッター潰してコンストラクタで設定するのが好き C#がどんどんボクのしらないものになっていってる
いっそC##やDと名乗っていただきたい
(Dは既にある、は受け付けない) >>983
ほんと、氷川きよしくらい変わってしまった if(item is {} a){
...
}
null判定でこんな書き方あるんだな。Resharperさんに提案されて初めて知ったわ。
個人的にはあまり使いたくないけど。 >>989
それやるとaの色がローカル変数色にならず白のままになるのが不満なんだけど俺の環境だけか? >>989
C#9なら
if (item is not null)
って実に直感的に書けるから早くこっちにこいよ…
ところでその式でaで受ける意味なくね? WinFormsを独学でやっているのですが教えて下さい
そこそこの規模のソフトは作れるようになってますが
VSで開発していくうえで、フォルダ構成ってどう考えればいいですかね
いままではDB関連をDBフォルダ
フォームはFormにまとめてさらにその中に機能別にフォルダを
細かいクラスファイルはClassというフォルダに
DBとの受け渡し(sql書いてFormとの受け渡しModelみたいなもの?)は
Modelというフォルダにまとめています
プロの皆様はチームで作っていかれる際に
会社によりけりかもしれませんが一般的なフォルダ構成の考え方ってあるんでしょうか そんなもの存在しないから適当でいいよ
まぁあえて口出しするならFormフォルダはFormクラスと名前が被るからやめとけって位かな なんのフォルダなのか理解できない
プロジェクト(visual studio上でのプロジェクト)内じゃフォルダ切ることはないな
プロジェクトがある程度大きくなったらクラスライブラリに分ける >>995
そうなんですね、気をつけます
>>996
たとえば画面数でも100超えて、機能部分のClassファイルも100越えてくると
いちいち該当ファイル探すのが面倒でフォルダに分けたって感じです
前はPHPのフレームワークとか触ったときは
たとえばcontroller model viewとフォルダも階層構造みたいになっていて
そういう感覚もあります
チームでやられていると、どこに何のファイルが散らばっているか
わからなくなったりしないのですか? きちんと仕様書があるから関係ないのですかね
やっぱりクラスライブラリ(DLL化?)もちゃんと理解しないと駄目ですよね
一人で作ってるので、DLL化するほうが手間な気がして避けてました どこに何がは命名の問題もあるんじゃないかな
classも変数も先頭、末尾にそれが何か分かるように名前つけてるから名前順にソートされてればすぐわかる >>998
機能ごとにProjectを作るんだよ。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1004日 15時間 55分 34秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。