6 :
デフォルトの名無しさん :2007/09/27(木) 12:02:17
C#2005を使っています。Win32 APIを使いたいと思い、下記のコードを書きましたが、 >エラー CS0246: 型または名前空間名 'DllImport' が見つかりませんでした。 >using ディレクティブまたはアセンブリ参照が不足しています。 というエラーがでてしまい。コンパイルできません。何か特別な設定が必要なんで しょうか?。他の部分は新規プロジェクトで、Windowsアプリケーションで作成した 素のままの状態です 何かアドバイスがあれば、よろしくお願いします。 -----以下コード----- using System; using System.Collections.Generic; using System.Windows.Forms; namespace hoge { static class Program { [DllImport("user32.dll")] public static extern int MessageBeep(uint uType); [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); MessageBeep(0); } } }
>>6 using System.Runtime.InteropServices;
using System.Runtime.InteropServices; DllImportの上で右クリック→競合の解決 ちなみにMessageBeep使わないでもSystem.Media.SystemSounds使える
>DllImportの上で右クリック→競合の解決 おぉ、こんなのあるんだしらなかった。すごいよ(´д`)ママン…。 これ登録されてるライブラリから名前解決して推論して持ってきてるって感じなのかね? 自分のライブラリでも可?
コピペ君って馬鹿だな、まで読んだ。
14 :
デフォルトの名無しさん :2007/09/30(日) 00:52:22
>>6 Win32 APIを使いたいならMFC使えば?
C#みたいなけったいな宣言なしに呼べるよ
そこはC++/CLIだろ なんでMFCなんていうクs
16 :
デフォルトの名無しさん :2007/09/30(日) 02:48:56
ネイティブ吐けないじゃん
どうしてここでネイティブを吐く必要があんの?
ComboBoxのselectedIndexChangedイベントで、 ComboBox.selectedValueの値に応じて、処理を実行したいんですが、 このComboBoxがあるフォームを閉じたときにも(xをクリック)selectedIndexChangedが起きて、 そのときにselectedValueがnullになっていてこまってるのですが、どう対処すべきでしょう? (フォームがdisposeされるから?)
SelectedValueってのは初めて知ったけど SelectedIndexじゃダメなのかな? 自分はこっち使ってます。
>>19 閉じられるときはselectedIndexの値が-1になってるのでこちらもダメみたいです。
ちなみにComboBoxの内容はデータバインドでデータベースの内容をそのまま表示してるけど
ひょっとしてこれは関係ある・・・?
そもそも閉じた時に何かする必要があんの?
>>21 ないです。閉じたときにselectedIndexChangedが発生してしまうことで困ってます。
何で発生するかも分からないです。で、そのときにvalueがnullになってるのでヌルリが出てしまいます。
イベントハンドラの先頭で valueがnullかindexが-1なら何もしなけりゃいいんじゃね
>>23 まあ、そりゃそうなんですが・・・
基本C#使いではないので、こういう場合のC#での定石みたいのがあったりするのかな、と。
そもそもselectedIndexChangedが発生したのにindexが-1であるのがそもそもおかしいようなきもするし、
ifでチェックするのはダサイというか正しくないような・・・
フォーム閉じたときにSelectedIndexChangedが呼ばれるって時点で変。 他の人が書いたコードを引き継いでるの?
>>25 俺も変だと思います。
自分で書いたコードです。勉強がてら昨日から始めました。
フォームのdisposeが呼ばれた後でselectedndexChangedが呼ばれているみたいなので、
俺の勝手な想像では、disposeされたことで、データバインドしているComboBoxの中身が削除されて、
それをトリガーにselectedIndexChangedが発生しているのではと思ってるのですが、
まあどっちにしろどうしたらいいのかわからない・・・
補足 データバインドしない、ただのコンボボックスで試してみたら フォームを閉じたときに、selectedIndexChangedは呼ばれないことは確認しました。 ということはやはりデータバインドがダメということっぽい? やはり自分でフォームロード時にComboBoxの中身を設定すべきということなんですかね。
というかComboBoxの状態としてインデックスが-1になることや、値が nullになることがあるのは仕様なのでチェックしなさい。全然ダサくない なんで仕様かって話なら何も選択されてない状態があるから。そもそも インスタンス作った直後とか何も入ってないのに選択しようがないだろ
29 :
デフォルトの名無しさん :2007/10/02(火) 02:25:51
Formだけが遅いのかと思ったら Genericも超おせー .NETってどんな局面で使えるのかさっぱりわからんぞ
いったい何作ってんの?
馬鹿は放置願います
ジェネリックが遅いの意味を詳しく
数学的処理とか画像処理とか膨大な処理ならともかく それ以外なら十分満足できる速さだろ。 じゃなきゃ作り込みのロジックが悪いとしか・・・
むしろ数学的処理とか画像処理とか膨大な処理でも遅くないが
そういうののほうが差はでないんじゃまいか?
このようにみんな混乱しているので ジェネリック超おせーの詳細を超詳しく
Javaのジェネリックなら、使ったら速くなると勘違いしてて 使ってみたら全く変わらなくてがっかりで「超おせー」っていうのはありそうだが
boxingとかされると遅くなるのかな?
boxingさせないためのジェネリクスだろ
boxingったってnew一回分だろ 気にすることねえべ
でも値型オブジェクトを入れるコレクションとしてArrayListを使ってたところを List<T>に変えたら暴速になるべ
ボクシングを気にしないなら値型は使わなくていい
Rubyは足し算するにも整数オブジェクトの加算メソッドを呼び出すらしいな
C#のプリミティブ型がオブジェクトとして扱えるみたいに、 内部の実装は全然違うけどいちおう辻褄合わせしてあるだけなんじゃないの?
いや、Rubyでは全てがオブジェクトで 足し算もメソッド呼び出しで行うらしい 次のランタイムはそこをもうちょっとまともにして五倍ぐらい早くするって
最初から.NETみたいにしてれば良かったのに・・・( ´ー`)フゥー...
48 :
デフォルトの名無しさん :2007/10/02(火) 22:19:25
まぁ、STLとかと比べてじゃないかな? そうだとしたら当たり前。
エスパーすると構造体形式の値型をジェネリックで使う場合、 IEquatable<T>.Equals(T o)を実装してないという話じゃないかい。 比較もするならIComparable<T>.CompareTo(T o)も必要。 これがないと、比較や同値の検査のとき、 いったんBoxingされてしまうからジェネリックのメリットがなくなる。 Int32などのプリミティブの値型ははじめから実装済み。
50 :
デフォルトの名無しさん :2007/10/02(火) 22:52:57
genericをプリミティブで特化する奴なんていねーよ ばかか?おめー
JavaでもList<Integer>のオートボクシングとかあるだろ C#はそんなことしなくてもそのままの型でスマートに使えるんだよ
>>50 っていうか言いたいことがいまいちよくわからない。
どこにプリミティブで特化するって書いてる?
よくわかってないんだろ
超プリミティブで特化するし
C#で、mdbとsqlとSQL serverを切り替えれるようにしようかなと思って、次のようなフォルダ分けをしてみた DbClass-- | |--- Mdb | |------Mdbにアクセスするクラス | |--- Sql | |------Sql Serverにアクセスするクラス | |----設定に応じてMdbとSqlを呼び分けるクラス これで特に問題がないのだが、デザイナで作ったデータセットのTableAdapterがうまく切り替えができん。 何かいい方法ないかな。 データセットのxsdファイルを二つにして、毎回切り替えるような感じにすればいいのかな
すまん、ずれた・・・↑
readonlyとconstの違いがよくわからん。 なんで二つも似たようなキーワードを用意する必要があったの?
だって違うものだから。 constは定数。 readonly読み取り専用フィールド。
機能面で言えば、readonlyのフィールドはコンストラクタで初期化できる、 という点が大きな違いだろうね。
それじゃわからんです。 では、どちらかのキーワードが欠けていたばあい、こんな困ったことがある、 という事例おしえて
だから、readonlyのフィールドならメソッドの返り値で初期化することもできるよ。
63 :
61 :2007/10/03(水) 22:34:24
まぁ、constが無くて困るような事例はほぼ無いような。 readonlyだとリフレクションで弄れる余地が残っているくらいかなぁ。 あんま難しく考えない方がいいかも。 絶対不変の定数であることをコード書く人が明確にするため、 程度の認識でいいんじゃない?
>>61 const int MyIntValue = 1;
foo(MyIntValue);
と書くと、生成されるMSILにはfoo(1);と定数が埋め込まれる
#define MyIntValue 1
みたいな感じ。
MyIntValueの定義場所とfooを呼び出している場所が
別のアセンブリでも、やっぱりコンパイル時に定数が展開される。
問題はMyIntValueを別の値に修正したとき。
MyIntValueがどのアセンブリに定義されていようと
利用場所ではコンパイル時に定数が埋め込まれるから、
結果的にMyIntValueを使ってるプログラムは全部コンパイルし直しになる。
つまりそういうところにconstを使うべきじゃない。
readonlyの場合は、実行時に変数から読み出されるので
利用側の再コンパイルは必要ない。
switchで使えんとか属性で使えんとかあるだろ
constは定数として解釈される。
定数式とそうでないものは静的言語使うんならきちんと区別しる。Typeだけの話やないぞ
>>66 もいってるけどまあ実際主にswitchやAttributeとかぐらいやけどな
>>65 の方が重要じゃね?
バージョン管理絡みとかで
どっちも重要だけど、まあ
>>65 のはやっちまう可能性があるから注意が必要だな。
>>66 とかのはいきなりコンパイルできない時点で直すことになるので、まあ実害まではいかない。
良いこと聞いた。
71 :
デフォルトの名無しさん :2007/10/04(木) 07:06:32
巨大なBitmapの一部を切り出して画面に描画しています GraphicsクラスのDrawImageを使っていますが、このメソッドが300msも掛かってしまいます なにかいい方法ありませんか?
WIN32のBitblt使え
GDI+使うなら、巨大なBitmapを分割して保持する。 DrawImageは描画元が大きければそれだけでコストが鰻上りだからな。 あとはGDIのBitBltとかWPFに移行するとか。
DrawImageUnscaled
>>68 ,69
>>64 ,65 の話はreadonlyでなければ困る話で
>>66 ,67 はconstでなければ困る話。
「どちらかなければ」困るでreadonlyだけでいいに対する反論という流れ
だからずれてる。
constはstaticだから複数個インスタンスを作ればメモリの消費が少ない。じゃダメ? 1000個や2000個の定数を複数個宣言する場合、そのまま 変数のbyte差分×インスタンスの数だけメモリが浮くんじゃない? static readonlyとかあるけど。 そんな事いったらstaticクラスもabstractでsealedができないと言う制限をコンパイラからはずせば不要だし。
なにゆってんの?
ごめんなさい、よくわかってないだけです。
79 :
デフォルトの名無しさん :2007/10/04(木) 17:26:54
ソリューションを別名で保存ってできないんですか? 一々ソリューション閉じてエクスプローラでフォルダごとコピペしてリネームって 結構面倒なんですよね
googleで 「.NET アプリ 遅」を検索すると 837,000 件 「MFC アプリ 遅」を検索すると 23,800 件 この差はなんですか?
きちんと議論したいのならば持ってくる数字が足りないよ
誹謗中傷乙! c# アプリ 遅 に一致する日本語のページ 約 43,100 件 c++ アプリ 遅 に一致する日本語のページ 約 93,800 件
それは普及度の差のような希ガスw
なるほどMFCはあまり普及してないのか。
php アプリ 遅 に一致する日本語のページ 約 302,000 件 今日のgoogleはスプートニク?
Tcl アプリ 遅 に一致する日本語のページ 約 954 件 Haskellに一番 ... アプリ 遅 に一致する日本語のページ 約 1,110 件 awk アプリ 遅 に一致する日本語のページ 約 13,100 件 Haskell アプリ 遅 に一致する日本語のページ 約 20,800 件 Scheme アプリ 遅 に一致する日本語のページ 約 22,400 件 Lisp アプリ 遅 に一致する日本語のページ 約 31,900 件 Python アプリ 遅 に一致する日本語のページ 約 50,400 件 C言語 アプリ 遅 に一致する日本語のページ 約 53,500 件 VB アプリ 遅 に一致する日本語のページ 約 78,700 件 Ruby アプリ 遅 に一致する日本語のページ 約 118,000 件 Perl アプリ 遅 に一致する日本語のページ 約 133,000 件 Java アプリ 遅 に一致する日本語のページ 約 238,000 件 F# アプリ 遅 に一致する日本語のページ 約 363,000 件
アプリ 遅 に一致する日本語のページ 約 408,000 合計が合わないから重複してるね。
F#で検索してもほとんどFで引っかかってるだけだな。 そうするとJavaがトップか。
いまのオープンソースの流れから考えてもC#は数年後には今のJ#と同じ道を辿る。 利潤追求の激しい企業が本来ならば仲間にしなければならない開発者までも食い物に していることも分からず、M$マンセーしている奴は頭を齧られ過ぎて考えることも出来ない くらいに脳みそがなくなっているんだろ。可哀想だよ。
フリーソフトって.NET物が増えてきたけど C#で開発してんのかなぁ。
俺には脳味噌がない まで読んだ
>>90 .NETで作成されたソフトなんて1%もないだろ?
増えてきたってだけで既存のソフト群を超えたなんてかかれてないだろ。
.netのフリーソフト多くは無いだろうけど 1%とか適当なこというなよ そもそも、.netのソフトが多いか少ないかを質問 してるのではないだろ
いくらなんでもスレチのチラ裏に必死すぎだろ・・・
96 :
デフォルトの名無しさん :2007/10/05(金) 15:17:24
開発環境がタダってことで、前はdelphiで作ったものが結構あったけど 今はそれがC#EEに移ってきてるんじゃね? windowsに限定するなら、javaよりも.netの方が何かと便利だし。
FxCopでアナライズすると 大量に「プロパティのgetterが呼ばれてません」て警告がでるんですが setterだけのプロパティを作るのって抵抗ありません?
いるなら作るし、いらないなら作らない。 それだけだろ…。
99 :
デフォルトの名無しさん :2007/10/05(金) 17:54:57
漢字のシンボルの使用ってどう思う? 中途半端な英語を使うよりプログラムの可読性とかは向上するけど どんな問題が考えられるのかな
なんちゃら.CodeAnalisysとかに抑制するクラスがあったような
intellisenceが効かない 誤字が多い 打つのがめんどくさい
intellisense は、売った後に ctrl+space でできるけど。 あと、enum とかに使うなら、型名の後 . 打った時点で intellisense 出るし。 やっぱ、一番うっとおしい問題は誤変換とか、IME 的な問題かと。 まあ、ローマ字を書かなくて済むようになったと思えば、いい時代よ。
103 :
あ :2007/10/05(金) 18:47:42
すみません、もしわかったら教えていただきたいのですが。。 現在C#を使って開発しているのですが 最近極端にデバッグのステップ実行速度が遅くなってしまいました。 検索したのですが見つからなかったので質問しました。
enumに↑、→、↓、←が使えない・・・
Unicode でも、記号関係の文字はたいていアウト。
107 :
デフォルトの名無しさん :2007/10/05(金) 20:25:56
ntellisense問題は、英文字の接頭語とかつければ問題は無いと思うよ ローカル変数のコメントとかどうでもいいコメントを省略できるから コーディング量は減らせると思うんだけど やっぱり書き手が美しく感じるかとかの問題だけなのかな
英文字の接頭辞に日本語ってよけい見にくいんじゃない? 接頭辞に悩みそうだし
ハンガリー記法の復活ですね!
それをいうならジャンガリアン記法。
いやハンガリー記法で合ってるよ
サンガリア記法だろ
113 :
デフォルトの名無しさん :2007/10/07(日) 00:38:44
いやモンゴリアンチョップだろ
それ言うならシャングリラ
.NETで作成されたWINDOWSアプリが普及するまでMSは.NETを推していくんでしょうか? .NETが発表されてから約8年が過ぎましたが、.NETでアプリが店頭に並んでいるを見たときがありません。 ネイティブと比較すると速度面であまりにも不利ですし、ソースコードが簡単に覗ける これでは商用ソフトとしては無理がありますよね うちの部署も未だにVC6++SP2/MFCですし・・・
日本語でw てか >.NETでアプリが店頭に並んでいる なんだそりゃw
推しもしませんし あまりにも不利ですし 無理があります。 次の質問どうぞ
「次の質問どうぞ」なんてセリフを吐く奴が回答しているのを見たこと無いよw カスは来るな、とまでは言わないが、カスならカスでオブザーバーに徹すればいいのに。
とりあえずお前ら帰れ 邪魔
お前らオレの日記帳汚すなよ・・・
開発環境が只で手に入るし、敷居も低いから.NETはフリーソフト中心に増えていくんじゃないの? てか店頭に並ぶアプリって大抵の物はフリーソフトで十分な糞ばっかり。
.NETアプリって敷居が低いか? MFCと大して変わらん気がするが・・・
何せタダだ
敷居は低いでしょ コレクションの中身をポインタ経由で誰かが参照してる時に コレクションを壊す、といった類の危険な操作に対してC++はひどく脆弱だが、 .NETではそんなことは(基本的には)ないし MFCと.NETでは、ライブラリのデキもカバーする範囲も段違いだ
美しい言語と美しいライブラリに勝るものなし
美しい、美しくないの議論は全く無味乾燥。 .NETの最大の弱点 遅い これに尽きる
そうだねー
世間でよく使われてるようなスクリプト言語よりずっと早いけどな
下を見るな 上を見ろ
安全性やプログラミングのしやすさのためなら 速さなんていくら犠牲になってもかまわない
つーか8年?
てか正しいアルゴリズムで書けば言語の違いで遅くなるなんてことはないのだ 言語が早いとか遅いとか言ってるやつは正しいアルゴリズムが書けないだけ
>>133 言語のベンチマークの類を見たことが無い人かな?
FORTRANでやるような数値計算の類をスクリプトでやってみるといいよ
そんな数値計算なんぞCのライブラリでも呼び出せばいいだけの話じゃねーか
>>131 アプリケーションを使う側からしたら
プログラミングのしやすさなんてどうでもいいのでは?
速いアプリケーションより遅いアプリケーションを選択するユーザなんているのかな?
>>135 まず人と会話出来るようになろうぜ・・・
基本的に、現代のコンピュータで処理すれば体感できるほど処理時間はかからない 処理時間がかかるような処理はCで書いてそれを呼び出せばいい それ以外のところは美しい言語と美しいライブラリでプログラミングしやすくするのがいいわけ 生産性の高い言語を使えばバグが少なくて値段も安いソフトが作れるわけだ それはユーザーに大いにメリットのある話だ
その手の議論は.NET出た頃からさんざんされていただろうという 想像力はないのかね
Windows Formのロードの遅さが要らない誤解を招いているのがドトネトの不幸ではあるね。
>>138 だったらなぜ、.NETで書かれたアプリは極少数なんでしょうか?
そのうち、LightWave、Maya等も.NETで書かれるんでしょうかね?w
こういう「延々ループするのが好きな暇な馬鹿」を囲い込んでおく ホイホイスレが必要かもね。 「ドトネトアプリはなぜ普及しないのか?」って OOPスレみたいにさw
こいつは単に荒らしたいだけなんだからホイホイには行きはしないよ
遅いなんて言われると、.NET信者は目くじら立てるから 注意しましょうhw
hw
既存のソフトをわざわざ.NETに直すメーカーはそういないだろう。 これは.NETに限らず。
まあランタイムもあんま普及してないしなあ
148 :
デフォルトの名無しさん :2007/10/07(日) 16:29:33
すいません、大変恐縮ですが質問よろしいでしょうか。 ファイルの中身が同一かどうかを調べたいです。 実装要件としては、 ・合致しているかどうかわかればいい ・間違ってるとわかったらすぐ比較をやめたい なんですが、 1.比較するためにファイルの中身をバイト型配列に読み込もうとしてますが これをせずに、ファイルの中身を比較できる関数ありますか? 2.バイト型配列に読み込んで比較するとしたら、 0のインデックスからお互い比較していって、 間違えて抜けるというループという方法と どこかの比較関数使った方法は どちらがパフォーマンスが優れていますか? 私は前者のfor文で回して間違ったら抜ける方が全部見ずに 早いのかなと思っておりますが。。。 教えてくださいわかる人!
149 :
148 :2007/10/07(日) 16:31:09
1.が出来るならバイト型配列に読み込まなくてもいいから こっちの方がパフォーマンスいいと思っています。
>>148 > 1.比較するためにファイルの中身をバイト型配列に読み込もうとしてますが
> これをせずに、ファイルの中身を比較できる関数ありますか?
ない
あとC#的に関数じゃなくてクラスとメソッド
> 1.が出来るならバイト型配列に読み込まなくてもいいから
> こっちの方がパフォーマンスいいと思っています。
その関数とやらでも結局内部でファイルの中身をバイト配列に読み込むと思うよ
> 2.バイト型配列に読み込んで比較するとしたら、
> 0のインデックスからお互い比較していって、
> 間違えて抜けるというループという方法と
> どこかの比較関数使った方法は
> どちらがパフォーマンスが優れていますか?
どこかって何だ?
あと同じファイルを何回も比較するならチェックサムを使うとか、
中身よりまずファイルサイズで比較するとか
151 :
148 :2007/10/07(日) 16:43:37
> その関数とやらでも結局内部でファイルの中身をバイト配列に読み込むと思うよ やっぱりそうでしたか。何か特殊なアルゴリズムでもあると思ってました。 > どこかって何だ? 確かに。すんません。何だ? > 中身よりまずファイルサイズで比較するとか ごもっとも! ありがとうございますエライ人!
バイト配列をforループで比較したら遅いだろ せめて4バイトずつとか比較したいところだが
適当な大きさにバッファリングされたファイルストリームを使ってるなら、 1文字ずつ読んで比較してもさほど時間は変わらないと思うけどな。 一度にバイト配列に読み込んでメモリに入りきらないほどのサイズだったらどうするのよ。
154 :
148 :2007/10/07(日) 17:04:42
> 一度にバイト配列に読み込んでメモリに入りきらないほどのサイズだったらどうするのよ。 どうしよう・・・ ってことでFileStream.ReadByte()を使って1バイトずつ 比較して合致しなかったらreturn falseっていう方法が 妥当だと考えましたがいかがでしょうか。
>>154 BinaryReader(new BufferedStream(new FileStream(file, ...)))
156 :
148 :2007/10/07(日) 17:11:59
ちなみに今一度全部バイト型配列にRead()で読み込んで比較する方法と 一バイトずつReadByte()で比較する方法を Stopwatchクラスで計ったら1msしか違いは出ませんでした。 テストしたファイルは9118バイトで(小さいかも)378msです。 というとことは、これでReadByte()でOKかも
なんかすごい低レベルの議論だな。。
>>154 別に一度に配列に全部よまなくても、「適当なサイズ」の配列に読めばいいでしょ。
どのぐらいの大きさが「適当なサイズ」かは判断が難しいところだろうけど。
実際に確認したわけじゃないけど、普通に考えればストリームがいくらバッファリング
されているからといって、配列と同じ効率でアクセスできるとは考えにくいから、
配列に一度読み出すことには意味があると思う。
それに、これも実際に確認したわけじゃないけど、
そんなことより
>>152 の言ってる事の方が恐らく重要。
ファイルアクセスの方が圧倒的に遅くなるのは当たり前田のコンコンチキじゃないか?
>>155 FileStream自体がバッファを持ってるからBufferedStreamはいらないか。
標準で8K、サイズはコンストラクタでも指定できるそうだ。
BinaryReaderは一応使っといて。
ファイル全部読み出す時間に比べたら 比較にかかる時間なんて誤差の範囲 終了
いちいち1バイトずつ比較するよりも数十KB単位でMD5出した方が速いような気がするのは俺だけ? 小さいの(数KB)ならいいかもしれんが。
おまいだけ MD5じゃコリジョンが発生しうる
MD5ったって一バイトずつ見てかないと計算できないだろ・・・
MD5出すなら比較した方が早い
166 :
148 :2007/10/07(日) 19:22:38
148です。 1.5MBのテキストファイルを1バイトずつ計算したら63000msかかり けっこう使い物にならないかも・・・ とにかく早い比較方法はないでしょうか。 MD5?調べてみます。
読み出しだけの時間と比較しなさいよ
1対1の比較ならMD5は不要だけれども 1対多数を比較するならMD5がいいね
1対多でもハッシュは無用 多対多ではすごく有用
てか同じじゃないのを同じと判断する確率が 約1/2^128 あるでしょ
aho
>>166 >1.5MBのテキストファイルを1バイトずつ計算したら63000ms
あり得んよ。一体どんなコード書いたの?
>>172 n回ハッシュ計算するのとn回バイト列の比較するのとどっちが効率いいと思う?
ヒント:メモリの効率
どう有用なのか教えてくれ。 ってか1対多って、ひとつのファイルを、複数のファイルそれぞれと比べてって話でいいんだよな? しかしこういう時すぐにハッシュを出してくるやるはどういう発想なんだ? 多対多とかの話は別だが、単に2つのファイルの比較でもすぐに言い出すやつが出る。
メモリマップしてメモリ比較でいいんじゃねww
>>174 一つのファイルから1回読み込むのとn回読み込むのとどっちが効率いいと思う?
ハッシュ計算するにも結局全バイト舐める必要があんだろ 何にもかわらんと思うが それより、ReadByte()でバイト読みするんなら、せめてBufferedStream() 使うべきじゃね
そのまんまメモリ上に置いても大丈夫なくらい小さいファイルならハッシュ使わなくていいんじゃない
ていうかな、ハッシュだけ残して比較しようとしたら、一バイト目で違っても全部読まなきゃならないんだぞ。 あふぉか?
BufferedStream いらんて話がとうに出とろうがw
183 :
148 :2007/10/07(日) 20:29:00
148っす こんなコードです。 FileStream fs1 = new FileStream(path1, FileMode.Open, FileAccess.Read); FileStream fs2 = new FileStream(path2, FileMode.Open, FileAccess.Read); if(fs1.Length != fs2.Length){ return false; } Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); //How to 1 byte[] bt1 = new byte[fs1.Length]; byte[] bt2 = new byte[fs2.Length]; fs1.Read(bt1, 0, (int)fs1.Length); fs2.Read(bt2, 0, (int)fs2.Length); Console.WriteLine("読み出し完了" + stopWatch.ElapsedMilliseconds.ToString()); for(int i = 0; i< fs1.Length; i++){ if(bt1[i] != bt2[i]){ Console.WriteLine("見っけ"+stopWatch.ElapsedMilliseconds.ToString()); //return false; } } stopWatch.Stop(); Console.WriteLine("How To 1 全部で" + stopWatch.ElapsedMilliseconds.ToString()); stopWatch.Reset(); fs1.Seek(0, SeekOrigin.Begin); fs2.Seek(0, SeekOrigin.Begin);
184 :
148 :2007/10/07(日) 20:29:44
続きっす stopWatch.Start(); //How to 2 for (int i = 0; i < fs1.Length; i++) { if (fs1.ReadByte() != fs2.ReadByte()) { Console.WriteLine("見っけ" + stopWatch.ElapsedMilliseconds.ToString()); //return false; } } stopWatch.Stop(); Console.WriteLine("How To 2 全部で" + stopWatch.ElapsedMilliseconds.ToString()); fs1.Close(); fs2.Close();
185 :
148 :2007/10/07(日) 20:30:16
ちなみにHowTo1の二つのファイルをバイト配列に読み込んだ段階で だしたログが >読み出し完了7ms で7msだったのが意味わからんかったです。つまり実際byte配列には ポインタのようなものだけ与えてるってことでしょうか。 その後は >見っけ57491 >How To 1 全部57493 >見っけ65137 >How To 2 全部65138 って感じですけど、この全部ってのは1が早くなったり2が早くなったり ほぼ同じくらいになったりします。
> ちなみにHowTo1の二つのファイルをバイト配列に読み込んだ段階で > だしたログが > >読み出し完了7ms > で7msだったのが意味わからんかったです。つまり実際byte配列には たぶんキャッシュされてるのを持ってきてる
異なるバイト列から作ったMD5のハッシュが衝突する可能性は無いものと考えていい
見た感じだけだとfs1.Lengthが遅いんじゃないかな
>>184-185 遅いのは毎回ストリームからLengthプロパティを取得してるからだよ。
191 :
148 :2007/10/07(日) 20:46:10
あっ!!! 確かに!! 今Lengthプロパティを変数にいれてfor文回してくるんで ちょっと待っててください!!
もう一荒れする予感
How To 1って
時間かかるような処理をプロパティにしないでもらいたいものだ
だからそんな小手先のことより
>>152 の指摘の方がずっと重要だっつーのにw
CPUがデータバスの本数を増やしてきた歴史を何だと思ってるんだよ
てかバイト配列を一気に比較したりするメソッドって なんかなかったっけ
197 :
148 :2007/10/07(日) 21:00:35
結果です。すいませんでした。 読み出し完了8 見っけ19 How To 1 全部で19 見っけ103 How To 2 全部で103 超早かったです・・・。1.5Mbの5万行のコード比較でした。 ちなみに間違った行は49999行くらいにいれてます。 この速さなら全然要望通りです。 しかもこれだと結局バイト配列に入れた方が結局早いってこと? バイト配列ってどのくらい読み込むことできるんでしょうか。 > How To 1って そこは触れないでください。 > 時間かかるような処理をプロパティにしないでもらいたいものだ この50近いスレ汚しをどう償えばいいでしょうか。
だから最初から要ってるじゃん。
いくらバッファリングされてるといっても配列の効率に敵うはずがないって。
だからそんなことより
>>152 の指摘の方がずっとw
199 :
148 :2007/10/07(日) 21:08:31
>だからそんな小手先のことより
>>152 の指摘の方がずっと重要だっつーのにw
>CPUがデータバスの本数を増やしてきた歴史を何だと思ってるんだよ
それはRead()メソッドのときに4バイトずつ読み込んで
byte配列[4]をuintにシフトして代入して比較するということで
合っていますか?
違います
201 :
148 :2007/10/07(日) 21:13:40
むぅ。ということは >いくらバッファリングされてるといっても配列の効率に敵うはずがないって。 を踏まえると、配列に全部読み込んで そこから4バイトずつでuintに代入して4バイトごと比較する! もしくはUINT64!?
もしかしたらbyte配列の比較も最適化されてるかもしれないし
203 :
148 :2007/10/07(日) 21:20:31
一応プロジェクト-プロパティ-ビルドタブの コードを最適化するチェックボックスを外してたんですが ここは関係ないですか?
バイト配列を作らないで4バイトずつ比較 bool Hikaku(string file1, string file2) { using (FileStream fs1=new FileStream(file1, FileMode.Open)) using (BinaryReader br1=new BinaryReader(fs1)) using (FileStream fs2 = new FileStream(file2, FileMode.Open)) using (BinaryReader br2=new BinaryReader(fs2)) { if (fs1.Length != fs2.Length) return false; long num = fs1.Length / 4; for (long i = 0; i < num; i++) if (br1.ReadUInt32() != br2.ReadUInt32()) return false; num = fs1.Length % 4; for (long i = 0; i < num; i++) if (br1.ReadByte() != br2.ReadByte()) return false; return true; } } 60MBのファイルで2秒ぐらいかかった。 1バイトずつ比較しても速度が同じだったんで最適化される模様。
byte[] から int* で読んでくのがたぶん最速だろうけど
まあReadByteが遅いのは仕方が無い。 バスがどうこうとかいう問題じゃないけどな。 単純に無駄な処理が多すぎるから。 Readで適当なサイズのバッファに読み込んで、 forで同じように比較してもぜんぜん変わるだろう。 ただし4バイトとかだと多分まだ無駄が多いと思う。 どのくらいがいいかはなんともいえんけど、 適当なサイズで試して、大きく改善される範囲で適当にきめたらいいだろう。 数十から数百バイト以上まとめたらもうそんなに変わらんのじゃないかな、わからんけど。
そんなちょっと読むのにBinaryReaderとかかましたら余計遅くなるんで無いの
208 :
204 :2007/10/07(日) 23:56:13
60MBのファイルをバイト配列に読み込んだら一瞬だった。 ただ、メモリ食いすぎるが。 ちなみにStirlingっていうバイナリエディタのバイナリ比較を試したら3秒かかった。
4バイト処理するだけに無駄なことしすぎ。
unsafeで書けよ
>60MBのファイルをバイト配列に読み込んだら一瞬だった。 明らかにキャッシュされてるっての。
どんなディスクだよっ
>>211 バイナリエディタでファイルの末尾だけ弄ってるんだけどそれでもだめ?
だめ。 ってか一瞬てどれくらい?
>>214 同じぐらいサイズの別のファイルで試してみた900_秒ぐらい。
216 :
148 :2007/10/08(月) 00:19:30
148です もう一度Read()でバイト配列の比較と一バイトずつのReadByte()比較を テストしてみたらReadByte()の方が早いという結果が出ました。 50MBのバイナリファイルで 前者が3190ms 後者が2743ms そして204の言うとおりメモリ食いすぎなので、どっちもこれだけ早いなら 超巨大なファイルが来たときのことを考えて、 ReadByte()で1バイトずつ比較した方がいいのかも。 てかWinMergeですら同じ条件で3秒くらいかかるからもういいかなぁ
217 :
204 :2007/10/08(月) 00:22:15
>>216 これで60MBのファイルが600ミリ秒になったよ。
64KBずつ配列に読んで比較。
using (FileStream fs1=new FileStream(file1, FileMode.Open))
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
if (fs1.Length != fs2.Length) return false;
int num = (int)fs1.Length;
byte[] data1 = new byte[num];
byte[] data2 = new byte[num];
int read;
while (true)
{
if (fs1.Position == fs1.Length) return true;
read = fs1.Read(data1, 0, 1024 * 64);
fs2.Read(data2, 0, 1024 * 64);
for (int i = 0; i < read; i++)
if (data1[i] != data2[i])
return false;
}
}
218 :
204 :2007/10/08(月) 00:26:56
あ、new byte[num] は 1024*64 です。
219 :
148 :2007/10/08(月) 00:36:37
>> 218 ありがとうございますっ! それなら最速で4GBファイルとか来ても大丈夫ですね。 それでいきたい思います。 皆様本当にありがとうございました。
System.Array.Equals
どういたしまして がんばってね^^
222 :
148 :2007/10/08(月) 01:02:44
>>217 すいません。20秒かかるのですが、どこか間違ってますか?
int last = (int)fs1.Length;
byte[] data1 = new byte[1024 * 64];
byte[] data2 = new byte[1024 * 64];
int read;
int sumRead = 0;
while (true) {
if (sumRead == last) {
break;
}
read = fs1.Read(data1, 0, 1024 * 64);
sumRead += read;
fs2.Read(data2, 0, 1024 * 64);
for (int i = 0; i < read; i++) {
if (data1[i] != data2[i]) {
fs1.Close();
fs2.Close();
return false;
}
}
}
223 :
148 :2007/10/08(月) 01:05:38
>>217 のコードで
if (fs1.Position == fs1.Length) return true;
は64KBごとに2つプロパティを参照するから20秒かかるかなぁ
と思ってsumReadとlastに変えてみたのですが、
変わりませんでした。
???
キャッシュされてないファイルを読み込んだからじゃない?
>>216 なんでいきなりそんなに変わったんだ?
あ、サイズ大きくしたら逆転したってことか?
>>223 そのコード、break後が不明なんで
勝手にreturn trueを補ったけど早かったよ。
何度やっても遅いのならキャッシュじゃない気がする。
227 :
148 :2007/10/08(月) 01:47:27
>>226 >そのコード、break後が不明なんで
>勝手にreturn trueを補ったけど早かったよ。
break後ファイルCloseしてreturn trueだけなので
変わらないと思います。
何度やっても遅かったからよくわからないです。
すいません、今日はもう限界なので明日またがんばります。
>>225 何ででしょう。結局ReadByte()ってそんなに遅くないって
ことなんでしょうか。
まとめて読むよりは確実に遅いと思うが、 それは無駄な処理が多いからであって、 バッファされないとかそういう極端な差は無い。 結局IOが重過ぎてその程度の無駄な処理は ほとんど影響ないってことかもね。
>>227 ReadByte()も内部ではバッファに一度4KB読み込んでその配列から1バイトずつ返している
だけみたいだから、大して遅くはならないんじゃないか。
むしろRead()の方は結構面倒くさい処理を内部でやっているっぽい。幾つかの例外処理とか
配列のコピー処理とか。
スレチだが、最近のスレ見てて思い出したので質問させてくれ。 パフォーマンス計測してて、 キャッシュをクリアしたいと思ったとき、 OS再起動してるんだ。もしくは、 メモリ量と同じサイズのファイルを読み込む ことでもクリアと同等の意味を持つと思ってる。 もっとお手軽な方法ないのかな?
キャッシュってどれの事?
IO系のキャッシュでそ。
233 :
230 :2007/10/08(月) 03:52:00
たぶんシステムキャッシュだとおもう。 2回目以降のファイル読み込みが早くなるやつだ。 もっと正確にいうなら、 自作アプリのパフォーマンス計測する際に 何度か計測するが、キャッシュが効いてると 1回目と2回目以降の計測はあきらかに条件がこと なってしまう。できるかぎり同じ条件で 計測したいってことなんだが。 良い方法ないだろうか?
ファイルコピーして消せばいいんじゃねえの
キャッシュが利かないときが20秒でキャッシュが利くと1秒以下 1バイト比較でも配列にバッファリングしてもたいした差はでないね〜 こういう配列の比較は for (int i = 0; i<rsize1; i++) if (buf1[i] != buf2[i]) return false; アンセーフ使うと早くはなるのは確認 unsafe { fixed (byte * fp1 = &buf1[0]) fixed (byte * fp2 = &buf2[0]) { byte * p1 = fp1; byte * p2 = fp2; for (int i = 0; i<rsize1; i++) if (*p1++ != *p2++) return false; }} 非同期IOも使ってみたが効果なしだった
結局int*にしたら早くなるの?
メモリクリーナ系のツール実行が一番手っ取り早いんでない?やっぱり。
>>237 早くなる。
ただし末尾が余る(ことがある)ので気をつける必要がある。
240 :
230 :2007/10/08(月) 11:39:34
>>234 いや。すでにあるファイルのリード系という前提で話してるから
それは使えない。
>>236 リンク先の質問と趣旨は違ってるけど、やりたいことは同じなので
ビンゴですね。でもM$の中の人が、
>システム ファイル キャッシュだけを解放するような手段は聞いたことがありません
って書いてるので、正攻法としてはできないっぽいですね(泣
>>238 メモリクリーナー系
いまいち何やってるかわからないので敬遠してたんだ。
いろいろさんきゅー
メモリクリーナは、超大量のメモリを確保することで ほかのメモリを強制的にスワップアウトさせてる。 たぶんシステムキャッシュもクリアされるだろうけどどうかな?
242 :
204 :2007/10/08(月) 15:04:09
4GBのファイルを二つ作ってやってみたよ。
大体一秒で10MB処理できる感じ。
なので
>>217 はキャッシュが効いているみたいだね。
実際に、4GB読み込んだ後に行ったら6秒かかった。
>>222 との差は環境の差なのかもしれない。
うちの環境はSATAIIのHDDに2GBのメモリです。
maxBufSize以下のファイルサイズなら一括読込。それ以上なら分割読込するようにしてみた。
仮に100MBにしてあげると60MBのファイルは2.5秒で終りました。
using (FileStream fs1 = new FileStream(file1, FileMode.Open))
using (FileStream fs2 = new FileStream(file2, FileMode.Open))
{
if (fs1.Length != fs2.Length) return false;
long last = fs1.Length;
int maxBufSize = 好きな数字を入れるだけ;
int bufsize = fs1.Length > maxBufSize ? maxBufSize : (int)fs1.Length;
byte[] data1 = new byte[bufsize];
byte[] data2 = new byte[bufsize];
int read;
long sumRead = 0;
while (true)
{
if (sumRead == last) return true;
read = fs1.Read(data1, 0, bufsize);
sumRead += read;
fs2.Read(data2, 0, bufsize);
for (int i = 0; i < read; i++)
if (data1[i] != data2[i])
return false;
}
}
243 :
148 :2007/10/08(月) 17:06:52
>>242 ありがとうございました。色々試して
自分も50MBのファイルが2.3秒くらいでできました。
これでOKです!
本当に親身になって頂きありがとうございました。
何回もfs1.Lengthを呼ぶなっちゅーに
たしかにlastで補えるな。 まぁ毛の先ほども皮欄だろうが。
byte[]をint*にキャストする話はどうなったんだ
非同期読み込みを使う話もまだ出てきていないよな。
ファイル読み込みにかかる時間に比べたら 比較にかかる時間なんてわずかだから 非同期にしたところでたいした違いはないと思うけどな
非同期をなんか勘違いしてないか? って気がするよな。 そもそも単純なスループットは非同期の方が悪いんじゃなかったかな?
どう考えてもボトルネックは記憶デバイスの読み込み速度なんだから、 どれだけシークを少なくするかにかかってるんじゃね?
I/Oでボトルネックになってるんだったら、非同期でI/Oしながら読んだ部分から処理していくのは正しい処理。
確かにnバイトディスクから読むときの時間とnバイトのコンペアに掛かる時間が イコールの時には効率上がりそうだけど、問題はその効率を最大化するnが 環境によって大きく異なることが予想される上に計算可能性が低い(ない?)ことか?
ディスクから読んでる間CPUはほとんど遊んでいるということを理解しておるかね
あのなー これなら大丈夫だってことで 質問者がOKっていってんだからもういいだろ パフォーマンスは脳内妄想してるだけじゃ あがらないんだから、気になるんだったら 自分でコード書け
257 :
148 :2007/10/08(月) 18:38:38
すいません。大元の質問者の148です。
この比較自体Workerスレッドみたいな感じで呼んでて
その中でさらにI/Oのために別スレッド立てて比較するのって
効率の良い処理になりますか?
意図を汲み取ってなかったらすみません。
あとパフォーマンス的には
>>242 のコードで満足してますが、
>byte[]をint*にキャストする話はどうなったんだ
がとても気になってます。でもこれはさらに上のレスで
>早くなる。
>ただし末尾が余る(ことがある)ので気をつける必要がある。
が引っかかってとりあえず保留にしてました。
>>257 > >ただし末尾が余る(ことがある)ので気をつける必要がある。
> が引っかかってとりあえず保留にしてました。
これが分からないなら手を出すべきじゃないね。文字通りunsafeな世界のわけだし。
いつまで続くの もうそこだけネイティブCで書けよ
261 :
148 :2007/10/08(月) 18:43:19
あ
というか
>>235 で全てを物語ったレスが
IO非同期は効果なしって書いてある。
そして気をつけてbyte[]をint*キャストで
比較していけば最速ってことか
>>253 分かってないなら無理して背伸びしない方がいいよ。
だからCPUを遊ばせないためにIOを非同期にするんでしょ。
「次」を読んでる間に「前」に読んだバイト列のコンペアを行うんだよ。
>>262 なしてそんな分かりきったことをわざわざ言われにゃならんのだ
それは本当に分かってたら253のようには決して書かないからだねw nバイトのコンペアが終了する間に次のバイト列のリードが終わってなかったら? あるいは逆の場合は?
>>264 違うね
読み込みに100秒、比較に1秒かかるとする
順番にやったら101秒かかるが
非同期にやれば100秒ですむ
どっちか早い方の時間になる
>>148 ファイル読み込みだけを考えると、
非同期I/Oつかおうがつかうまいが、
かかる時間は変わらない
非同期I/Oにして自由になった時間を何に使うかが問題
メモリコンペア程度のつまらん処理なら
ファイル読み込み>>>>>>>>>>>>>>>>メモリコンペア
だろうから、非同期I/Oにしたところで効果は薄い
ようは、自由になった時間遊ばせないだけの仕事があるのかということ
仕事が無いのに自由になっても結局遊ぶだけだ
>どっちか早い方の時間になる おいおいマジかよw
理想的にはな
269 :
148 :2007/10/08(月) 19:12:36
非同期IO使ったことのないやつが多いんで言っておくが、ほとんど速くならん。むしろ遅くなるケースが多い。
ディスクへのI./Oはオーバーヘッドでかすぎて非同期は速度体感できないくらいだよ
>>270 にわかには信じられないね。
具体的にどういう理由でそうなるのか説明できる?
スレッド間で同期取るのに掛かるコストが、メモリを比較するのに掛かるコストを上回る。
おいおい「コスト」が掛かるのはIOの方じゃなかったのかよw ネタか釣りか何か知らんが、さっきから意味不明なレスが多すぎないか
同期: IO + 比較 非同期: IO + スレッド同期
スレッド同期はCPUがやるんだから IO中の余ってるCPUパワーでやればいいんじゃねえの
コピペ君って馬鹿だな、まで読んだ。
何度か出てるが、比較があまりにも軽いからほぼ効果は出ない。 非同期IO機能は一般的に同期IOよりスループットは落ちる。 よってCPU処理がある程度負荷が高い場合で無いとむしろ効率は悪化する。 それから、単なるシーケンシャルの読み込みだとOS側のバッファなんかで実質 バックグラウンドで読んでるのと同じになって、さらに非同期の効果は無くなる。
うんだからそんなことな一度に読み出すバイト数nの関数だから 一概には言えないって言ってるでしょ。
なるほど OSって偉いなあ
>>278 このコピペって、あちこちで見るけど、貼ってるやつは常駐してるのか?
おまえらコード書いて比較しろよw
コードを書くのはいいが、I/Oにかかる時間がメモリ上の比較と比べて時間差がありすぎなので、 byte / int 幅の問題は単純にそれだけで比較したほうがいいと思う。 あとファイルI/Oだけに着目すると下記のバッファサイズでも多少変わる。 32k−64kバイトあたりがパフォーマンスがいい感じで1Mとると逆に遅くなった。 new FileStream(file1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, buffer_size)
だべりながらも手を動かさないというこの感じね
おまえらがんばれ! マジがんばれ!
パフォーマンスに関する議論を長くやるコツは 実測せず、煽り気味に想像でレスをする事です
最近は便利なクラスライブラリが沢山あるからちょっとしたアルゴリズムも実装できない 連中ばっかだな・・・
そうやって誰でも簡単にプログラミングできるのがオブジェクト指向の理想なんだろうけど まぁ、困ったもんだよな
ポトペタ環境じゃなきゃ書けない奴とか Makefileも書けない奴とか まぁ、困ったもんだよな
いまさらMakefileかけるかけないで判断されても困るだろ。 はっきりいうが そ ん な も ん は 過 去 の 遺 物 だ
ListViewでForeColorで行全体の文字色を変えているのですが DrawSubItemでサブアイテムに自前の処理を入れると ForeColorで指定した文字色が無効になってしまうようなのですが 行全体の文字色を変えるにはどうしたら良いですか? 最後にe.DrawDefault = true;でデフォルトの処理に放り投げても駄目だした。
C厨こっちにもきてんのかよw
>>289 まず「オブジェクト指向」理解しようぜ
>>291 だよな。
Makefileとか言うくせにcsproj書けないやつが多くて困る。
csprojを手書きしてどうすんの
MSBuild手書きで使うとか強すぎる
>>295 VSの不具合でcsprojの手修正が必要な事もある。
普通に使ってりゃ気にする必要ないんだけどね。
うぜー Console.WriteLine(" ,;f ヽ "); Console.WriteLine(" i: i "); Console.WriteLine(" | | "); Console.WriteLine(" | | ///;ト, "); Console.WriteLine(" | ^ ^ ) ////゙l゙l;"); Console.WriteLine(" (. >ノ(、_, )ヽ、} l .i .! | "); Console.WriteLine(" ,,∧ヽ !-=ニ=- | │ | .| "); Console.WriteLine("/\..\\`ニニ´ !, { .ノ.ノ "); Console.WriteLine("/ \ \ ̄ ̄ ̄../ / .| ");
MSBuildってなんかこう使いにくいんだよね。 antのが分かりやすかった気がする。
>>298 csc -O test1.csと言うだけのために冗長だよなあ
まあXMLだから、スキーマ知ってりゃ適当に自動生成すりゃいいだけなんだが
非同期IOの処理だけど、Readは常時複数リクエストをキューイングしておかないと、
リクエスト毎に平均してディスク半回転分の時間が無駄になる危険が増すので
なるべく多重で発行しておくべきですよ。
特に物理的にも連続して配置されているデータのシーケンシャルな読み出しの場合。
書き込みはどうでもいいけど。
リクエスト1個で前のが終わってから次のリクエストを発行、なんていうのんびりした
発行の仕方だと
>>266 みたいに面倒なだけで意味ないってことにもなりかねない。
だからコード書いて比較したうえでいってんだろうな?
比較のためだけのコードは書いたことないけど、 DVD一枚分とかのISOイメージみたいなもののハッシュを計算するプログラムでは 常にリクエストが空にならないようにしとくのとそうでのないのでは倍くらい速度が変った。 コードが複雑になるのを避けつつ効率化するだけなら、 一度のリクエストで読む量を100Mとかに増やしてもいいわけだけど、 キャンセルボタン押したときの反応に時間かかることがあって却下された・・・
だから実際に書いてから(ry
暇ができたらテストのためのコード書いてもいいけど、別に
>>305 が書いてくれても
いいんじゃない?どうやろうが差がないよ、とか妙な主張したいならさ。
むちゃくちゃだなw
多分比較はLINQのSequenceEqualとか使えばもっと早くなるんだろうな
同期I/O覚えるより、スレッド覚えたほうが 役に立ちそう
常識的に計測しないでパフォーマンスの議論するのは時間の無駄
脳内妄想
そんなことを言いながらも 結局誰一人手を動かさないのであった
すでに相談者は納得して買ってますから。
そういや、
>>308 に関連して、ちょっと 別の話だけど、
LINQ の標準クエリって大半がラムダ式を引数に取るのに、
SequenceEqual とかの比較系だけは、
比較デリゲートじゃなくて IEqualityComparer を取るよね?
デリゲートが匿名で作れるのに対して、
IEqualityComparer は匿名で作れないから使いづらいんだけど。
買ってますからじゃなくて帰ってますからだた
匿名クラスがあったら対応できるのにね。
>>308 の件だがディスクIOなしの16Mのバイト配列で比較したらforを使ったのと変わらなかった。
SequenceEqualは特別なことはやってないもよう。
for (int i=0; i<size; i++) if (b1[i] != b2[i]) return false; return true;
と
return b1.SequenceEqual(b2);
で比較。
DataGriDviewで、multiSelectをtrueにして複数選択を可能にしているのですが、 選択方法を、CTRL+クリック から 普通にクリックして選択・非選択を切り替えれるように 出来ますかね? CellClickイベントで頑張ろうと思ったのですが、うまくいかなくてorz
319 :
デフォルトの名無しさん :2007/10/10(水) 21:29:40
長方形を描画したくてdobonネットさんの
とこからサンプルを見てこのように書いたのですが
描画されないのは何が問題ですか?
public Form1() {
InitializeComponent();
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Black, 1);
g.DrawRectangle(p, 10, 20, 100, 80);
p.Dispose();
g.Dispose();
}
http://dobon.net/vb/dotnet/graphics/drawrectangle.html ここにはこれだけ書けばよさそうな感じですが・・・。
全部問題っていうか君のお頭の問題でしょ。 せっかくdobon氏が丁寧に書いてくれてるんだからちゃんと読めよw CreateGraphicsメソッド使え、なんて書いてあるか? 書いてねえよw しかもコンストラクタで実行ってアホかw まだ存在してもいないキャンバスに絵が描けるわけがないだろ
CreateGraphicsは普通使わない protected override void OnPaint(PaintEventArgs e){ Graphics g = e.Graphics; //ここで描画 //g.Dispose()は不要 base.OnPaint(e); }
base.OnPaint(e)は先にやったほうがよくね?
そうだね 書いてから自分でも思った
商用のWindowsアプリをC#で書いてるって人いる?
ノシ
>>324 C#で書かれたアプリケーションをお金を払ってまでも使いたい人がいると思いますか?
質問スレでむやみに煽らないように
おめ
海外じゃC#で書いたコンポーネントいっぱい出てるけどね
>331 サーバー側はJavaでstrutsあたりだったと思う。 それ用にわざわざLinuxのサーバーを1台動かしてるよ。 クライアント側は一部のツールにC#が使えるようになってるだけで さすがにドングルとかで認証してるんだし全部C#とは思えない… ドングルが必要なので自分は使ってないので実際のアプリがどうなってるかはよくわからんが。
サーバーなんて必要ないが?
C#はフロントエンドに使っているな〜。一番楽で癖のないGUIを作れる。
>>326 商用って何か分かってる?
VBAで書かれたソフトだらけですが何か?
>>335 それがクセだらけ。
ctr-cとか使えない。
釣られないもん
商用:ヨドバシで売ってる 業務用:デスマーチの産物
商用でも.NET製品色々出てるし、.NETだから商用では使えないなんてのは固定観念だろ どんな用途で選ぶかってことだけなんだから
>>333 お舞のいってるサーバー部分が本当だったとして、そんなのC#で楽勝に組めますが( ´Д`)なにか??
MS OfficeもC++製だし、そろそろ騙されていることに気付こう。
VS2005のVC++のエディタの一部は.NETだよ
騙すとか騙されるとかwww
最新のSQLServerがどんだけ頑張って作られたと思ってるのか
頑張ってるかも知れんがあれは糞すぎる・・・
おまえオラクルと比較するんじゃねーよ
何がどう糞なのか、後学のためにちょっと箇条書き的に希望 OracleもSQLServerも使ったことあるけど、DBの規模が小さいせいか糞ともなんとも思わなかったんですが・・
・MS製
Firebird使おうぜ!
352 :
デフォルトの名無しさん :2007/10/13(土) 13:57:50
ListViewのItem追加の中身の文字列について質問です 文字列の先頭にタブ文字があってもこれは 認識されない仕様ですか?
表示されないんならそうなんだろ
354 :
デフォルトの名無しさん :2007/10/13(土) 14:02:16
先頭というか文字列の中にあっても認識されませんでした 表示する方法はないですか?
オーナードローすりゃいいんじゃね
できないんじゃないか?
オーナードローかスペース*4に変換でいいんじゃね
358 :
デフォルトの名無しさん :2007/10/13(土) 15:31:38
表示するだけなのでスペース*4でおkですね! 文字列の中に出た場合の計算がめんどいけど。
二つのTextBoxのスクロール同期をしているのですが、 二つとも仕込みをいれてるから片方動いたら片方も動いてそれにつられて またもとの方にイベントがやってきて連鎖になって困ってます。 何かロックをかけるいい方法はないですかね。
「俺からスクロール開始ね」ってフラグ立てりゃいいじゃん
フラグを落とすタイミングは?
フラグとか前世紀的な発想はどうかね。 2個のTextBoxの動作を調停する'Mediator'を作る方が考え方としてはシンプルだよ。 コードの量は増えるけど。
DataGridView使えば?
もう同期のとこまでつくりこんでるので、一から 書き直しは手痛いっす。 フラグを100msくらいにタイマーで落とせばいいかな。
そんな手痛いほど作りこんでるようには見えないけどw
>>363 でも結局実装はフラグでやるんだろ
アクティブコントロールかどうかみたら? 1.TextBox1スクロール 2.TextBox2がスクロールされる 3.それにつられてTextBox1がスクロールされる ← アクティブならスクロールしない 2の時点でTextBox2がアクティブになったら使えないけどね。
というか同期の基本は比較して違っていたときのみ変更するだと 思うんだがそれではいかんのか
369 :
デフォルトの名無しさん :2007/10/14(日) 08:11:40
>>367 Focusedプロパティではないですよね?
>>368 すみません、それ教えてください。
もしくはそのようなサイトがあれば・・・。
370 :
デフォルトの名無しさん :2007/10/14(日) 08:19:45
【ラヂヲ噴霧】(らぢをふんむ) 街中を歩きながら、「ラヂヲ・・ラヂヲ・・」とつぶやくこと。 誰に話しかけるでもなく、そんなに大きくない声で発声する。 ラヂヲ教を認知させるための手段の一つ。
コピペ君って馬鹿だな、まで読んだ。
コピペ君って馬鹿だ、なまで読んだ。
>>369 タイマ使うんだったら、前の両方の値を覚えといて変化した方に合わせれば簡単なんじゃね
美しくないけど
>367,369 1.TextBox1スクロール 2.TextBox2がスクロールされる 3.それにつられてTextBox1がスクロールされそうだけどスクロール位置が同じだからスクロールしない。
>>374 すみません、その方法は3の時に既にTextBox1がスクロールされてたら
ってことにはならないでしょうか。ならなければいいんですが。
大変申し訳ないですが、今しがたフラグ方式でできたのでこれで
いこうと思います。タイマもつかわずに出来る方法ができました。
今のスクロールポジションをSendMessageする人をMediator?じゃないです
けど、調停する人がいて(というよりもTextBox二つを持つ上のレイヤーの
クラス)
スクロールされたらこの人にコールバックしてもう片方にSendMessage
します。そしてその時に1回だけフラグを立てておいて、送られた方から
コールバックがきてもフラグが立ってるのでこっちはSendMessageせずに
フラグを落とすだけにします。
そもそも1回のSendMessageにつき1回のスクロールイベントが飛ぶのだから
フラグを落とすタイミングはここにすればよかったんですね。
>>361 が言ってたのはこういうことだったのかとわかりました。
本当にありがとうございました。
Graphicsで描画していて、背景が白の中に二つの色付きの矩形があって、その二つの矩形が重なった部分だけ 白くなるようにしたいのですが、どういう処理をすればよいでしょうか? 生のビットマップのデータを操作する以外 の方法でお願いします。
重なった部分に白い矩形を描けや
378 :
デフォルトの名無しさん :2007/10/15(月) 13:26:55
>>377 重なった部分を判定する方が難しくないっすかね・・・
ちなみに描くのは矩形だけではなくて線とかも描きます。
画像のチャンネルいじればいいのかなとか思いますが画像処理の知識がゼロなんで
Rectangle構造体のスタティックメソッドにそんなんがあったかな
380 :
376 :2007/10/15(月) 13:36:08
Intersectですかね。 描くのが矩形だけじゃないので他に方法ないっすか?
Pathとかにあるんじゃねーの しらん
382 :
376 :2007/10/15(月) 13:37:45
あ、あと
>>376 の最後の文は撤回で、生のビットマップのピクセル扱う方法でもいいですw
>>376 >Graphicsで描画していて、背景が白の中に二つの色付きの矩形があって、その二つの矩形が重なった部分だけ
>白くなるようにしたいのですが、どういう処理をすればよいでしょうか?
やりたいこと自体この質問とは全然違うっぽいので、もういちどちゃんと
何がしたいのかを書かないと誰もまともには答えられないぞ。
抽象化できないなら、具体的に何をしようとしてるのか書く。
エスパーすると「C# の Graphics で xor 描画みたいなことはできますか?」
という質問の類のような気がするが・・・・
384 :
376 :2007/10/15(月) 13:46:00
>>383 すんません、要は、白い背景があって、その上に色々な図形を一つの同じ色で描くのですが、それらが
相互に重なった部分だけ白抜きされるようにしたいのです。
半透明で描画して、重なってて色が違うところだけ白抜きするとかでいいんじゃない?
PathでIntersectってなかったっけ?
>>384 Region使えばできるよ。
dobon.netに解説があるから読め。
っていうか、なんで質問する前にこういうwebページで調べたりググったりしないの?
正直理解不能な神経だわ
388 :
デフォルトの名無しさん :2007/10/16(火) 02:19:29
>>387 は怒りながらも回答に加えて参考文献まで挙げてくれる
ナイスガイだけど、最後の2行に引っかかった。
そもそもRegionとかPathとかを知らないようなので、
ググってもなかなか正解にはたどり着けない気がする。
あと、DobonだとRegionの説明は「領域を塗りつぶす」ってタイトルだから
そこに正解があるとは気付きにくい(領域を塗りつぶすってのと重なりの処理が繋がらない)。
>>376 はちゃんと検索してWebページも調べた上でここに来たのかもしれない。
それを確認せずそこまで強く言うことは無いと思うんだ。
まあ、ふらっと行けって言われたらそれまでだけど。
389 :
デフォルトの名無しさん :2007/10/16(火) 08:43:46
>>387 「ググれ」で済むなら、このスレいらん。おまいが出て行け!
おまえ何様のつもりだ?このスレの主にでもなったつもりか?
キモヲタはさっさと市ねよ。
391 :
デフォルトの名無しさん :2007/10/16(火) 08:54:15
ご立派なもんだな、このスレ主様はよw
スレ主ってなに
mixiとの勘違い君ですかw
オマイラ暇ならふらっとの問題も解決してやれよ
レス番号plz
>>393 このスレにもおわす電子妖精。
信仰ポイント集めれば誰かが萌えキャラ化して下々の者にもお姿を
拝見出来るようになる。
398 :
デフォルトの名無しさん :2007/10/16(火) 23:00:08
あ〜ご立派ご立派。ここのスレ主気取りのキ●ガイ様はよう。
スレ主なんかいたんだw
居るわけないだろ
C#以外の話題禁止
ここはC#erの雑談スレですよ
.netのもっさりはみなさんは、どう解決していますか?
もっさり? DBサーバが速いせいか快調だよ C/S業務アプリだけど
405 :
デフォルトの名無しさん :2007/10/17(水) 08:54:06
(1)プラグインインターフェイス.dll (2) (1)のインターフェイスを実装したプラグイン1.dll (3)メインプログラム という構成で (3)から動的に (2)を参照の追加?をして (2)の実装クラスを(1)のインターフェイスに生成する 方法は用意されているのでしょうか?
>>405 インターフェイスは初めから作っておいて、メインとプラグインの両方から参照じゃいかんの?
されてない。 仮にできたとして、そのインスタンスは誰が操作できるのか
>>405 動的にインタフェースを追加して、どうやってそのインターフェースを扱うつもりだ?
ユーザー操作によってReflectionを使ってそのインターフェースを実装したクラスをコントロールするというならいくらでも出来るだろ。
つうかそんなのやろうとしてるぐらいだったらチャラッとサンプルプログラム作ってみなよ。
Assembly asm = Assembly.LoadFrom("Foo.dll"); Type class = asm.GetType("Foo"); IFoo foo = (IFoo) Activator.CreateInstance(class); -- csc /t:library /r:IFoo.dll Foo.cs csc /r:IFoo.dll Hoge.cs
exeとdllが逆だろ exeの方がライブラリで、dllの方をexeにせえよ
412 :
405 :2007/10/17(水) 11:08:21
for文を使って連番のイメージを1秒おきに表示させたいのですが、 Uri uri = new Uri(i.ToString() + ".jpg", UriKind.RelativeOrAbsolute); i++ これにThread.Sleep(1000)を使ってもうまく機能しません 1秒止まった後、一番最後の画像のみ表示されます どうやればうまくいくのでしょうか?
>>413 そりゃスレッドを止めたらだめだろ。
ターマー使え。
>>412 IsAssignableFromのことを言ってるのか?
>>414 タイマーを使ってもうまく動かないのです
どのように書けばよいのでしょうか?
int カウンタ = 0; void タイマー_ティック( ... ) { if( カウンタ < max ){ 画像表示( カウンタ++ ); } else{ タイマー.Enabled = false; } }
>>413 制御構造がおかしいだけだろ。
ソースさらせ。
RichTextBoxにテキストを入れる速度がとても遅い気がするんですけど、 入れ方がTextプロパティに+=で代入してくのはまずいですか? 元テキストが全て改行付きでstring[]配列に入っているんですが AppendText()だと改行が2個ついちゃうのでRichTextBox.Text += str[i] みたいな感じでいれてるんですけど、900行くらいで5秒くらい かかってます。こんなもんですか?それとも他に方法ありますか?
420 :
デフォルトの名無しさん :2007/10/17(水) 21:47:01
そらゃStringの+=は遅いわな
StringBuilderで stringはimmutableなので+=の度に毎回インスタンスが作られます
>>419 StringBuilderを使って一括で代入すれ。
Textプロパティの変更はかなり重い操作。
>そらゃStringの+=は遅いわな 話はもっとややこしいw
質問主です。 さっそくStringBuilderでやってみました。 めちゃくちゃ早いですね・・・・ 勉強になりました。
テキストプロパティーをいじるのが致命的にあかんので stringのローカル変数に+=してけば体感できるぐらいの差は出なかったと思うよ StringBuilderの方が圧倒的に早いけど、 stringの+=を体感できるほど遅くするには結構足し合わせないといけない
427 :
425 :2007/10/17(水) 22:36:19
普通プロパティの値ってそこのスコープで2回以上使う場合 変数に入れたりした方がいいのですか? プロパティにアクセスするとそんなに遅くなるのですか?
内部で色々してたり、GUIの場合再描画したり
テキストボックスのTextに入れたら なんか余計な処理をいろいろやるんだろうね わからんけど 普通は別にプロパティそのまま使えばいい
430 :
425 :2007/10/17(水) 23:00:48
おお 何かプロパティにアクセスするのが悪みたいに思ってました では普通に使っていいけど、ループとかには使うなってことで いいですか?
StringBuilderの方はあらかじめメモリを確保しているから。 その都度メモリを確保して処理するStringよりパフォーマンスは上。
一概にプロパティだからどうという判断はできんよ。 ただ、特にコントロールのプロパティは余計な処理が多いことが多い。
先生、 string a = "1" + "2" + …"100" をStringBuilderにしたら圧倒的に遅くなりました!
100ぐらいじゃ体感できるほど遅くはならんな それを何回もやれば別だが
ああ、まあ冗談だ、言っててみたかっただけw
リテラルの連結なんて朝メシ前ですよ こう見えてCの時代からやってます
>>433 それ右辺がコンパイル時に定数式として結合されるからノーコスト。
string.GetHashCode()って重複する事はないの?
そりゃ重複することはある int値なんだから40億ぐらいの値しか取れないし
桁一つ多いよw
あそっか4億か
ちげえ やっぱ42億じゃん
stringは概念的には40億文字以上あってもいいわけだし
int = String2文字 …たぶん。中には違法なデータがあるかも。
一文字65536種類として二文字の各組み合わせですべて埋まるな
三文字あればどれかと重複するな
さぁ、みんなでハッシュが衝突する文字列ペアを探そうじゃないか
そんなこといったらMD5だってデータが16バイト以上ならどれかと重複するわけだし
public int GetHashCode() { fixed (char* str = ((char*) this)) { char* chPtr = str; int num = 0x15051505; int num2 = num; int* numPtr = (int*) chPtr; for (int i = this.Length; i > 0; i -= 4) { num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0]; if (i <= 2) { break; } num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1]; numPtr += 2; } return (num + (num2 * 0x5d588b65)); } }
フォーム配下に、関数を定義して private void ChangeYourNameEvent(string s) { this.Text = s; } オートメーションのイベントに、登録し AppOjt.OnChange += this.ChangeYourNameEvent; イベントが発生すると、上の関数が呼ばれるのですが this.Text = s で例外が発生します (MessageBox.show(s) ならOK) どうも、呼び出された時には this が失われている様子なのですが フォーム等のパーツへ反映させる方法って、あります???
例外のメッセージは?
>>453 --------
有効ではないスレッド間の操作:
コントロールが作成されたスレッド以外のスレッドからコントロール 'Form1' がアクセスされました。
--------
でした
関数の定義に問題があるのでしょうか???
Synchronize 辺りを調べ中です
別のスレッドからだとアクセスできないから form.Invokeを使ってformのスレッドに動かしてもらう必要がある っていう話だと思うけどよく知らん
それでいいよ
ありがとうございます なるほど this.InvokeRequired をチェックして、Invoke を使えということらしい 試してみます
459 :
458 :2007/10/18(木) 22:51:36
すみません。追記です。 後半の >今度は、Flash上のコントロールが、操作できません。 ですが、キーボードのtabを押すと移動が出来て、エンターキーでボタンを押す事が出来ます。 何となくマウスイベントが伝わってないような雰囲気なのです。
Flashの外側をクリックするとその直後だけクリックできるんだよね
System.Windows.Forms.WebBrowserはいろいろ問題がありすぎるので AxWebBrowser使わざるを得ない場合が多い
Formのルールにあわせるために入力系をごにょごにょしてて 実装が中途半端な感じになっている。まぁバグみたいなもの
「ごにょごにょ」言って誤魔化しるのは自分もじゃないかw
あほかつまらんな。
というか、ごにょごにょだの幸せになれるだの 特定の人格傾向の持ち主(まあ要するにヲタなんだと思うけど)しか使わない 言葉をよく平気で使えるよね。
ごにょごにょ、幸せになれる ってオタ用語だったの?
ということにしたい人がいるらしい。
オブジェクトをサーバ・クライアント間でやりとりするプログラム書いてて, 困ったことが起きたので相談に乗ってもらえないでしょうか. サーバ側:TcpListnerで待ちうけ クライアント側:TcpClientでサーバへ接続 どちらも:TcpClientからNetworkStream取得してBinaryFormatterかまして通信 なぜかクライアント側だけCPU負荷が50%まであがるんです. CPUはCore2Duoで,タスクマネージャで見ると両方とも50%あたりをうろうろしてるという・・・ サーバ側,クライアント側,ともに受信の無限ループのスレッドで組んでるんですが, デシリアライズのときにStreamから情報がくるまではループはとまってます. 原因として考えられることがあったら教えていただけるとありがたいです.
無限ループのスレッドで組んでるから。
>469 ビジーループになってるから適当にThread.Sleep入れとけ。
472 :
458 :2007/10/19(金) 01:54:47
まず、HTTPサーバー上にアップロードしたFlashが埋め込まれたhtmlファイルですが AxWebBrowserを使う事で、どういうわけかわかりませんがボタンのクリック含めて解決しました。 どうもありがとうございました。 ただ、ローカルに保存されている場合、やはり表示がされません。真っ白の画面です。 セキュリティー設定が原因だと思い とりあえず、IInternetSecurityManagerを実装し、ProcessUrlAction()が呼び出された時 全てにreturn COM.URLPOLICY_ALLOW;を返してみましたが、やはりダメでした。 一体何が原因なのでしょうか・・・。 引き続きよろしくお願いします。
474 :
デフォルトの名無しさん :2007/10/19(金) 05:05:03
昨日学校の方で課題を2問出されたんですが何方か分かる方いらっしゃいますか? プロジェクト名:kadai01 フォーム名:FrmCount 処理の内容: 結果 1.実行直後 初期画面が表示される 2.(性別入力)ボタンクリック (性別が選択されません)と表示される 3.性別(男性)を選択する 4.(性別入力)ボタンを2回クリック 1回目のクリックで(集計結果表示)ボタンが有効になる 5.性別(女性)を選択する 6.(性別入力)ボタンを3回クリック 7.(集計結果表示)ボタンクリック 男性2人 女性3人 と表示される (性別入力)ボタンと(集計結果表示)ボタンが無効になる 8.3〜7の処理を実行 7の結果が表示される 9.(終了確認)のメッセージで フォームを閉じる (はい)ボタンクリック 使用するコントロール、クラス、構文 1.RadioButtonコントロール 2.private 変数 テスト
居ます。
476 :
474 :2007/10/19(金) 05:14:44
プロシージャ名 処理内容 FrmCount_Load (集計結果表示)ボタンを使用不可になる 性別入力ボタン_Click 性別選択用ラジオボタン(男、女)が未選択の場合は、エラーメッセージを表示する 性別選択用ラジオボタンが未選択でない場合は、(集計結果表示)ボタンを使用可にする 性別を判断して、人数をカウントする(mintMan,mintWoman) 集計結果表示ボタン_Click 男性、女性の人数を表示する (性別入力)、(集計結果表示)ボタンを使用不可にする 集計結果リセットボタン_Click フォームの格コントロールを初期状態にする 人数をカウントする変数を0クリアする 終了ボタン_Click フォームを閉じる
>>463 ヒント:「まだ」WinFormsソースは公開されていない>お察しください
単純に説明長くなる
そう言えばソース公開されるらしいね WinFormもWPFも
Reflectorで見れるのに
480 :
デフォルトの名無しさん :2007/10/19(金) 09:59:19
>>476 プロシージャってVBではないのですか?
ふらっとで質問した人?
華麗なスルーっぷりに和露他
>>479 デバッガが中に入れるようにするってのがポイント
483 :
デフォルトの名無しさん :2007/10/19(金) 11:55:51
MySQL Connector/Net で開発してlinuxのmonoで動かそうとしても動きますかね?
>>470 ,471
バイナリフォーマッタのデシリアライズでスレッドは止まっています.
だからループにSleepしても解決しませんでした.
ソースコードはこんな感じ
NetworkStream ns = tcpClient.Getstream();
threadClient = new Thread(delegate(){
while(true){
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ns); ←ループはここで止まってます.
}
});
threadClient.Start();
なんでここで止まってるのにCPU負荷が上がるのか不思議です.
485 :
484 :2007/10/19(金) 14:10:37
自己解決しました・・・ 受信スレッドじゃない別のスレッドで無限ループが発生してた・・・('A`) どうもすみません.お騒がせしました.
486 :
デフォルトの名無しさん :2007/10/19(金) 14:22:51
アメーバみたいなブヨブヨした固体が、自由自在に変形して 移動するようなのを作りたい。 どう変形するかは事前に予測できませんので、 画像ファイルを何枚も用意してアニメみたいに・・・ ってやり方は不可です。 どうやるといいですかね? 普通にDrawLineとかで描画を繰り返すと若干チラチラしますね。 なにかスムーズに表現する方法知りませんか?
487 :
486 :2007/10/19(金) 14:24:57
補足しますが、アメーバはリアルでなくてかまいません。 とりあえず輪郭線くらいで十分です。
ダブルバッファリング
490 :
デフォルトの名無しさん :2007/10/19(金) 19:02:31
プロジェクトの全フォームの配色や、最大化・最小化のボタンを一気に変更する方法ってありますか?
>>490 そういう質問はどういう回答を期待して言ってるの?
何か一発呼び出せば済む便利なメソッドが用意されてるはず、とでも思って
聞いてるわけ?
俺様が欲しいと思った処理なんだからライブラリの作者がきっと用意してくれてるに違いない、
っていう発想はセカイ系の発想そのものだな。
最近、プログラ民具が面白くない やっぱ、FPGAで画像圧縮プログラムをハードでやると面白いよ
>>490 VisualStudio のスレで聞いてみたら?
バッチでもマクロでも使って *.Designer.csを書き換えたらいいんじゃね
495 :
デフォルトの名無しさん :2007/10/19(金) 22:25:44
バイナリSJISファイルに6バイトで下記のようなデータが入っています。 0x0007, 0x0007, 0x0006, 0x0007, 0x0056, 0x0009 中身は日時情報みたいなのですが、どのようにしたら読み込めるのですか?
バイナリSJISファイルの事はしらないけど、 2バイトづつBinaryReaderとかで読んでいけばいいんじゃね
ただの二進化十進数のようにも見えるが
>>497 byte[] read = br.ReadBytes(2);
として、その後が分かりません。
Encoding.GetEncoding(932).GetString(read)やってもダメですよね。検討違い?
なんでSJISだと思ったの? 雲をつかむような話だね
手がかりなさ杉
2007/07/06 07:56:09 だよなあ……
なんで6バイトなのに12バイトっぽい書き方するの?
504 :
496 :2007/10/20(土) 01:24:58
すいません。日時でなく、多分HHmmssじゃないかなと・・・。 会社でチラッと仕様書見ただけなので、またよく調べてみます。 テキストエディタ開くとSJISと出てたので信じてました。 すいません一旦中止して調べてから出直してきます。
ファイルに書き込むとき FileMode.Truncate すると開いた時点でサイズが0になるけど、 その時点でアプリケーションが異常終了したら内容が消えちゃいますよね? このサイズ0の期間をなくす方法ってありますか? 例えば別ファイルに書き出してそれを対象ファイルへとリネームするとか……
ん?よく分からないのだけれどもどっち? 1.異常終了したら0バイトのファイルを削除したい 2.異常終了した場合でもその途中までを出力したい
送受信が別スレッドで動作するなら何の問題もありません。
そもそも受信側はListner使って常にポート監視してるのでずっと動いている
510 :
507 :2007/10/20(土) 03:18:48
送信でのストリームへ書き込みと受信でのストリームからの読み込みが同時に発生しても競合とか起こらないんですか?
競合って何の事言ってる?
そんなのポートが同じならデータが混在するだろ
513 :
507 :2007/10/20(土) 03:28:56
>>511 受信データと送信データが同じストリーム使うのにlockとかいらないのかなと
>>512 受信は指定したポートから入ってくるんですが送信は勝手なポートから出てってます
まず、同じストリームは使わない。IPEndPointが違うならデータは区別される。おやすみ。
515 :
507 :2007/10/20(土) 03:42:55
>>507 のソースコード例だと
// クライアントがサーバとのデータのやりとりに使うストリームを取得
NetworkStream ns = client.GetStream();
clientReader = new StreamReader(ns, Encoding.UTF8);
clientWriter = new StreamWriter(ns, Encoding.UTF8);
となっててリードもライトも同じストリーム使ってる感じなのですが・・・
>>514 おやすみなさい
516 :
505 :2007/10/20(土) 10:59:47
>>506 「書き込みが全て完了するその時点まで、書き込み前の内容を保持したい」
ちょうど SQL の COMMIT みたいな感じで
いったん別ファイルに書き出し 元ファイルリネーム 新ファイルリネーム 元ファイル削除
リネームした瞬間がアウトだぜわひゃひゃ
519 :
505 :2007/10/20(土) 12:58:20
結局、書き換える直前にバックアップとっておくことにしました。 お騒がせしてすみません。
DBみたいにメタファイルに更新を記録しておくとか
>>518 再起動時にどのファイルが残ってるか確認してリカバリすればいいだけ
>>516 最新OSのみ対応ってことにしてP/InvokeでTransactional NTFS使う。
じゃMemoryStreamに書き出して保持しとけ。 もしくはFlushメソッドで途中まで書き出すとか
524 :
デフォルトの名無しさん :2007/10/20(土) 18:23:13
もう解決したって本人が言ってるだろ。しつこいな。
ここは本人が解決したら議論しちゃ駄目なスレになりました。
ファイル比較で引っ張りまくったのはどの住人だよwww
コントロールの描画を一時停止するようなメソッドありますか? ちらつきを抑えたくて。
>>527 この辺調べてみて
SuspendLayout
DoubleBuffered
529 :
527 :2007/10/20(土) 22:56:15
ちらつきの処理というのが RichTextBox内の数行を選択して、文字の背景色を変えて 元のSelectionStartに戻ってくる というものです。 ダブルバッファで回避とはまた違うと思うのですが。
WM_SETREDRAW
531 :
527 :2007/10/20(土) 23:00:25
>>528 ありがとうございます。行き違いで書き込んでました。
SuspendLayoutとResumeLayoutはやってみたのですが、うまく
いかなかったです。
529で書いた処理で、行が多ければ多いほど一度選択による
反転がちらついてしまうように思います。
最初っから詳細に質問したほうがいいよ
533 :
527 :2007/10/20(土) 23:11:27
今のところ無駄な抵抗として VisibleでOffして処理してOn しています。選択文字一瞬反転のちらつきよりはましです。
530無視かよ!
>>527 にコミニケーションの能力が欠如してるのはわかった。
ソースをアップしろ。そのほうが早いぞ。
536 :
527 :2007/10/20(土) 23:23:04
あっすみません! WM_SETREDRAW を調べ中でした! ソースは長いっす・・・。短縮できたらUPします。
ソースなぞいらん 時間の無駄だ
538 :
527 :2007/10/20(土) 23:28:59
>ソースなぞいらん 時間の無駄だ はい。では、WM_SETREDRAWでやってみます。 ありがとうございました。
ファイルの書き込みについて教えてください。 System.IO.StreamWriterのWriteメソッドでファイルに書き込んでいますが Discに確実に書き込まれたことを確認するにはどんな方法がありますか?
あとで開いて読んでみる。
>>539 最初にFileOption.WriteThroughを指定して開き、適宜Flush()を呼べばいいと思う
「確認」にはならんが
>>540 他のプロセスに上書きされたり消されているかもしれんな
AutoFlush 使えば Flush しなくても書き込んでくれるぜ 「確認」にはならんが
ちょっと脱線するけど、StreamWriter.Writeとかって、たとえば書き込んでる対象の物理ディスクが 物理的にアクセス不能(ネットワークケーブルが切断されたとか、USBケーブルが抜かれたとかいう場合ね) になった後で実行しても何の例外も投げない気がしたけど、これってどの階層の仕様と考えるべき? StreamWriter自身? .NET Framework? Windows ?
本当かどうかは知らんけど .NetFrameworkかな
Ctrl + Zのイベントを拾いたいんですけど 何で次のコードでひっかからないんでしょうか。 if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Z) { Console.WriteLine("Ctrl+Z"); } この方法でCtrlがAlt、ZがDownとかだとうまくいくんですが・・・。
普通にいけるが
あれ?Z以外のDとかRとかだと拾います。。。 ってことは先にどこかに拾われてるってことか?
本当かどうかは知らんけど Windowsじゃね?
わかりました。 MDIのShortCutKeyのプロパティで封じていたようです。 こんなことに・・・2時間も・・・
>>551 これが悪名高い(?)遅延書き込みの効果なのかなとも思ったんだが、
またそれとは違うのかな。
>>552 Delphiでは例外発生した記憶があるような気もしない訳でもない予感
ライトスルーするとパフォーマンスがえぐいことになるぞ。
原因がまったくわかりません。。。 アプリの設定情報を保存するのに、MDIなのですが、Formを閉じるイベントで 保存する仕込みをいれてて、子Formを作成しないときは保存できるのですが 子Formを作成すると、保存ができません。 INIファイルで保存していて、WritePrivateProfileStringを使っています。 このような経験された方いらっしゃいますでしょうか。 わかってもらうための詳細もどこを手がかりがなさすぎて 何を書いたらいいかわかりません。すみません。 「あれはちゃんと処理してる?」みたいに聞かれれば それに対して答えます。 C#の神様助けて!
無理w
MDIの閉じるは変な処理するんだよな よく覚えてないけど
まずはなんで設定ファイルではなくわざわざINIを使うのか聞こうか
>>558 はい。そもそもexeファイルと同じディレクトリに設定情報を
保存するのってXMLファイルでシリアライズするのが推奨ですか?
そんな記事をネットで見て、XMLで保存しようと思って、
dobonさんのXMLで保存をしようとしてました。
ところが、ここでFormを閉じるイベントでXML保存の仕込みを入れてた
けど、保存できてないことがわかりました。
6時間くらい格闘の末、INIファイルで断念しようとしたら
INIファイルでも保存できなくて、ここに来たという経緯です。
>>557 ちなみに閉じるイベントでなくて、子Form開いた後に保存自体が
だめだったようです。
まったくわからんです。
あらゆる階層でキャッシュされてる可能性はあるが、 いずれにしてもOSはやってる。 アプリから見ると、OSが管理してるキャッシュにアクセス して終わりってことね。 アプリ ↓↑ ↓↑アプリはこのレベルで成功失敗程度しかわからん。 ↓↑ キャッシュ(OS管理) ↓↑ ↓↑いつ読んだり書いたりするかはOS次第 ↓↑ 物理ディスク ちなみに、同期/非同期書きこみとか言ってるは アプリがキャッシュへの書きこみを待つか?待たないか? の話です。物理ディスクとデータレベルで同期している という意味ではない。
561 :
559 :2007/10/22(月) 16:48:45
訂正)dobonさんのサイトを参考にXMLで保存をしようとしました。
閉じるイベントがどういう順番で起こってるかしっかり調べれば多分答えが出ると思うよ
563 :
559 :2007/10/22(月) 17:15:56
どこから保存できないかわかりました。 子Formの中でShowDialogを呼び出した後です。 何で???
564 :
559 :2007/10/22(月) 17:34:06
OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.ShowDialog() の後には全く保存できなくなります。
それは原因じゃなかろう
おまえカレントディレクトリに保存してるだろ…
まず切り分けよう
保存ルーチンが呼ばれてるのか、
呼ばれてるのに書き込みに失敗してるのか。
>>566 の言うようなことかも知れんし
ブレークポイントでもメッセージボックスでも仕込んで
書き込みパスを表示してみそ
568 :
559 :2007/10/22(月) 17:45:42
さらに原因を追究したら
openFileDialog.ShowDialog()のDialogResultがOKだと保存できなくて
キャンセルだと保存できます。
こんな感じ
openFileDialog.ShowDialog(this)
config.SaveConfig(); //自分で作った保存関数
>>566 exeファイルのディレクトリに保存しちゃだめなんですか!?
OpenFileDialogを呼び出すとカレントディレクトリがその場所に変わる
570 :
559 :2007/10/22(月) 17:48:46
569!!! えーーーーーーー!!!??? ちょっと待っててください!確認してきます!
571 :
559 :2007/10/22(月) 17:50:55
うわわわわわわ・・・まじだー 569すげー! そのカレントに保存してたファイルがありました! これは参りました・・・
なぜ気づかんのだ・・・
574 :
559 :2007/10/22(月) 17:53:17
いやほんとwww 今までさんざんそのopenFileDialog開いているのに そこに保存してたファイルがこっちみて笑ってるのに 何故きづかんのだ・・・ 今自分で情けなさなさすぎて、笑ってます。。。
575 :
559 :2007/10/22(月) 17:55:15
ちなみにexeがある絶対パスを知る方法なんて 知ってたら教えてもらいたいです。 そんなことは自分で調べろですけど。 いや、ほんと今日はこれでまいったんで・・・
Application.ExecutePathみたいな感じのものだった気がする
WinFromアプリケーションを作っているときに、参照に追加したバイナリのアセンブリは、 DLLとしてEXEから読み込まれることになりますが、このDLLを内包した1つのバイナリのEXE としてビルドすることは不可能なのでしょうか? 例えば、MSのEnterprise Libraryの以下のアセンブリですが、ソースコードも全て公開されています。 Microsoft.Practices.EnterpriseLibrary.Logging.dll ソースコードレベルで取り込めば、1つの大きなEXEに出来ますが、 アセンブリレベルで取り込んで、1つのEXEにすることは可能でしょうか?
578 :
559 :2007/10/22(月) 18:05:46
ありがとーございます!もろもろこの御恩は忘れません。 誰もが通る道であって欲しいです。 あともう1点いいですか? 先に述べました、保存ファイルなんですが、 .NetだったらINIファイルよりXMLファイルで設定情報を 保存した方がよいですか? 「でもそんなの関係ない」ですか?
>>578 俺ならObjectそのまま保存
用途によってはXML
INIファイルはなんか怪しい システムの復元で戻されたり
>>578 .net で exe と同じ場所にファイルを作成するなんていう(行儀の悪い)仕様なんだから、
いまさらそんな細かいとこなんかどうでもいいと思う。
582 :
559 :2007/10/22(月) 18:14:21
行儀の悪いのは承知の上っす! ありがとございました!
拡張子を.iniにさえしなければ何でもいいと思う
exeと同じ場所に保存するのが行儀悪いって流れになってるけど、 かといってMS様が推奨するように(あたかもユーザーから隠蔽するような) 暗号みたいなわけのわからん名前の、かつアプリ自体をアンインストールしても消えないような ディレクトリに設定ファイル作るのが本当に「行儀が良い」ことなんかねえ。。 なんか素直に同意できかねるものがあるけど
exeと同じ場所以外に作るという選択肢は俺にはないな
同じ場所の方がわかりやすいけどC#はどうだかね
ユーザが書き込み可能なディレクトリに置かなきゃ設定すら保存できないアプリなんて作らないほうがいいよ。
使う側の事を考えられればどちらがいいかなんてすぐ判る オナニーアプリなんて誰も使わない
入出力をちょっといじれば、固有のパスへ保存できるよ。
レジストリに書けよ
アセンブリ書き換え
システムカラーの一覧を作りたいのですが、Color.???でそういうのってありますでしょうか?
SystemColors
ちわー ふらっとから北んだけど オナニーアプリってWPFで作ったアプリのこと? WPFのWEB側っていい感じに見えるけど…
ふらっと池
VC++6のクラスビユーではフォルダを作成することができたんですが、 VC#2005ではできないのですか?
>>572 FileDialog.RestoreDirectoryプロパティをtrueにするのでは解決できない?
>>597 気が付かなかったd
でもInitialDirectory指定してたら駄目そう・・・
ならラップして表示の前後でカレント変えないお行儀のよい(いや気の利かない) ファイルダイアログを書けばいいじゃん。 それ以前にDOSアプリじゃあるまいしカレントディレクトリなんて概念そのものを 使うのはどうなの
ドローツールを作りたいんですが、次のようなフローを考えてます 折れ線を描画する場合 1 折れ線ツールを選択 2 マウスで左クリックした場所を配列に取り込み、ピクチャーボックスに点を描く 3 次にマウスで左クリックした場所を配列に取り込み、ピクチャーボックスに点を描く 4 (以下同様に点を描画) 5 マウス右クリックで折れ線ツールから抜け出る この折れ線を移動する場合 1 移動ツールを選択 2 マウスで左クリックした場所に折れ線が描かれているかどうかを、マウスの位置と、配列(上記2〜4の配列)に書かれた位置で判断 3 マウスをドラッグした先に折れ線を移動し、元の位置の折れ線を削除 3A マウスで左クリックした場所に折れ線の先端があれば、マウスでドラッグした先に先端を移動して、折れ線を描き直す こんなフローでよろしいんでしょうか? もっとスマートなやり方があればご教示くださいm(__)m
何故か600の内容が理解出来ないという不思議。なんでなんだろ。 なぜか、頭の中で理解できない。 えぇっと、MFCの頃はScribeというまんまドローツールのMSのサンプルコードがあったんだけれど、 C#版は無いのだろうか? CodeProjectというサイトへ行ってドローツールで検索すれば、外人の作った素晴らしいソースが 見つかるのでは無いでしょうか?
System.Windows.Forms.WebBrowserのDocumentCompleteを使って、 IEコンポーネントで取得したページをパースしたいのですが、 最近の複雑な入れ子のWebサイトのHTMLでは、1つのURLから取得したHTMLで、 DownloadCompleteやDocumentCompletedイベントが複数発生してしまいます。 ということで、DocumentCompletedが最後のものであるか調べる方法はあるでしょうか? DownloadCompleteはダウンロードが完了した時点、DocumentCompletedはパースの準備が 完了した時点で起こるようです。 人間が見る分には、ページの読込が終わったか判断なんて必要ないと思うのですが・・・。
>>601 ありがとうございます! 早速探してきます
604 :
602 :2007/10/23(火) 10:25:42
ごめんなさい、結構、メジャーな問題だったようです。 ググったら、色々出てきました。 URLが取得できているかでチェックするか、 フレームの数を自分で数えてチェックするか等のようです。 フレームの数 = DocumentCompletedの数かどうかは不明だと思うのですが・・・。 調べてみます。
605 :
602 :2007/10/23(火) 11:29:24
DocumentCompletedの回数が何に基づくのかは不明ですが、ReadyStateがCompleteになるのは 最後のDocumentCompletedのみでした。 ということで、ReadyStateで判断すればOK。
>>601 Silverlight1.1alphaSDKのサンプルにC#版Scribblerがある
たぶん SS と ß が一致してほしいからじゃね?
質問というより愚痴になっちゃうけど、TableLayoutPanelって 激烈にもっさりだね・・・。 8行×2列程度のものを数個貼り付けただけで、なんか20年前の SX-Windowsかと思うようなパラパラマンガみたいな描画をしやがる。 実行時にはサイズ固定でかまわないから何か描画を早くするテクニックはないかなあ。
>>609 俺も昔同じようなこと書いたら、コントロールの数だけウィンドウがあるのと同じだから遅くて当たり前と回答があった。
結局ボタン以外自前で描画した。
無駄なことにリソースを割いていたと実感できました。
いやコントロールの数の問題じゃないでしょ。 同じ数のコントロールをベタにフォームに置いてもあんなに遅くならないから。 明らかにTableLayoutPanelそのものに問題がありそう
>>611 普通に数の問題だと思うけどな。
WM_PAINTの優先順位は低いので同時に大量のメッセージが送られてきたら
延々と描画が後回しにされるし。
とりあえず描画が遅いのか再描画が遅延してるのかどっちかぐらいは確かめてみたら?
Spy++なりなんなり適当に使えば分かるかと。
.NETってMFCよりメリットありますか?
MFCみたいな糞ライブラリよりははるかに生産性が高いよ
CやC++やMFCに挫折した方の意見は参考にならないので控えてください
C++みたいな糞言語より生産性高いよ
MFCはうんこすぎるのでATL(WTL)で
619 :
デフォルトの名無しさん :2007/10/23(火) 22:36:05
人間やめますか?それともMFC辞めますか? Microsoft さえ見放した禁断のライブラリ・MFC。 かつて人類はMFCの登場で、クソ汚い Windows API から開放されると信じた。 信じて戦った。 戦って負けた。 MFCに人生をかけて、敗北⇒廃人同様になった者は、 南京大虐殺30万人を裕に超えるものと推定される。 「DLL HELL」なる言葉を知っているだろうか? 直訳すれば「DLL地獄」。DLLとHELLの語感が似通っている事から生まれたのだが この「DLL」とはMFCを指す。そう、DLL HELLとはMFCの事を指すのだ。 バグだらけ⇒バグ回避のコードでプログラミング⇒バグの直った別バージョンのMFC配布⇒既存ソフトが動かない これを延々に繰り返す。 子々孫々、末代までも、輪廻転生しても、たとえ犬畜生に生まれ変わっても DLL地獄=MFC地獄の呪縛からは逃れなれない。 人間やめますか?それともMFC辞めますか?
コピペ君って馬鹿だな、まで読んだ。
しかし、現状の大半のパッケージソフトはMFCで書かれている 逆に.NETで書かれているのものでお金を取れるものは極少数 この結果はどう見る?
MFCで書かれている?
有償ソフト ⊃ パッケージソフト というか、何度も同じ話題をループして楽しいの? そういうお馬鹿さんはOOPスレに行くといいと思うよ
624 :
デフォルトの名無しさん :2007/10/23(火) 22:47:59
>>621 そんなの簡単に論破できる。
CString クラスみたいな、”ウインドウ・フレームワーク”以外の基本的なのしか使っていない。
あとは「::」で始まるAPIしか使っとらん。
そもそもMFC使ってないんじゃないか
また来たか・・・なんでココまで必死になれるのか疑問だな
627 :
デフォルトの名無しさん :2007/10/23(火) 22:58:06
ネイティブコードを書けるC++万歳。
定期的に変なのが沸くな
629 :
デフォルトの名無しさん :2007/10/24(水) 00:01:58
「変な言語」には、「変なの」が集う。これ常識。
起動が遅いから凄いUIを期待してた・・・
.NETは本当に惜しいよ あれで、ネイティブ吐けるならWinのビジネスアプリではC++の出る幕はなくなったんだけどな
632 :
デフォルトの名無しさん :2007/10/24(水) 00:12:37
しょせんインタープリタ。それ以上でもそれ以下でも無い。
UI、というかWindows Formの起動の遅さは、たとえネイティブコンパイラが出ても ほとんど変わらないと思うけどね。
そんな遅い遅い言うほど遅くないわな Microsoft Officeの何十倍か早かろう
1バイトで表現できる値を出力する際は下記のような感じでOKですか? Console.WriteLine(Convert.ToInt16(br.ReadByte())) ;
なんでInt16?
>>636 ・・・。突っ込まれると分かりません。
2バイトの場合はInt16ですよね、1バイトの場合は??ご教示ください!!!!!!!!
一バイトはbyteだろ だから何もせずそのままやりゃいいんじゃねえの 違ったっけ
すいません、そのままと言うのが分からないのです。 1バイトだと255まで表現できると思いますが、byteから何に変換すべきでしょうか? ASCII文字列の場合・・・Encoding.ASCII.GetString(br.ReadByte(2)); 2バイト数値の場合・・・BitConverter.ToInt16(br.ReadByte(2),0); で変換してもますが問題ないでしょうか?
BinaryReader.ReadByteに引数あったっけ 2バイト取りたいならbr.ReadInt16じゃないの?
>BinaryReader.ReadByteに引数あったっけ すいませんBinaryReader.ReadBytes(2)です。 >2バイト取りたいならbr.ReadInt16じゃないの? 2バイトの場合はこれでOKです。 問題は1バイトの場合=BinaryReader.ReadByte()の場合です。 1バイトの情報を取得するにはどのようにすればよいのでしょうか? Booleanではなく値を取得したいのですが
ReadByte() これが一バイトの取得じゃないとしたらなんなのか知りたい あるいはReadSByte()
いったい何を言ってるのかわからん…
インタープリタ…
Byteという型があるのを知らないとか
646 :
デフォルトの名無しさん :2007/10/24(水) 14:41:18
意地悪せずに教えてやれよ。 Console.WriteLine(br.ReadByte());
教えちょる
648 :
デフォルトの名無しさん :2007/10/24(水) 16:12:49
グレースケール用のJPEGのライブラリ教えてください
libjpeg
GDI+でいいじゃん
GDI+じゃロードはともかくセーブはサポートしとらんね。 WPFに移行するとか。
WPFだとグレイスケールJPEGの保存が出来るのか。 ちょっと使いたいかも・・
GDI+なんて遅くて、全く実用性がないだろ
ListViewItemの内容をシリアル化したいのですが、MSDN見るとListViewItemCollectionはシリアル化 できないようですが、何か方法ありますか?
GDI+なんだが、その上にフレームワークつけてほとんど気合で描画をするようにしたら複雑な画面でもまともな実用速度になった。 お舞らも適当に(,,゚Д゚) ガンガレ!
byte[]が全部ヌル値か判定する便利な方法ありますか?
頭から読めばいいだけ
ヌル値って何だよw
byte[]が全部ヌル値ってどういう事
bool IsNull(byte[][] bb) { foreach(byte[] b in bb) if (b != null) return false; return true; } こうじゃね?
なるほど byte?[]の全要素がnullの事かと思ったわ
byteだからnullじゃなくて0x00のこと言ってんじゃね?
665 :
デフォルトの名無しさん :2007/10/26(金) 01:35:18
「ヌル」ってカタカナで書くの、きもいよね。 null と 0 の違いはわかってるのかな? bool IsEmpty(byte[] bb) { foreach (b in bb) if (b != 0) return false; return true; }
英語圏出身の人だったりして。 null って英語だと 0 って意味あるから。
てかCだとnullは0だろう
キモイのはヌルじゃなくてナルの間違いだろ。 narcistって言うんだけどね
方言を間違いって言ってるのと同じ事
ドイツ語習った俺はヌルとしか読めなくなった
フランス語習った俺はニュルとしか読めなくなった
nullって元々ドイツ語から来たものだし
>>667 null 文字は 0 だけど、null ポインタが 0 な保証ってなかったと思う。
CPU によっては、「無効なポインタを表すアドレス」が 0 じゃないらしい。
まあ、ただ、(int*)0 とか書くと「無効なポインタを表すアドレス」に変換される仕様だけど。
>>672 フランス語由来の単語はフランス語チックに読む場合が多いけど、
ドイツ語由来の単語は、言語的に近いせいか、英語発音するよ。
ギリシャ語だろw
こんな話題で盛り上がるんだからほほえましいスレだよな
皮肉って言いたいだけと違うか
677 :
デフォルトの名無しさん :2007/10/26(金) 14:06:13
Excel風の画面分割付きのデータグリッドライブラリを教えてください。 スプリッタの片方だけを横スクロール、縦は追従するようなのを探しているのですが発見できません。
標準のDataGridViewでいいじゃないか。
>>678 DataGridView使ってみましたが、それらしき機能がみあたりません・・・
>>679 おもいっきりあるだろ。固定したい列のFrozenプロパティをtrueにしたら固定列になる。
なぜRichTextBox.SelectedTextに文字列を入れると変わるのに空文字列は 変わらないのでしょうか。また変える方法はありますでしょうか。 RichTextBox.SelectedText = "hogehoge"; //変わる RichTextBox.SelectedText = ""; //変わらない
>>681 ちゃんと置換できるよ。
ブレークポイントで止めてSelectedText見てみたら
683 :
681 :2007/10/27(土) 09:26:47
ブレークポイントでも見ると "hogehoge"も""も代入した直後は、空の""になっており、 実際表示するとhogehogeは置換されてますが、""を代入した場合は もとのテキストにもどっています。文字の背景色を変えている部分 なのですが、これが関係したりしますか?SelectedTextも変えなきゃだめ とか。 因みに RichTextBox.SelectedText = " "; //半角スペース RichTextBox.Trim(); ってやると表示される文字は" "の半角スペースとなります。 困りました〜
684 :
681 :2007/10/27(土) 09:36:22
>SelectedTextも変えなきゃだめとか。 SelectedRtfの誤りでした。すみません。
685 :
681 :2007/10/27(土) 09:49:28
新しくテストプロジェクトを作って FormにRichTextBoxとButtonを配置して private void button1_Click(object sender, EventArgs e) { this.richTextBox1.SelectedText = ""; } private void button2_Click(object sender, EventArgs e) { this.richTextBox1.SelectionBackColor = Color.RoyalBlue; } ってやると""の空文字にできるし、選択されたところを色ぬっても ""に出来ました。 あー原因がわからないですー
686 :
681 :2007/10/27(土) 10:14:57
原因の切り分けをしたところ、 ReadOnlyプロパティにすると""が代入できないようです。 仕様?
687 :
681 :2007/10/27(土) 10:54:51
ReadOnlyプロパティ以外でテキストを入力できないようにする方法 ってありますか? もうこの方法でいこうと思います。
falseして削除してtrueにしたらだめなん?
689 :
681 :2007/10/27(土) 12:31:16
>>688 頭よすぎです。
一気に解決しました。ありがとうございました!
頭よすぎ吹いたww
笑いのポイントが小学生って君よく言われるでしょw
692 :
681 :2007/10/27(土) 13:59:59
何で知ってるんですか!?
List<Object>をList<String>に変換するのってどうすればいいですか? (List<String>)objectListだとエラーが出るんですけど。
最初からList<String>で作るのが正解
ありがとう。 やっぱひとつづつやるしかないのか…
>693 List<string> stringList = new List<string>(new ArrayList(objectList).ToArray(typeof(string)) as string[]); なんか無駄なことやってる気が… 最初からList<string>にしとけよ。
C# 3.0 なら List<object> l = new List<object>() { "a", "b", "c", "d" }; List<string> sl = l.ConvertAll(o => (string)o); というのがあるんだけど。 まあ、結局やってることは List<string> sl = new List<string>(); foreach(object o in l) sl.Add((string)o)); と同じだけど。
ConvertAll なら 2.0 ですでにあるし 3.0 なら素直に OfType があるだろ
C#2.0でもあるだろ list.ConvertAll<string>(delegate(object o){ return (string)o; });
すまん、OfType と勘違いしてた。
C#2.0ってほんとまだできてないよな 3.0なら var l2 = l.ConvertAll(o => (string)o); こうだからな
そして簡単に書けすぎて乱用してしまう。 最初から必要な型にしとけばいいのに。
3.0以降はC++とは別の意味で変態的になってきたな
C++0x (1x になってしまいそうな雰囲気もあるけど)にもラムダ式とか追加されるらしいし、 全然別の意味ってわけでもないけどね。 まあ、データベース言語との統合ってのは必要な機能だと思うし、 C# の変態的な機能強化は、どれも結構 LINQ を実現するために必要なのよね。
柔軟で強力な機能を導入しといて「お前ら勝手に使え」の方向に行きつつあるな
C++だって暗黙型もクロージャも導入しようとしてるし Javaも関数型とクロージャを入れようとしてる C#はだいぶ先に行ってるけどな
Java はもうすっかり C# の後追い路線よね。 C++ 0x の方は最近ようやく概要に目を通した程度だけど、型推論とかクロージャにはびっくりした。
Cの子孫言語系統はある程度目指すところが見えてきた感じかしらん
デリゲートも出世したな はじめはイベントを正当化するためだけの存在だったのに
もともとデリゲートの本来の力が分かってなかっただけの話
コーディングスタイルの話なんだけど、 hoge = delegate() { //... } と hoge = delegate() { //... } ってどっちがオヌヌメ?
hoge = delegate{ //... } こうかな
if とかの書き方にもよるんじゃね おいらは開始ブラケットでは改行しない派
>>713 C#だと、
hoge = delegate()
{
//...
}
の方が多いみたい。
hoge = delegate() {
//...
}
は、C++の人っぽいような希ガス。
ところでラムダ式って匿名メソッドみたいに引数の省略はできるの? hoge = delegate { ... } hoge = ()=>{ ... }; hoge = { ... }; //これはダメ?
VSの初期設定だとdelegate()の直後で改行が入るけど、 俺は{の後ろで改行した方が見やすいと思うな。
デリゲートをメソッドの引数にするときは{の前で改行するほうが見やすいと思う 後で改行すると{}内も引数みたいに見える
{ の後改行派が思った以上に多くてびっくり。
MessageBoxの「はい」や「キャンセル」や「OK」などの文字列を 取得する方法はありますか? ダイアログに置いたボタンの文字列をを環境に応じて適切に 変えるため取得したいです。
苦労してそれを達成するだけのメリットはあるの?
自分でForm作ってShowDialog
既存のモノを変更したいならAPIフック位しか思いつかない
>>723-725 はたぶん勘違いしてるんじゃないの?
自作のFormで「はい」「いいえ」などのボタンを配置したいから
その文字列をシステムから取得したいって言ってるんでしょ。たぶん。
俺はやり方は知らんが。
727 :
デフォルトの名無しさん :2007/10/28(日) 00:59:05
「OK」 と表示するか、「はい」 と表示するか、「ニダ」 と表示するか 環境に応じて適切に変えたい、って事?
VC#では自前でDoc/Viewを実装する必要があるんですか? 結構面倒なんですけど・・・
>>729 どっちかと言うと、それ当たり前のような気がするが・・・
>>727 このaa思いだした
┝┥┌──────────────────┴┐
│┝┥┌──────────────────┴┐
││┝┥┌──────────────────┴┐
│││┝┥┌──────────────────┴┐
││││┝┥┌──────────────────┴┐
│││││┝┥Zainichisoft [×]|
┤│││││┝━━━━━━━━━━━━━━━━━━| \カチ
└┤│││││┌───―┐ ´||`| カチ
└┤│││││ Λ_Λ | ニダーに住み着かれました。 .│ カチ
└┤││││<=( ´∀`) | 謝罪と賠償するまで .│ カチ
└┤│││( ) │ 終了はできません。 | カチ
└┤│└────┘ . . | カチ
└┤ .[謝罪する] [賠償する]. .| カチ
└───────────────────┘
下の様なコードを書いてみたのですが、
思った通りの変換が行われません。
なぜでしょうか・・・。
<ソース>
Encoding fromCode = Encoding.GetEncoding("shift_jis");
Encoding toCode = Encoding.GetEncoding("gb2312");
byte[] jpBytes = fromCode.GetBytes(textJp.Text);
byte[] gbBytes = Encoding.Convert(fromCode, toCode, jpBytes);
char[] gbChars = new char[toCode.GetCharCount(gbBytes, 0, gbBytes.Length)];
toCode.GetChars(gbBytes, 0, gbBytes.Length, gbChars, 0);
textGb.Text = new string(gbChars);
</ソース>
思った通り、というのは
ttp://www.excite.co.jp/world/chinese/ で"故郷"と入力すると、"郷"は簡体字に変換されますよね。
そうなるように、つまり日本語の漢字が、
簡体字の該当文字にマッピングされるように変換したいんです。
もちろん、表示するときはSimSunフォントです。フロントエンドは日本語版ですが。
S-JISの"郷"と簡体字の"郷に相当する文字"は対応関係にある、 とされてないからじゃないでしょうか。
734 :
デフォルトの名無しさん :2007/10/28(日) 15:02:19
TargetInvocationExceptionはハンドルされませんでした。 って出た例外が発生したときは原因をどのように追っていけばよいですか? 配列のインデックスが足りないとかの例外だったらわかりますが、 あまり例外処理を解析したことなくて、どこから手をつければよいか わからないです。 まず何を調べればよいか教えて欲しいです。他に必要な情報があれば 提示します。
例外が一番上まで飛べばその時点でデバッガが例外が起きた状況を 全部教えてくれるだろ
>>729 おれは、イベントハンドラにロジックベタ書き。
ロジックっていうほど、複雑な処理は書かないんで、いまいち別にしても良くなる気がしないっていうか。
こういうふうに書くってお手本も見たことないし。
>>734 .NET Frameworkのメソッドが投げた例外ならだいたいMSDNのそのメソッドのページを見れば
投げる可能性のある例外とその原因が書いてあるだろ
738 :
デフォルトの名無しさん :2007/10/28(日) 16:58:39
MDIにしているときはMouseDownイベントが飛んでこないようなんですが 取得する方法はありますか?
739 :
デフォルトの名無しさん :2007/10/28(日) 17:00:35
あっ MicrosoftのHPにVBだけどサポートされてませんって書いてある・・・。 じゃだめか。。。?
740 :
732 :2007/10/28(日) 17:53:42
>>733 そうなんですかねぇ・・・。
てことは自分でマッピングテーブルを作らないとどうしようもないと言うことか。
簡体字に存在しないはずの日本漢字や仮名がSimSunで表示できるのが不思議でしょうがない。
742 :
デフォルトの名無しさん :2007/10/28(日) 18:41:17
ListViewItemをシリアル化したのですがTagの内容が保存されません 解決方法を教えてください。
>>740 正攻法かどうか知らないけど、とりあえずVBランタイムのStrConvを使えば出来るんじゃない?
745 :
デフォルトの名無しさん :2007/10/28(日) 22:05:20
>>740 がやろうとしているのは、日本語⇒中国語 翻訳とかわらん
746 :
デフォルトの名無しさん :2007/10/28(日) 22:13:11
Manifestファイルって何に使いますか? アプリを作って渡そうとしてるんですけど、できるだけ不要ファイルは 消したいのですが、Releaseフォルダにあるexeファイル以外のものは 必要なものなかよくわかりません。 .Netがインストールされてればexeファイルだけでもいいんですか?
>>745 一応論理的には写像関係が定義できる文字の変換だから、そうでもないでしょ。
だから現にVBライタイムの機能として存在してるじゃん。
SDJEditorって.NETで作られたテキストエディタを使ってみた ワープロソフトかと思った。 テキストエディタとしては使い物になりませんね
それは何の相談?
いつもの奴だろ .NETおせー言いたいだけの
.NET Frameworkのdllの列挙体をそのdllを参照しなくても使えるようにするために リフレクションを使ってすべてのメンバ名とその値を取得してコードを生成したんだけど これってライセンス違反になる?
どのライセンス?
753 :
751 :2007/10/29(月) 17:08:51
.NET Frameworkのライセンス 逆コンパイルでやるのは完全に違反なんだろうけどできたものは同じだから気になる
MSDNに書いてあるだろ。
.NET Frameworkのどのライセンス?
>>753 アセンブリのメンバーの列挙なら逆アセンブルにはならないだろ。
MSのリフレクションのサンプルにもそれやってるのがあったぞ。
ライセンス違反にはならないけど、 プログラミング作法的にかなり微妙じゃない? enum 使ってる意味が薄くなるし。 dll 参照しなくするのにそんな大したメリット感じないし。
>757 enumはコンパイル時に値が埋め込まれてるんだよ。 constの定数と同じ扱いだね。 だからdllを参照してても実際にはenumの値だけじゃdllは呼び出されなかったりするかも。 でもenumだけ参照しないようにしても関連するメソッド呼び出し時とかに 元のenumを使うから無駄にキャストしないといけなくなるしかなり無駄かと思うけど。
759 :
740 :2007/10/29(月) 23:40:38
>>741 なるほど、FontLinkという機能は知りませんでした。
調べてみて初めて知りました。不勉強でした。
>>744-747 ありがとうございます。
StrConv、試してみましたが残念ながら同じ結果になりました。
(久々にVBを触りましたが、6.0からずいぶん変わった物です・・・)
PinConv+というフリーウェアを発見し、DLしてみたのですが、
やはりマッピングテーブルを持っているようです。
テーブルなしでは無理なのかもしれませんね。
まあそりゃ郷はUnicodeに3つ入ってるからな。繁体字と常用漢字が別。 ちなみに該当のDLL参照すりゃC#でもStrConv使えるぞ。
761 :
デフォルトの名無しさん :2007/10/31(水) 06:18:43
http://msdn2.microsoft.com/ja-jp/library/e59b22c5 (VS.80).aspx
ここに書いてあったとおりに Cmdll.c と CM.cs 作ってコマンドラインからコンパイルしたのですが
不正な処理で落ちてしまいます。
出力はこんな感じです。
>CM
ハンドルされていない例外: System.BadImageFormatException: 間違ったフォーマット
のプログラムを読み込もうとしました。 (HRESULT からの例外: 0x8007000B)
場所 MainClass.SampleMethod(Int32 x)
場所 MainClass.Main()
>ls
CM.cs CM.exe Cmdll.c Cmdll.dll Cmdll.exp Cmdll.lib Cmdll.obj
>cl
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
>csc
Microsoft(R) Visual C# 2005 Compiler version 8.00.50727.42
for Microsoft(R) Windows(R) 2005 Framework version 2.0.50727
64bitだからまずいのでしょうか?
762 :
761 :2007/10/31(水) 06:23:29
OS書き忘れました windows xp x64 professional service pack 1 version 2003 となってます
764 :
デフォルトの名無しさん :2007/10/31(水) 07:25:31
>763 教えていただいたとおりうまくいきました。 IDEの方でanycpu以外の選択肢を選べずあきらめていたのですが もう一頑張りしてみます。 ありがとうございました。
Formアプリで、System.ConfigurationのConfigurationElementCollection などを利用して、複雑なリスト構造の定義をApp.configに書き込みたいのですが、 参考になるようなリンク等無いでしょうか? 読み込んでいるサンプルは幾つか見つかったのですが、書き込んでいるものが見つからないのです。 定義に可変長リストが含まれているために、コレクションを使用したいのです。
766 :
765 :2007/10/31(水) 21:16:35
パス文字列中の %APPDATA% とかを置き換えてくれるメソッドはありますか?
768 :
デフォルトの名無しさん :2007/11/01(木) 01:58:41
ExpandEnvironmentStrings とかどうかな
>>768 WinApi のほうを失念してました。ありがとうございます。
それをキーワードに探したら Environment.ExpandEnvironmentVariables なんてのを見つけたのでそっちつかいます。
772 :
デフォルトの名無しさん :2007/11/03(土) 04:01:24
TcpClientで相手が切断したのを判別するにはどうしたらいいのでしょうか? こちらのTcpClientは相手が切断するまで絶対に切断しないという処理をしたいのですが
相手が切断するまで絶対に切断しない って設計に問題がある
物理的に切れたら永久に待つのかね?
正常にデータがとどかなくなったら切断されてるんだろう。
切断検知はWriteしたときのExceptionかReadでロックしてるときにExceptionじゃないか?
相手から切られないと絶対切っちゃだめなんだぜ?
き、切ってなんかないんだからね!24時間ほど休憩してただけなんだからね!
マジレスすると、単に応答するだけのコマンドを用意しといて定期的にやりとりする。FTPのNOOPとか。 「おい起きてるか?」「・・・ん、あ、寝てないよ、起きてるよっ」
生存確認やるならUDPじゃねーか?
ごめんな、既存のコネクション使って生存確認するよりUDPでやるべき、という理由がわかんない。 なんか理由あるんだよね?
783 :
デフォルトの名無しさん :2007/11/04(日) 01:43:39
ACCESSからデータを引っ張ってきて、IDとパスワードと照合してログインする というコードを書いてたのですが(以下) OleDA = new OleDbDataAdapter("SELECT * FROM test", OleConn); OleDA.Fill(Ds, "test"); if (Ds.Tables["test"].Rows.Count == 0) { this.lblエラー.Text = "該当IDは登録されていません。"; return; } DataRow inTable = Ds.Tables["test"].Rows[0]; if (inTable["PASS"].ToString() != ls_パスワード) { this.lblエラー.Text = "パスワードが違います。"; return; } DataRow inTable = Ds.Tables["test"].Rows[0]; の部分はtest.mdbのtestの1行目だけを取ってくるって事でしょうか? 上記の場合はテーブルの1行目の人だけログインが可能で Rowsを[1]にすると、テーブルの2行目の人だけがログイン可能という状態になります テーブルのPASSの列を全部取ってくるような書き方はあるのでしょうか? ちなみにaccessのtestテーブルの構造は ID NAME PASS 1 A 11 2 B 22 3 C 33
784 :
デフォルトの名無しさん :2007/11/04(日) 02:25:21
↑ すいません 解決しました
TCPでも無通信が長くなるなら
ダミーの通信は必要だよ。
これを、TCPで生存確認する。といってるなら
間違ってはいないとおもうがな。
>>772 相手からの切断であろうと、物理的な
断線であろうとTCPがやってくれる。
従って、自分から切断しなければいいだけ。
C#でJavaのBeanに充たるのって、なんていうの? やっぱBean?
同じ概念で1対1で対応するものがあるとはかぎらんだろ。 しいて言えばComponentといえなくも無い程度だと思う。
C#自体もじゃね
Clickのイベントでマウスのボタン判定できないんでしょうか? MouseDownだと、(e.Button == MouseButtons.Left)とかって判定できるんですけど・・・。 Clickイベントでボタンの判定の方法があったら教えてください。
ClickはLeftButtonでしかおこらんだろ
>>790 右やセンターのクリックも拾っちゃうんです。
792 :
791 :2007/11/05(月) 20:10:27
自己レスです。 MouseClickイベント使ったら(e.Button == MouseButtons.Left)で判定できました。 こっち使います。お騒がせしました。。
WindowsFormで、TreeViewでBorderStyleをFixed3Dにした場合に、 ツリーを何箇所かクリックしていると、見た目が3Dでななくなってしまいます。 再現するには、 .Net 2.0で、VS2005で、フォームを作成し、TreeViewを貼り付け、 BorderStyleをFixed3Dにするのみです。 treeView1の初期化を以下のように単純化しても発生します。 TreeNode node = new TreeNode("親ツリー"); node.Nodes.Add( new TreeNode("子ツリー")); treeView1.Nodes.Add(node); これって、もしかして有名な現象なのでしょうか?
再現しませんでした(・∀・)!! というかBorderStyleってデフォルトがFixed3Dじゃね?
おれんとこも再現しない。 ウィンドウズのリソース足りてる? 再起動しても再現する? 他のパソコンでも再現する?
796 :
793 :2007/11/05(月) 22:18:07
えぇ〜、こちらの環境のせいなのでしょうか? すみません、今、自宅に帰ってきてしまいました。 リソースは足りているはずです。OSはXPです。 すみません、他のPCで明日確かめて見ます。
797 :
793 :2007/11/05(月) 23:07:19
すみません、自宅の非力なマシンで試してみましたが、確かに再現しません……。 むむむ、同時に動いていた何かのアプリによるリソースリークの疑いがありますね
C#を勉強しようと思っているのですが、C#で書かれた オープンソースなアプリとかってありますか?
SourceForgeとかで検索すればいいじゃない
802 :
デフォルトの名無しさん :2007/11/06(火) 10:25:03
質問です。 ログオンを検知したいんですが、対応出来る イベントハンドラー無いですか? Windowsサービスで待ち状態中にログオンを 検知してユーザー情報などを取得したいんですが…。 EventLog、スタートアップフォルダ等を使わずに、 Windowsサービスで検知しろという仕様なのです…。 昨日調べたら、ログオフ時、シャットダウン時、 ユーザー変更時というのはあったのですが、 ログオン時というのは見つけられなかったので。 誰かご存知無いです?
>>802 死ね役立たず。
人の足引っ張って楽しいかゴミクズ。
今すぐ死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。v死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
>>798 CodePlexやCodeProjectにいくらでもある
ほとんどがC#のプロジェクトでVB.NETは少ないけどなんでなんだろ
>>805 最近似たような荒しをよく見る気がする。
802 はたまたま通り魔的に犠牲になっただけかも。
807 :
802 :2007/11/06(火) 12:21:40
日中は別の仕事してるので803と同僚ってわけじゃない ですよ。 もう少し調べて見ようかな。 本業じゃないのが辛いなぁ…。
>>807 それはそうと、WindowsサービスはNETで作れたっけか?
Win32スレで聞いた方がよくないか。
>>802 環境変数のUSERNAME取得とかじゃ駄目なん?
810 :
802 :2007/11/06(火) 13:04:40
.Net ExpressでWindowsサービス作ってます。出来ますよ。 サービスで動かすとUSERNAMEの中がSYSTEMになるので、 その方法が使えません。 イベント発生時(ログオン時)に検知して処理を行わないと ダメっぽいですね。
>>808 プロジェクトのテンプレートの一覧に普通にあるぞ
目大丈夫か?w
え? Professional以上じゃなかったでしたっけ?
プロジェクトのテンプレートが無いだけだろ System.ServiceProcess.dll参照して0から自分で書けばできるはず
>>810 EventLogアクセス禁止じゃないの?
レジストリでStartupにサービス通知セットするとか
System Event NotificationサービスへISensLogonインターフェイスを登録する。 とか言えば満足なのか?
TextBoxでCtrl+Aで全てのTextを選択状態にする方法を教えてください。
818 :
793 :2007/11/06(火) 19:19:19
TreeViewのBorderStyleのFixed3Dが変な件ですが、 どうやら、リッチテキストボックス以外が全て立体に見えません。 他のマシンで試しても同様です。 もしかして、これはXPのテーマが絡んでいるのでしょうか? 自宅のPCと見た目が違うのですが、もう諦めました。 気づかなかったことにします。
>>817 Ctrl+A拾って、Text全部選択するだけじゃないか。
ってそのままの回答でよいのか?
Ctrl+A拾うのはどのようにするのですか?
特別に処理をしないでも 選択状態になると思うんですけど… 質問の意図が違うんかな。
入力フォーカスなくても、って意味なのかね。 それとも、ひょっとして自分でShortcutsEnabled をfalseにしてたりしてねw
823 :
817 :2007/11/07(水) 01:24:59
特別な処理しなくてもなります?自分はならないのですけれどもXP:VC#2005Ex Multiline:true ShortcutsEnabled:true の状態で複数行のTextが表示されててTextBoxにフォーカスがある状態でCrtl+Aで全て選択状態にしたいのですが
初級エスパー試験レベルの問題だな
>>823 private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == (Keys.A | Keys.Control)) { (sender as TextBox).SelectAll(); }
}
を
>>819 は言っている。つかフラット池
C#の名著ってありますか? 名著に限らず、オススメの本があれば、 何冊か紹介していただけると嬉しいです。
独習C#
>>826 逆引き大全は持っておいて損はないかと。
何が逆引き大全じゃ
C#によるコンポーネントプログラミング ←これなかなかよかった
本の評価って読み手のスキルに依存する問題だからな。 つまりどういうスキルをもった誰にとってよい本かって問題だよね。 アマゾンとかで得意げに書評書いてる連中はその辺わかってない馬鹿が多すぎるよね
↑アマゾンとかで得意げに書評書いてる連中
逆切れ大全じゃ
不毛すぎ
(´-`).。oO(みんな"俺様、最高!!"って思ってんだろうなぁ…)
CRC16を取得したいと思っているのですが、 どこかにC#にて作られたサンプルコードの場所を知っている方が いたら教えてください。
>>830 それ良かったけど内容が古くなったなあ。
初心者には川俣氏の本も良いけど古い。
というか3.0を初心者向けに解説できる本など生まれるのだろうか
3.0マジで使いやすいじゃん オブジェクトのLINQなんかないと不便すぎる 今までが不便すぎた
でも動作の対象はXPとVistaだけなんでしょ
C#に限らないかも知れないけど、IEnumerableとforeach使って ループを実装するのはすごくきれいに書けるじゃない。 でも2つ以上のコレクションを比較したりしながら操作する場合、 IEnumeratorを作って書かなくちゃいけなくなって、とたんに 汚いコードになったりしない? 次の要素があるかないかをMoveNext()で判定するわけだけど、 イテレータが進んでしまうから1度ずつしか使えないし、 かといってCurrentの値で末尾かどうかを判断できるわけでもない。 どうしても余計な変数を定義する必要に迫られ、煩雑になってしまう…。
ラムダ式を取る拡張メソッドでも作ればいいさ
汚いとまでは思わないけど、圧倒的に面倒よね。 IEnumerable<Pair<T, U>> ToPair<T, U>(IEnumerable<T> t, IEnumerable<U> u) みたいなメソッドをイテレータ機能使って作っとくとか?
コレクションが同数じゃない場合どうすんのよ
まあ、例外投げる仕様にするか、短い方できるか、長いほうに併せてもう一方をnullにするか? やっぱあんまり実用的な感じはしないけどね。
二つが同数って分かってるなら colA.ForEach(colB, (a,b) =>{ ... }); こんな感じのものを作ればいいんだろう
そうなんだけどね。 なんとなく、C# っぽく、内部イテレーション版と外部イテレーション版を両方用意したいなぁと。 あと、LINQ でもなんとかうまく書けないかなぁ。
850 :
843 :2007/11/08(木) 02:50:23
……。 詳しく知ってる人でもややこしいんだね。そう分かっただけでよしとしよう。
外部イテレーション版というのが何をしたいのかわからないけど 別に作ればいいだろう ラムダ式は無敵の言語構造だぜ
>>845 Zip関数でぐぐれ。C#での実装も多数。
いい加減、数値型にたいするGenericsを書けるようにはならんかね・・・(´・ω・`)
俺3.0置いて行かれてる感あるけど、オマイラ業務で使ってるのですか? ラムダ式とか変態式にしか見えないんですけど
>>853 数値型であることと演算子の問題をごっちゃにしちゃいけない。
10万行の配列をソートするにはどうすればよいですか?
配列というのはList<string>です。
>>851 外部イテレーション版ってのが、
>>845 みたいなの。
MoveNext() / Value を使うタイプの反復。
LINQ で使おうと思うと、ForEach() メソッドでなくて、
IEnumerable になってないとダメだし。
>>852 それそれ。そういうの。
それを、2.0 のイテレータ構文で書こうとしたのが
>>845 。
しかし、Zip っていうネーミングセンスはひどいな、python。
>>855 いや、正式版が出るの今月末だし。
まだ業務ではちょっと。
ラムダ式、別に、匿名デリゲートの簡素化構文だと思えばそんな変態的でもないかと。
というか、ラムダ式が変態なんじゃなくて、
関数型言語マニアの人らがラムダ式を無理やり変態的に使おうとしてるだけ。
>>856-857 普通に Sort() メソッド呼ぶだけじゃん。
10万行くらいならまだ別に特殊なこと必要ないでしょ。
(int x) => { return x * 2; } みたいにきちんと書くこともできるんだろ 最初からこれがあれば匿名メソッドは不要だったとMSも認めてるし
x => x * 2 って書くくらいではまだ全然変態じゃないだろ。 変態的になってくるのは、再帰とかカリー化とかやりだしてから。 ↓みたいな。 Func<Func<int, int, int>, int, Func<int, int>> bindFirst = (f, n) => x => f(n, x); Func<int, int, int> add = (x, y) => x + y; var increament = bindFirst(add, 1); 正直、これはあんまりやりすぎるのはよくないと思う。 せめて、この例での bindFirst みたいなのはラムダ式じゃなくて 普通のメソッドにすべきだと思うし。
やりすぎはよくないです
c#3.0はやってはいけない拡張ばかりに見える。
うん
開発時はいいかも知れんけど、保守担当に触らせられるか・・・
2.0の拡張は便利さが実感できるものばかりだったのに・・・。 まぁ取り残されないように頑張る。
匿名型は良さそうじゃね 別に読みにくくなることはないだろうし
これぐらいで音を上げてたらprototype.js使ったJavaScriptのコードとか Railsのコードとか誰もメンテできんのじゃなかろうか。
3.0の便利さはとどまるところをしらないと思うがなあ。 まあやりすぎれば分かりにくくなるが、 適度に使えば実に見やすく分かりやすいコードになる。 List<string> strList = intList.ConvertAll(i => i.ToString()); これは、2.0までの List<string> strList = intList.ConvertAll<int,string>(delegate(int i){ return i.ToString(); }); これより見やすく分かりやすいし、 List<string> strList = new List<string>(); foreach(int i in intList) strList.Add(i.ToString()); これよりも見やすく分かりやすいと思うが。
Convert.ToString でいいじゃん
ちょっとぐらい長くても、イディオムが少ないほうが読み手にとっては楽なんじゃない? 少なくとも慌てて言語マニュアル開く機会は減るかと。
874 :
デフォルトの名無しさん :2007/11/09(金) 08:23:11
WebBrowser やIEで表示できるアプリケーションというのはたぶんCOMサーバー とかActiveXサーバーアプリケーションという類のものなんだと思いますが、 それらを事前に判断する方法というのはあるでしょうか、ありましたらどのように するものか知りたく。 よろしくお願いします!
875 :
874 :2007/11/09(金) 08:25:26
(追記)たとえばExcelなどはIEで表示可能でしたが、それらがActiveXサーバー アプリケーションであるかどうかは、どのようにして知ることができるでしょうか。
intList.ConvertAll(i => i.ToString());
みたいなの、匿名メソッドみたいにやっぱり内部で
コンパイラがクラス作ったりするの?
あれがあるから匿名うんちゃらって
例えば一回しか使わないようなとき躊躇する
>>874 まず人に分かるように整理したら?
場面が抽象的すぎてワカメだよ。
>それらがActiveXサーバーアプリケーションであるかどうかは
それらって何だよ
抽象的に答えるとすればレジストリをそれらのCLSIDで検索する
今でもローカル変数を触らない匿名メソッドは普通のメソッドが生成されるだけだよ さらにフィールドも触らないならインスタンスをstaticにして共有してくれたりする
>>876 名前空間は汚染されんし、それで増える(可能性のある)フットプリントなんて
微々たるもんだろ
C#とか使っといて、んなこと一々気にする時点で何か間違ってるぞ
だな
あるタイマーライブラリを使う必要があり、その指定時間で呼び出されるTick関数の中身を書く必要があるのです。 でも、そのライブラリのドキュメントには、Tick内で処理に時間がかかると、次のTickが呼び出されちゃうかも。 同期処理はそっちでやってね、的なことが書いてあります。 希望としては、Tickが呼び出された時に前回のTickが処理中だったら、前の処理完了を待たずにスキップして 欲しいのです。となると、処理中かどうかを示すboolのflgと、同期用のsyncオブジェクトを用意して、以下の感じで 良いのでしょうか?すみませんが、これ以外の常識的な定石がありましたら、教えていただけないでしょうか? private void Tick() { if(flg) return; lock(sync) { try { flg = true; 長い処理 } finally { flg=false; } } }
private void Tick() { lock(sync) if(flg) return; else flg = true; try { // 長い処理 } finally { lock(sync) flg=false; } }
それ意味ねーだろ。 いや意味なくはないが望む動作じゃないだろうし もちろん望ましい動作でもない。
と思ったら携帯でちゃんと読めてなかったわごめんご
>880 flgをvolatileで宣言する。
if (Interlocked.CompareExchange(ref byte flag, 1, 0) == 0) { try { // 長い処理 } finally { flag = 0; } }
volatileにしたところで無駄にブロックされることはあるわな。 それでどれだけ実害があるかって言えばまあそんな問題になることは少ないが。 しかし頻繁に同時起動されると問題になる可能性はある。
flg って名前より 処理中のほうがよさそう…
.NETアプリって実行する度、コンパイルされるの? 前回起動時と同じハードウェア構成なのに・・・ 1回コンパイルしたら、メモっとけよ
ちがた。 byte flag; … if (Interlocked.CompareExchange(ref flag, 1, 0) == 0) { try { // 長い処理 } finally { flag = 0; } } 手書きだからまだ間違ってそうだがw
Monitor.TryLockでもいい。
>>888 手動でngenがある。
.NET FrameworkのBCLはインストール時にngenをかけているとか。
892 :
874 :2007/11/10(土) 00:49:51
>>876 ご指導ありがとうございます、
>>874-875 の件ですが、これは具体的には、
Registry の HKEY_CLASSES_ROOT\CLSID を探し、
InprocServer
LocalServer
InprocServer32
などのキーが存在すればActiveXサーバーとして知ることができる
という感じで考えればよいでしょうか、
条件としてもし InprocServer、InprocServer32 がなかったら、インプロセスでは
使えない、ということで振り分ければよいのでしょうか?
よろしくお願いします。
893 :
880 :2007/11/10(土) 07:24:36
みなさん、色々有難うございます。 教えていただいたキーワードでググってみたら、いろいろ有益な情報を得ることが出来ました。 単なるlockステートメントよりも、Interlockの方が速度が出るようですね。 Monitor.TryLockでは見つからなかったのですが、TryEnterが見つかりました。 if (Monitor.TryEnter(this, 1)) { などという書き方でもよいのかもしれません。 Tickのインターバルは数分〜数十分、長い処理は数十秒だと思われますので・・・ いろいろ実験してみます。どうも有り難うございました。
ところでやたらInterlockedがlockよりもずっと速いなんて感じの記事が目に付くが、 もちろんいろんな条件によるので一概にどうとは言えないのだが、 そんな極端にInterlockedの方が速いわけじゃないよ。
895 :
880 :2007/11/10(土) 09:17:06
はい、lockは内部的にMonitor.Entryに展開されるそうです。 それから、Monitor中のfinallyが必ずしも実行されないという記述の方が気になりました。 StackOverflowが発生した場合にはfinally句が呼ばれないこともあると・・・。
その記事は古いし、おかしいとこもあるから、 鵜呑みにはするな。 ちなみに2.0以降ではlockはかなり安全だが スタックオーバーフローはもはやキャッチできない。 つまりあの記事の内容だとわざわざ悪化させてる事になる。
そうそう、もともとの話だけど、そんだけ時間が空くのなら 保険的に単純なlockか、最初のようなコードで十分だと思うよ。 volatileは実は無くていいと思うけどつけたきゃつけとけw つけた方が安全方向だしな。
何らかの引数をひとつとる、あらゆるクラスのコンストラクタを ジェネリックなデリゲートに汎用的にバインドさせることは出来ないだろうか… LCG使わんと無理かな〜
普通のリフレクションでいけると思う。 コンパイラとおしてないがこんな感じか。 delegate T D<T, U>(U u); static D<T, U> F<T, U>() { ConstructorInfo ci = typeof(T).GetConstructor(new Type[] { typeof(U) }); if (ci != null) return delegate(U u) { return (T)ci.Invoke(new object[] { u }); }; return null; }
すまん言葉足らずだった。 遅延バインドならもう何でもありなんだが、 遅延バインドしないでやる方法があるかなってのが主旨だったんだ。
delegate R D<R, U>(U u); static D<R, U> F<R, T, U>() where T : R { ConstructorInfo ci = typeof(T).GetConstructor(new Type[] { typeof(U) }); f (ci != null) return delegate(U u) { return (R)ci.Invoke(new object[] { u }); }; return null; } こうしないと対象の型ごとにデリゲートの型が変わるよ
903 :
901 :2007/11/10(土) 12:24:25
C#のnew制約はほんとつかえねえからな
where T : new()はActivator.CreateInstance<T>()を使って実装されてるよ
指定しただけスレッドを作成してその全てが終了するまで待ちたいんだけど、 何か手はある?
指定した数だけ
>>900 T F<T, U>(U u) { return new T(u); } // (これはC#じゃコンパイル通らない)
に相当するコードを予めCILで書いておけばいいと思う。
そうすれば、
D<T, U> d = F<T, U>;
T t = d(u);
って具合に呼び出せるはず。
C++/CLIでテンプレート使えお
>>908 それだと実体化する側で、Tにが.ctor(U)を持ってるかどうか判断できないね。
その辺C#というか.NETの限界だね。 ランタイムリフレクションは充実してるけど、 コンパイルタイムリフレクションの機能がnew()制約ぐらいしかない。
属性付けといてビルド後に調べたら
「あの記事」ってどの記事なんだろ 俺が知らない間に最近じゃ俺以外みんなエスパーになっちゃったのかなw
aho
VC#は本当に惜しい これでWIN32をシームレスにコールでき、ネイティブが吐けるなら Win32対象のソフトウェアは間違いなくVC++の牙城を崩せたものを・・・
MSはP/Invokeの宣言を集めたアセンブリを作っておくべきだったな。
質問です。 現在のプロセスで実行中の、マネージスレッド(System.Threading.Thread)を 列挙することってできますか?
そのうち、アンマネージドの名前空間クラスでも作ってリリースするんじゃないの? 需要は確実にあるんだからね。
名前空間クラスってなんですか?
普通に考えて、名前空間のクラスだろう。 2ちゃんであげ足とっていたら、キリがない。
まあそれはいいんだけど、本当にWin32API多用してて面倒だと思ってる人なら むしろ916,917,919みたいなこと言わないと思うんだよね。 だってWin32 APIをインポートするときのシグネチャって同じAPI関数をコールする場合でも 用途によって変わっちゃう場合があるからなあ。
一般的に使われる全てのオーバーロードを提供してくれればいいよ。
今更ネイティブ吐けるようになっても嬉しくないな 最初からネイティブ吐けるようにしといて、.NET2.0以降ではサポート外にすればよかったと思う
マジかどうか確認もしてないが、 ほかに使い道がなさそうなActivator.CreateInstance<T>()が追加されてることと、 プライマリ制約レベルでILが共有されることを考えると、おそらくそうだろうと思える。
C#コンパイラの範囲だからReflectorで簡単に確認できるよ static T Create<T>() where T : new() { return new T(); } ↓ static T Create<T>() where T : new(){ if (default(T) != null) { return default(T); } return Activator.CreateInstance<T>(); }
つまり値型のときは既定のコンストラクタは呼ばれないのか?そうなのか? まあC#の範疇では一緒だけど…
よく考えてみたらnew制約はずすことは簡単にできるのなw
んーこれって事実上レイトバインディングってことか?
new制約自体はCLRのものだから問題ない
>>928 ILGeneratorで構造体に無理やり既定のコンストラクタを定義して試してみたら呼ばれなかった
そんなことよりも、既定のコンストラクタを定義した構造体をC#から使えることに驚いた
933 :
デフォルトの名無しさん :2007/11/11(日) 23:04:27
Accessをデータベースとして家計簿を作成しているのですが、tableの列の合計を うまく出力できません。 private void frm分析_Load(object sender, EventArgs e) { OleDbConnection OleConn = new OleDbConnection(); OleDbDataAdapter OleDA; DataTable Ds = new DataTable(); OleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\etc\\開発\\test.mdb;"; string expenditure = "select sum(table1) from test"; OleDA = new OleDbDataAdapter(expenditure, OleConn); OleDA.Fill(Ds); DataRow dr = Ds.Rows[0]; this.lblテスト.Text = dr["table1"]; } 最後の"this.lblテスト.Text = dr["table1"];"の部分でエラーが出ます。 エラーを見ると、Select sum…の部分があやしいです、ただlblテストにtable1の 合計を出力したいだけなのですが、どなたか上のコードを修正していただけないでしょうか。。 ちなみにAccessのtestテーブルは、table1という名の列に一桁の数字が6つあるだけです
select sum(table1) as table1 from test でどうだ
マルチ死ね
this.lblテスト.Text = dr["table1"].ToString(); かも
937 :
デフォルトの名無しさん :2007/11/11(日) 23:32:13
クエリ定義の SELECT で指定されている別名 'table1' が循環参照を発生させています。
>>934 と
>>936 を入れたら、上記のエラーが発生しました。。
>>937 そこまで書いてあったら、少しぐらい頭使ったらどうだ?
939 :
デフォルトの名無しさん :2007/11/11(日) 23:41:08
>>937 つまり、同じフィールド名を作ろうとしてるからエラーが出ると思って
string expenditure = "select sum(table1) as table2 from test";
OleDA = new OleDbDataAdapter(expenditure, OleConn);
OleDA.Fill(Ds);
DataRow dr = Ds.Rows[0];
this.label1.Text = dr["table2"].ToString();
こういう感じに書き換えたんだが、OleDA.Fill(Ds);のところでエラーが発生する。。
色々考えてやってはいる
940 :
デフォルトの名無しさん :2007/11/11(日) 23:42:04
エラーメッセージとスタックとレースを書け 話はそれからだ。
941 :
デフォルトの名無しさん :2007/11/11(日) 23:43:31
>>返信してくれたALL 成功しました!! 本当にありがとう!!
942 :
デフォルトの名無しさん :2007/11/11(日) 23:44:49
まあ、普通に考えて接続エラーだろう。
dr[0]ってできないの?
945 :
デフォルトの名無しさん :2007/11/11(日) 23:56:54
出来るけどdr[0]はObject型だから.Textに直接挿入できないからエラーだったんだろーね。
946 :
デフォルトの名無しさん :2007/11/12(月) 00:00:53
ってことは(string)dr[0]でいいの??
ToStringじゃね?
948 :
デフォルトの名無しさん :2007/11/12(月) 00:11:18
>>946 も
>>947 もいいと思うけど
普通は暗黙的に変換できないってコンパイルエラー出るはずなんだがな、、、
949 :
デフォルトの名無しさん :2007/11/12(月) 01:49:26
for文か何かで10回繰り返して ArrayListに順番にaddで追加したいのですが、 addすると1つ目の値が設定された後、2つ目の値を設定するときに 1つのところにに上書きされて、2つ目の値が1つ目に設定されてしまいます 最後には10個目の値が1〜9それぞれに同じ値になってしまいます この場合、どうすればいいのでしょうか?
>この場合、どうすればいいのでしょうか? 意味がわかるように説明するといいです
>>949 こういうこと・・・な訳ない・・・か
IList<int> list = new List<int>();
for (int i = 0; i < 10; i++){list.Add(i);}
foreach (int item in list) { Console.WriteLine(item); }
952 :
デフォルトの名無しさん :2007/11/12(月) 02:07:53
失礼しました ArrayList list = new ArrayList のあと list.add("1") list.add("2") 〜 list.add("10") これを繰り返す。 しかし最終的にlistの中身を見るとすべて"10"になっている 参照渡しというものらしいのですが 回避する方法がよくわかりませんので教えてください
>>952 その例でそういう現象はおきない。
「listの中身を見る」方法がおかしいのと違う?
再現性のあるコードをアップよろ。
class A { int a; } A a = new A(); : list.Add(a); a.a = 2; list.Add(a); : こんなことしてたりしてw
955 :
デフォルトの名無しさん :2007/11/12(月) 04:34:59
> 参照渡しというものらしいのですが ↑ 怪しい
class A { MethodA() { }
for(int i = 0 ; i < 10 ; i++) { a = i; list.Add(a); } こんなことしてるんだろうな
こんな感じかしら? for (int i = 0 ; i < 10 ; i++) { str = list[i]; } for (int i = 0 ; i < 10 ; i++) { Console.WriteLine(str); }
ここはお題に沿ったコードを書き込むスレですかw
960 :
802 :2007/11/12(月) 21:58:19
>>815 ありがとうございました。
やれば何とか出来るものですね。
要精進。
961 :
デフォルトの名無しさん :2007/11/12(月) 22:02:24
VS2005のエディタの設定ででVB.NETのように「プロシージャ行の区切り記号を表示」みたいなのはありますか?
962 :
デフォルトの名無しさん :2007/11/12(月) 22:02:39
証券会社のHPにHttpWebRequestでアクセスして 株の自動売買を作ろうとしてしているんだけど、 ログインはできたんだが、違うページに飛んだら サービスが利用できない怒られるんだ(´・ω・`) クッキーもちゃんと保存してるんだけどなぁ 誰かわかる人教えてください。
gmoはAPIとか提供してるんかなぁ? Eトレードでのホームページにデータを POSTして発注とかを考えてるんだけど SSLとかのせいかうまくいかない(´・ω・`)
WebBrowser の DOM をいじったほうが楽かもしれない
>>962 そのページはjavaスクリプトで移動先のページのアドレス書き換えたりしてない?
おとなしくwebbrowserでやったら?
スピードなんて対して変わらない。
webbrowserなんてあるの知らなかったw formのPOSTもできそうだしおとなしく webbrowserにしときます。 ありがとうございました。
>>967 勧めといてなんだけど。。。
それが結構面倒でむずいんだよね。
俺は出来るけど。
無駄レス -完-
構造体をbyte[]にコピーしたいんだけど、BinaryReaderでコツコツ読むんじゃなく一発でできませんか? unsafeでかまいませんので
fixed
読み込み側がよく分かんねーっす unsafe struxt Foo{ public fixed byte hoge[100]; }
全くちがうっす。
MemoryReader
>897 仕様上は弱いメモリモデルってことになってるし弱いメモリモデルだとvolatileが必要になるけど、 普段使ってるMSILが強いメモリモデルを採用してるので無くても動く。
まあ現実まずCLRでしか動かさんだろうからな。 てかMSILというよりCLRのメモリモデルだな。 しかし書き込みが常にvolatileってのは パフォーマンスにはそんなには影響しないんだろうか? まあ86や64ならいいんだろうけど。
質問があります。 C++だと public void piyo(bool f=false) のように関数引数の初期値を設定できますが C#でもできますか?
できまちぇん
978 :
976 :2007/11/13(火) 09:43:41
979 :
デフォルトの名無しさん :2007/11/13(火) 11:19:29
「ログ」って何ですか?何かの略語でしょうか?
スレ違いだと思うのだが ログは記録 ログファイル→実行記録 エラーログ→エラー記録 だからログインは記録に残すという意味から来たのだろう
ロガリズムの略ですね
982 :
デフォルトの名無しさん :2007/11/13(火) 11:37:24
ちゅーか用語の意味を調べたい場合、ググるクセつけた方がいいよ。 「用語 XX」ってググれば、ほとんどのコンピュータ用語は正確に把握できるから。 ここで聞けば経験則に基づく情報は得られるだろうけど、 間違ってる可能性も否定できないし。
つーかおもっくそスレ違い
googleの差し金
990の人、次スレよろしくね。
だが断る
た て ろ
990 :
デフォルトの名無しさん :2007/11/13(火) 19:15:36
拒否!!!
992 :
デフォルトの名無しさん :2007/11/13(火) 20:35:25
999
1000でC#は世界を翔ける
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。