1 名前:デフォルトの名無しさん [2009/02/04(水) 23:26:55 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part50 pc11.2ch.net/test/read.cgi/tech/1229661915/l50 Visual C# 2008 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>2-5 くらい
552 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:38:57 ] >>551 気のせいじゃね?
553 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:40:53 ] ↓のようなリストを作成しており、条件としてKeyだけを 用いてそれと一致するbdListのindexを取得したいのですが foreachなどで一つ一つチェックするしかないのでしょうか。 BindingList<Data> bdList; public class Data { private string _Key; private string _Value; private int _Count; public string Key { set { this._Key = value; } get { return this._Key; } } public string Value { set { this._Value = value; } get { return this._Value; } } public int Count { set { this._Count = value; } get { return this._Count; } } }
554 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:47:54 ] >>553 リスト構造なら辿るしかないだろ そういう意味じゃないならlinqとか
555 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:08:17 ] >551 実行時に最適化されてるんだよ。 呼び出しの初回にメソッド全体がJITコンパイルされるか小さなメソッド単位でJITコンパイルされるかだよ。 細かなプロパティやメソッドの呼び出しなんか結構インライン展開されてるしある程度分割した方がいいと思うよ。 試しにBigMethod内で呼び出しているけど条件に合わなくて呼び出されない箇所で 参照してるアセンブリのメソッドを削除してdllを差し替えてそのまま実行すると 上はBigMethodメソッド呼び出しで実行される前のタイミングで落ちるけど、 下はMethod1かMethod2が不完全でも呼ばれなければ動いたりする。 >553 .Select((data, index) => new {Data=data, Index=index}).ToLookup(i => i.Data.Key).ToDictionary(i => i.Key, i.First().Index)["探したいキー"] とでもすればいいんじゃないかな。 素直にforで辿った方がいいよ。
556 名前:553 mailto:sage [2009/02/25(水) 23:13:06 ] >>554 有り難う御座いました。2005環境なのでLinqは使えません…。 .Containsや.IndexOfが内部的にforeachで回しているのであれば 諦めつくのですが、件数が増えてきたときに効率が悪いかと思いまして。 データ構造を見直した方がいいんですかね…。
557 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:13:35 ] LINQ使う場合、 bdList.OfType<Data>.Where(d=>条件).Select(d=>bdList.IndexOf(d)); が書き方的には自然だけど、IndexOfのコストが絶対に問題になる。 Enumerable.Range(0,bdList.Count).Where(i=>bdList[i].Key==ほにゃらら); とかすべき。
558 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:15:52 ] そりゃ普通のリストならO(n)掛かるのはどうにもならんだろ。
559 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:17:52 ] >>556 LINQ使えないのなら、 Enumerable.Range(0,bdList.Count).Where(i=>bdList[i].Key==ほにゃらら); と同等の処理をforで書けば良いと思う。.Containsや.IndexOfがO(N)で嫌だという 感覚は正解で、インデックスによる参照がO(1)だから、そっちを使うべき。
560 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:31:07 ] 内部にDictionary<string, Data>持っとくとか
561 名前:553 mailto:sage [2009/02/25(水) 23:42:04 ] 親切に有り難う御座いました。 Dictionaryでもう少し効率良く出来るのであればそれも 視野に入れて色々試してみます。
562 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:43:42 ] >>560 Dictionaryって、重複を許すモノホンのハッシュじゃないよね?
563 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:50:29 ] ごめん、>>562 はハッシュについて勘違いしていた。 それと、そもそも異なるValueに同じKeyが対応する事がないのなら、確かにDictionary一択だね。
564 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:16:03 ] >>555 1回のみしか呼ばれないならJITコンパイル時の時間分だけ短縮しているというのは理解できるのですが、 BigMethod自体が複数回呼ばれる場合でも下の方が速いというのがちょっとわからないのですが… 呼び出し回数は、で、BigMethod1回につきMethod1またはMethod2が1回なのですが、 複数回呼ばれる間にどちらも呼ばれます。回数自体はそこまで多くなく、メソッド呼び出しのオーバーヘッド は大きくないはずですが、なぜ分割した方が速くなるのでしょうか? 処理をメソッドに分割した方がうまく最適化されやすいのでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 03:28:31 ] レジスタ変数をうまいこと選択できるとか? いや知らんけど。
566 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 03:28:38 ] >>564 基本的なことだけど速度計測の時に最適化が有効になってるか確かめた? デバッグビルドは最適化が働かないよ。 リリースビルドでもF5実行の場合は最適化が抑止されるよ。
567 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:20:45 ] 初歩的な質問で恐縮ですが C++のSTLとかアルゴリズムを利用したコードってC#でも使用できますか?
568 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:28:12 ] コードってC++のソースコードなのかコンパイル済みのコードなのかどっちなんだ
569 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:28:33 ] >>565 一応BigMethodをビルドしてからReflectorでILを見てみると、.maxstackの値が22から10に減っていました。 >>566 Debug、Releaseビルドどちらの場合でも分割している方が速かったです。 一応実行時はリビルドを実行してからVS上ではなく直接exeを起動して計測しています。
570 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:46:38 ] >>568 どちらでも可能であればかまいません C#でSTLを使いたいのです
571 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:47:56 ] 無理 テンプレートが使えないからな C++/CLIでSTL/CLRでも使えば?
572 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:53:58 ] C#使う以上は問答無用でSystem.Collections.Generic使え
573 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:16:30 ] 拝承
574 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:21:53 ] 調べてないのだけど、C++/CLIってunsafeキーワード書かなくても、 ポインター使ったプログラムを掛けるのかな?
575 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:24:05 ] 書けるよ。 manageとunmanageの区別は自分で意識してやらないとならんが。
576 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:31:35 ] コンパイルオプションでポインタを使えなくすることもできるけどな
577 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:32:18 ] pinできなくなるってこと?
578 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 12:05:27 ] pin_ptrはできる。GCHandleType.Pinned使ったGCHandle.Allocと意味的に同じだし。 でもT*にキャストはできない。 pin_ptrからIntPtr作ることはできてMarshalでアクセスはできる。 つまりは/unsafe使わないC#とほぼ同じ。
579 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 12:52:53 ] あくまで相互運用のためにあるので全部がC++/CLIのアプリケーションは作るな莫迦者って誰かが言ってたな
580 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:03:47 ] MS自身そういうスタンスだからな STL/CLRとかいう迷惑なものはなかったことにするべき こんなもんがはびこったりしたら何のための.NETかわからなくなる
581 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:26:44 ] いや、.NETのジェネリックは糞過ぎるから、 テンプレートとして使えるコレクションライブラリは欲しい。
582 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:40:18 ] C++コードとの互換性を含めるべきだったんだよ、MSは!
583 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 15:01:34 ] プリプロセッサで変態マクロが定義できる言語には二度と触りたくない。マクロのすごい版として テンプレートを導入したC++は何をかいわんや。オブジェクト指向的な構造さえしっかりしていれば むやみやたらな自由度なんていらない。.NETのジェネリックはコードが変態にならない点で優れて いると思う。その分できない事が多すぎるというのは理解するが。
584 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 15:07:25 ] そしてやっぱりダージリンの新開発待望論が高まる
585 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:47:21 ] 自分が書いたものですら、昔のものはまるで読めないような変態言語は勘弁して。
586 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:05:07 ] 今の仕事が左から流れてきたデータをより分けたり下から流れてきたデータと組み合わせたりして 右に流すようなやつなんだがLINQ使い倒せて実に気分がいい 趣味でいじる分にはピンと来ないgroup byとか爽快だ だが後でメンテする人は果たして読めるんだろうかアレ いやまあできる限り読みやすく書いてるつもりだが でも最大の責任は同じ名前のクラス3つも4つも作った奴だから文句はそいつに言ってくれ なんで一つのメソッド内に別々のInformationクラスが3つも出てくるんだ畜生
587 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:30:55 ] ネームスペース別でも、機能が似たようなInformationが、 3つ同じ名前で実装されてるってか?w
588 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:46:17 ] それは酷いww
589 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:09:44 ] まさか担当者ごとにネームスペースを分けちゃいないだろうな。 Kaishamei.Suzuki.Information, Kaishamei.Sato.Information みたいな……
590 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:52:18 ] 苗字だけじゃなくちゃんと名前でわけてるわ!
591 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 07:51:01 ] ならおk
592 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 09:05:09 ] でも将来的に似てても一部違う機能を実装するならそれもありとかでは? と素人が申しております
593 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:03:12 ] 便乗質問。 2chにはあまりこういう仕事してる人いないかもしれないけど、 例えばFooTech社のBAR1234というインターフェイスカード(DIOとか モーションコントローラとかいろいろ)を操作するためのクラスライブラリを 作るときって、名前空間名はどうしてる? FooTech.BAR1234 ? MyCompany.BAR1234 ? MyCompany.FooTech.BAR1234 ?
594 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:26:33 ] 三番目以外にする理由がわからない
595 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:41:43 ] 発注元にもよるんじゃ
596 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 01:49:05 ] >593 3番目でやってるよ。 結局名前空間だけじゃなくアセンブリも分けてあって プラグインのように呼び出せるようにしてある。
597 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 05:22:52 ] 仮面さんとこから転記 名前空間のネーミング方法 CompanyName.TechnologyName[.Feature][.Design] というパターン。 例: Uchukamen.MultiMedia.Movie.Viewer .NET Framework 名前空間で使用されている名前は使わない。 Class Console →だめ。 意味的に適切な場合は、複数形の名前空間名を使用する。 例: Collections 例外: 省略形 System.IOs 誤 → System.IO 正。 名前空間とクラスに同じ名前を使用しない。 namespace MySystem; class MySystem; // 誤り。名前空間とクラスに同じ名前を使用しない。
598 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 07:02:32 ] 趣味で作ってる場合CompanyNameはどうすればいいんだ・・・ 本名使うには抵抗が・・・
599 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 07:11:28 ] 趣味ならウェブサイト名とか。公開しないなら個人名でもいいだろう。
600 名前:デフォルトの名無しさん [2009/02/28(土) 08:09:42 ] 600
601 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 10:23:05 ] 趣味やオープンソースならプロジェクト名だけでいいと思う
602 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 11:56:24 ] メッセンジャーを作ろうと思うのですが、 どうやったらインターネット越しの相手と通信できますか?
603 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:22:53 ] キミニハムリダ
604 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:00:03 ] カムサハムニダ
605 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:03:22 ] ヨンドンサリの
606 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:18:49 ] UPnPでポートをあけてpushできるようにして、 マイクから音声を取得するようにして、 その音声を圧縮して、tcpかudpで送って、それを受信側で元に戻して再生するお UPnPつかわないで擬似的にpushしてるソフトあるけど どうやってんだろ
607 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:23:27 ] 擬似的なpushって受信側からのポーリングじゃね
608 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:28:51 ] >>599 ニックネーム
609 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:26:02 ] >>608 じゃおれの場合はHannsamubo-iにすればいいのか
610 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 22:06:48 ] おまえ、ハンサムボーイって呼ばれてるのか イジメじゃないか
611 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 22:17:46 ] >>610 ごめんごめんhandsomeboyの間違いだった
612 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:21:45 ] >>598 GUID
613 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:43:04 ] >>612 おまえとは仕事したくないなwwwww
614 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:56:29 ] むしろうちに欲しい
615 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:57:34 ] 仕事欲しい
616 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:58:37 ] 彼女欲しい
617 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 02:04:12 ] 仕事さえあれば彼女ができる自信はある
618 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 02:35:51 ] いたって簡単なことだが、ずっと家に居たって何も始まらない。 2chなんてすぐに断って家を発って職安に行くんだ。
619 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 02:38:30 ] いやーん
620 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 03:52:57 ] >>618 じゃあ一緒に行こうか
621 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 15:47:48 ] 現地集合な
622 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 16:54:25 ] NEETでなぜ悪いっ
623 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:03:45 ] 悪いに決まってるだろJK 親や周りの人に負担ばかりかけて 無駄に消費するだけして 周囲や社会には何も貢献してないんだから
624 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:34:33 ] >親や周りの人に負担ばかりかけて >無駄に消費するだけして >周囲や社会には何も貢献してないんだから まさに2ちゃんねるにレスすることとまったく同じだな
625 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:13:01 ] ばーか 上の世代が貯金ばかりして経済が停滞してるというのに ニートはそれを消費に回して経済活性化に寄与してるんだよ
626 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:19:21 ] >>622 .NETでなぜ悪いっ に見えた
627 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:36:07 ] 悪いに決まってるだろJK メモリやディスクに負担ばかりかけて 無駄にリソースを消費して 周囲や社会には何も貢献してないんだから
628 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:45:01 ] >メモリやディスクに負担ばかりかけて >無駄にリソースを消費して >周囲や社会には何も貢献してないんだから まさに2ちゃんねるにレスすることとまったく同じだな
629 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:51:56 ] NEET、NEETを語る
630 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:40:11 ] NEETな午後3時
631 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:04:39 ] TCPListenerを使って接続を受け付けるために、 BeginAcceptTcpClientで接続を受け付けています。 while (isAlive == true) { tcpListener.BeginAcceptTcpClient(new AsyncCallback(TCPListenAcceptCallback), tcpListener); autoResetEventTCPReceive.WaitOne(); } ここで、プログラムを終了させるためにisAliveをfalseにしているのですが、 BeginAcceptTcpClientでブロックされてしまい、プログラムがいつまでも終了 しない状態になってしまいます。 そもそもプログラムの終了方法が悪いのかもしれませんが、 何か良い方法があれば教えてください。 よろしくお願いいたします。
632 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:30:17 ] せっかくBegin使ってるのにその直後に無限待機しちゃ意味無いじゃん 適当にWaitOneにタイムアウト秒数与えなよ
633 名前:631 mailto:sage [2009/03/02(月) 22:02:43 ] >>632 ありがとうございます。 WaitOneにタイムアウトを持たせることで解決しました。 # 若干プログラムの終了まで時間が掛かりますが、問題になる範囲ではないですよね?
634 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:29:23 ] CLR ProfilerでFormアプリケーションのメモリ生成を見ようとしいます。CLRプロファイラのメインフォームからアプリケーションをスタートするとアプリケーションはスタートするんですが、 "Waiting for application to start common language runtime" とでたままプロファイラがアプリケーションにアタッチできません。 デバッガーで見るとCLRProFiler.MainForm.WaitForProcessToConnectの中のpipe.Readで毎回IO.Exceptionが発生しています。 例外内容は"プロセスがパイプの他端を開くのを待っています。"とのこと。 ぐぐってみると同じような現象が出ているのはあったんですが、サービスで発生した場合でアイデンテイティをシステムで立ち上げるとかうんたら。 forums.asp.net/p/368720/372560.aspx アプリケーションの場合にどうするのかわかりません・・・ securityがらみぽいのですが、これは環境がVistaだからでしょうか。
635 名前:634 mailto:sage [2009/03/03(火) 12:30:25 ] 事故解決。 CLRProfiler.exeをエクスプローラから右クリで管理者として実行でいけました(=゚ω゚)ノ でもタスクマネージャーでワーキングセットが500Mぐらい食って減らないもののプロファイルしたかったんだがProfilerでみても、10Mぐらいしかアロケートしてないといわれる・・・ 見方が悪いんだかよくわからん。逝ってくるノシ
636 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 14:39:07 ] 出来上がったexeをバイナリエディタで覗くとプロジェクトのフルパスが埋め込まれちゃってるんだけど、消す方法ある?
637 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 14:53:06 ] バイナリエディタがあるなら消せるだろ。
638 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 14:53:12 ] プロジェクトのじゃなくてpdbファイルのじゃね? pdbファイルの出力ならプロジェクトのプロパティでビルドの詳細設定>デバッグ情報あたりで制御できる
639 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:05:04 ] >>637 消して動作に影響あるかもしれんのじゃないか?
640 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 21:28:21 ] ハッシュで弾かれないか?
641 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 21:58:53 ] pdbはデバッグ用だろ
642 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:52:45 ] >636 デバッグビルドしてない?と思ったけど VS2005かVS2008からReleaseビルドでもpdbを作るのがデフォルトになってるんだった。 ビルドの詳細設定から出力のデバッグ情報をnoneに変更する。
643 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:37:47 ] おお本当だ Release設定のデバッグ情報noneで埋め込まれなくなった みんなありがとう しかしこれ気付かずにそのままリリースしたら、プロジェクトのフォルダに個人名使ってたら色々と問題になりそうじゃない?
644 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:45:30 ] 普通の観察力があれば気づく
645 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:48:19 ] dotfucator使ってればその辺の情報は消えてるだろ
646 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 08:57:50 ] "要.NET Framework3"でググって出てきたのをいくつか見てみたけど消してる人は少ないな
647 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 09:13:34 ] 普通はexe(dll)と設定ファイル以外出さないでしょ
648 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 10:47:53 ] pdbファイルがどうこうの話じゃなくて、本名バレしてる人いるんじゃね?って話 本名でユーザー作っててマイドキュメントの下にプロジェクト置いてたらアウアウ
649 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:07:34 ] そういう事故がままあるからうちではユーザー名に本名を使わなくなった
650 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:20:06 ] タスマネのユーザー名を消さずにスクショうpしてあうあうとかリアルにあるからな
651 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 14:12:41 ] ユーザ名は嫁の名前使ってます。 脳内嫁ですが。
652 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 14:44:15 ] >>646 蛇足だが、100%アンマネージドなVC++アプリでも デフォルトのリリースビルドの設定だとPDBのパスが埋め込まれるのは同じ。