C#, C♯, C#相談室 Part44
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/11/13(火) 21:20:18c++厨の嵐はスルー汁。
前スレ
C#, C♯, C#相談室 Part43
http://pc11.2ch.net/test/read.cgi/tech/1190845036/
0153デフォルトの名無しさん
2007/11/18(日) 11:58:50初心者に一番わかりやすいだろ?
参照が関数から抜けると切れるし、strが参照型だと解る
0154デフォルトの名無しさん
2007/11/18(日) 11:59:450155デフォルトの名無しさん
2007/11/18(日) 11:59:51class HeavyObject:IDisposable{
int[] data;
public HeavyObject(){data=new int[100000000];
public void Dispose(){/*これ実装してdataを解放してくれ*/}
}
0156デフォルトの名無しさん
2007/11/18(日) 12:06:56>VMの一定メモリ割り当て量超えた場合のパフォーマンス低下を防ぐため
具体的にパフォーマンス低下を防いでいる例を書いてくれ。
0157デフォルトの名無しさん
2007/11/18(日) 12:08:53やっぱり意味不明だろどう考えても。
0158デフォルトの名無しさん
2007/11/18(日) 12:10:36配列の開放って、具体的にはどうするの?
今まで意識してやってなかった。
0159デフォルトの名無しさん
2007/11/18(日) 12:12:38GCに任せるしかない
よっぽどすぐ削除したかったら参照切ってからGC.Collectとか考えられるけど、
Disposeでやることじゃない
0160デフォルトの名無しさん
2007/11/18(日) 12:14:02とでもいうつもりなのかな>>151は。
しかし問題はHeavyObject自身がどういう使われ方を想定してるかだ。
Disposeイコール普通はもう使わない、なんだから、
普通はDispose実装しても意味無いわな、ほっといても変わらん。
いやむしろDispose呼び出しのために開放が遅れる場合があるw
0161デフォルトの名無しさん
2007/11/18(日) 12:17:33{
private IntPtr handle;
private Component Components;
private bool disposed = false;
private int[] data
public BaseResource()
{
data=new int[100000000];
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)Components.Dispose();
CloseHandle(handle);
handle = IntPtr.Zero;
if(data != null)data = null;
}
disposed = true;
}
~BaseResource()
{
Dispose(false);
}
}
0162デフォルトの名無しさん
2007/11/18(日) 12:23:10それどう見てもdata=nullは一応ついでにやっといたほうがいい程度だし。
どう考えてもdataの開放は主目的とまったく違うし。
ついでっていうのは、Disposeされても参照が開放されない場合という、
どちらかというと特殊な状況でしか時再には意味無いけど、
せっかく開放のタイミングがあるんだから、一応ついでにやっとくべきだろう、
っていうレベルの話ってことね。
0163デフォルトの名無しさん
2007/11/18(日) 12:24:220164デフォルトの名無しさん
2007/11/18(日) 12:30:120165デフォルトの名無しさん
2007/11/18(日) 12:33:06GC.SuppressFinalize(this);
に指定されたオブジェクトがGCによって呼ばれないことによって
>大量の資源を使うクラスに対するDispose呼び出しは
>VMの一定メモリ割り当て量超えた場合のパフォーマンス低下を防ぐため
をおこなってるんだろう。
0166デフォルトの名無しさん
2007/11/18(日) 12:33:12だったらまだ、この表現自体の意味はわかるが、
DisposeしないでGCにまかせたりしてるのは
ってのはもはや意味不明
0167デフォルトの名無しさん
2007/11/18(日) 12:34:11それって「でかいアンマネージメモリ確保しちゃったからマネージメモリ詰めといてね」だろ
0168デフォルトの名無しさん
2007/11/18(日) 12:38:11>>167は>>165が>>164に言ってると思って言ってるのかな?
0169デフォルトの名無しさん
2007/11/18(日) 12:38:50表現のミスは認めるが、あげ足とり好きなやつが多すぎだな。
0170デフォルトの名無しさん
2007/11/18(日) 12:42:34じゃあFinalizeって意味で書いたのか?
そんなわけ無いだろ、さらに意味不明だ。
>DisposeしないでFinalizeにまかせたりしてるのは
>だったらまだ、この表現自体の意味はわかるが、
って書いたとおり、「この表現自体の意味」はわかるってだけ。
>string str = "A" + "B";
>これの"A"と"B" はすぐに使えなくなるがDisposeしないでFinalizeにまかせたりしてるのは
>影響が少ないから。
これでどうだ、ますます意味不明だろ。
0171デフォルトの名無しさん
2007/11/18(日) 12:42:50VMによるパフォーマンス低下を防ぐにはSuppressFinalizeの呼出
参照型には安全に解放を行うためnull参照を設定
まとめたらこんな感じか?
0172デフォルトの名無しさん
2007/11/18(日) 12:44:040173デフォルトの名無しさん
2007/11/18(日) 12:44:38本当はこういう表現をしたかったのに
ミスしてこう書いてしまった
っていう風にを説明してみ、できるわけ無いが。
0174デフォルトの名無しさん
2007/11/18(日) 12:45:52>VMによるパフォーマンス低下を防ぐにはSuppressFinalizeの呼出
>参照型には安全に解放を行うためnull参照を設定
>まとめたらこんな感じか?
んーそりゃ無茶だw
0175デフォルトの名無しさん
2007/11/18(日) 12:46:080177デフォルトの名無しさん
2007/11/18(日) 12:47:19特別な終了処理を行いたかったらDisposeを実装
っていうだけのことなんだけどな
0178デフォルトの名無しさん
2007/11/18(日) 12:49:03C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/
0179デフォルトの名無しさん
2007/11/18(日) 12:52:22Disposeを実装する。Disposeを実装してるメンバを持ってる場合も同じ。
アンマネージリソースを直に扱うクラスはFinalizeを実装する。
ただし、普通はSafeHandle使うべきだし、アンマネージリソースを直に扱うクラスなんて
まずめったに無いから、Finalizeを実装するのは本当にまれ。
Finalizeを実装するなら、Diaposeも実装して、確定的なタイミングでの開放もできるようにする。
この場合はDisposeのタイミングでSuppressFinalizeを呼び出して、
もうFinalizeは呼び出さなくていいことを伝える。
でも普通はDisposeパターンを使うけど。
Disposeを実装する場合は、一応マネージドなメンバの参照もnullにしておけば、
もしDispose後すぐに参照が開放されない、ということがあった場合には効果がある。
まあ普通の使い方じゃそんなに無いけども。
0180デフォルトの名無しさん
2007/11/18(日) 12:58:030181デフォルトの名無しさん
2007/11/18(日) 12:59:580182デフォルトの名無しさん
2007/11/18(日) 13:01:24Disposeの話題はおしまい
0183デフォルトの名無しさん
2007/11/18(日) 13:01:460184デフォルトの名無しさん
2007/11/18(日) 13:03:39Before-Afterパターン的なことをするために会えて実装することはたまにある。
単にusingで簡潔かつ確実に書けるようにするってだけの目的だけど。
TransactionScopeなんかと同じ使い方だな、
何らかのスコープを定義したい場合に使うことが多い。
0185デフォルトの名無しさん
2007/11/18(日) 13:08:510186デフォルトの名無しさん
2007/11/18(日) 13:09:120187デフォルトの名無しさん
2007/11/18(日) 13:10:22コードブロックを引数に取れよ
0188デフォルトの名無しさん
2007/11/18(日) 13:14:17簡潔簡単にかつ間違えなずに使えるようにしとくってのが目的だからな、
コードブロック引数ってのはやりたくない(外向けには、内部ではやったりもするが)。
あと大きいのは、VBでも普通に使えなきゃ困るから、だ。
0189デフォルトの名無しさん
2007/11/18(日) 14:54:180190デフォルトの名無しさん
2007/11/18(日) 15:00:17Rubyのように内部イテレータをメインに使う言語はそれでいい。
foreachで外部イテレータも多用されるC#では
foreachからの脱出時の軽量コールバックにDisposeが流用される。
ttp://www.okisoft.co.jp/esc/prolog/in-cs.html#4
そしてLINQのせいでますます外部イテレータ依存度が高くなった。
IEnumerator<T>.Disposeはもう殺せないよ。使われすぎてる。
例外が軽い言語だと、列挙の中断通知には例外を使う言語もあるけどね。
PythonとかECMAScript 4とか。
0191デフォルトの名無しさん
2007/11/18(日) 15:54:47ふらっとC#,C♯,C#(初心者用) Part21
http://pc11.2ch.net/test/read.cgi/tech/1195368821/l50
0192デフォルトの名無しさん
2007/11/18(日) 19:38:56マウスを高速でぐりぐり動かしても表示がもったりしないような。
もちろんC#で。
具体的にはこんな感じで
(100,230)
↑
0193デフォルトの名無しさん
2007/11/18(日) 19:44:16普通に、イベントはMouseMoveを取得、表示はカーソルを自分で作成する。
0194デフォルトの名無しさん
2007/11/18(日) 19:52:09親フォームのMouseMoveで位置とテキストを更新すれば
0195デフォルトの名無しさん
2007/11/18(日) 19:56:28http://www.microsoft.com/japan/msdn/windows/windows2000/ddhelp_pt1.aspx
0196デフォルトの名無しさん
2007/11/18(日) 21:03:59お手軽かつ確実じゃないか。
まあ、一見便利そうで鬱陶しいUIの見本みたいになりそうだけど。
ステータスバーか、もしくは専用の表示スペース作って表示するのが普通に感じる
0197デフォルトの名無しさん
2007/11/18(日) 22:06:36具体的にいいますと http://www.codeproject.com/cs/miscctrl/XPTaskBar.asp を Vista で動かすときに
デフォルトのままだと描画に不具合が生じるのでクラシックテーマに変更するメソッドを実行させたいのです。
0198デフォルトの名無しさん
2007/11/18(日) 22:12:48まあデザイン時か実行時かはDesignModeプロパティで一応判別ができる。
MSDNライブラリよく読まないとハマる可能性があるけど
0199デフォルトの名無しさん
2007/11/18(日) 22:28:23デザイン時は親フォームの InitializeComponent しか呼び出されないので、その呼び出しをどうやって知ろうかな、と。
0200デフォルトの名無しさん
2007/11/18(日) 23:01:430201デフォルトの名無しさん
2007/11/19(月) 00:22:47IDropTargetHelperって簡単なんだな
今作ってるやつにちょこっと足したらできた
0202デフォルトの名無しさん
2007/11/19(月) 00:25:11デバイスコンテキスト関連が面倒なんじゃないか?
GDIは癖があってあまり好きになれないんだよな。
0203デフォルトの名無しさん
2007/11/19(月) 01:22:55DC関連てソースの話じゃね?
ターゲットの場合、ドラッグイメージの描画はOSつーかexplorerがやってくれるよ?
Vistaならあのでかいアイコンとコピー/移動だかのインジケータ含めて。
問題は下のウィンドウの描画みたいだけど、
Vistaなせいなのかホバーしたときの描画がたいしたことないせいなのか
IDropTargetHelper.ShowまわりはいじらなくてもOKだった
つーか訳ありでIDropTarget自前実装だから簡単だったわけだけど
0204デフォルトの名無しさん
2007/11/19(月) 13:17:58画像を貼り付けて配置をmiddlecenterにしても
中央に表示されません。どうすれば上手く表示出来ますか?
0205デフォルトの名無しさん
2007/11/19(月) 13:47:49それはふらっと向けの質問だな。
そのプロパティがどのプロパティと関連があるのかライブラリを見ておくこと。
0206デフォルトの名無しさん
2007/11/19(月) 15:06:34ありがとうございます。まだ上手くいきませんが頑張ってみます。
レスありがとうございました。
0207デフォルトの名無しさん
2007/11/20(火) 10:36:170208デフォルトの名無しさん
2007/11/20(火) 10:54:10ttp://www.hinet.mydns.jp/tdiary/?date=20050517
SPIのC#ラッパーはそこらに転がってると思う.
0209デフォルトの名無しさん
2007/11/20(火) 11:37:43なるほど、Susieですか。
GhostScriptを扱うAPIがあるといいんですけどねぇ。難しいのかな。
0210デフォルトの名無しさん
2007/11/20(火) 20:11:49コマンドライン引数渡してプロセス動かせば良くね?
0211デフォルトの名無しさん
2007/11/21(水) 00:00:35そのようなメソッドはありますか?
0212デフォルトの名無しさん
2007/11/21(水) 00:02:31素直に接続時の例外でチェックした方がいい、ぞ
netstat みたいな事をしたいというんだったら別だが
0213デフォルトの名無しさん
2007/11/21(水) 11:48:37現在1024bitRSAを使用した通信のプログラムを作っているのですが・・・
相手の公開鍵が判明してる場合
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaParameters = new RSAParameters();
rsaParameters.Modulus = 相手の公開鍵(0x80byte)
rsaParameters.Exponent = {1,0,1};
rsa.ImportParameters(rsaParameters);
暗号化済みデータ = rsa.encrypt(暗号化したいデータ,false);
で、大丈夫なのでしょうか?
いまいちRSAの使い方がわからないのでわかるかたいらっしゃいましたらお願いします。
0214デフォルトの名無しさん
2007/11/21(水) 19:47:560215デフォルトの名無しさん
2007/11/21(水) 19:48:230216デフォルトの名無しさん
2007/11/21(水) 20:20:03できました!ありがとうございます!
0217デフォルトの名無しさん
2007/11/23(金) 01:31:53TextBox に一度フォーカスを合わせると、以降 Form の MouseWheel イベントが呼ばれなくなります。
回避方法を教えてください。
0218デフォルトの名無しさん
2007/11/23(金) 02:18:05フォーカスまわりが怪しい挙動するときがあるよね
toolStripTextBox.Leaveでform.Focus();したらどうか
0219デフォルトの名無しさん
2007/11/23(金) 03:57:38共有しようとしたのですがEXEを起動させたらすぐに異常終了
してしまいます。
これは何故でしょうか?クライアントに置いて起動すると
問題なく動きます。
VB6で全く同じ内容のEXEはファイルサーバ上でも
起動できたのに・・・
0220デフォルトの名無しさん
2007/11/23(金) 04:16:28新規プロジェクトで作ったなにもコード書いてないexeでも?
0221デフォルトの名無しさん
2007/11/23(金) 04:23:48何もコードを書いていないEXEでは今のところ試していません。
内容はあるファイルをある場所へコピーするだけのプログラムです。
0222デフォルトの名無しさん
2007/11/23(金) 07:06:44ネットワーク上にあるファイルは制限ゾーンで実行される。
とくに設定をしなければInternetZone扱いで実行されるんでほとんどのプログラムは動かない。
動かしたければポリシーをいじって、\\server\hoge\* のは
FullTrustといったふうに設定することになる。
0223デフォルトの名無しさん
2007/11/23(金) 10:50:10その辺から勉強した方がいいよ。
0224デフォルトの名無しさん
2007/11/23(金) 12:32:210225デフォルトの名無しさん
2007/11/23(金) 16:33:450226デフォルトの名無しさん
2007/11/23(金) 16:42:53アンカーが無いと誰にレスしているのか分らない。
0227デフォルトの名無しさん
2007/11/23(金) 18:51:480228デフォルトの名無しさん
2007/11/23(金) 21:18:36どっちにしても署名だけじゃ駄目だわな。
0229デフォルトの名無しさん
2007/11/23(金) 22:52:390230デフォルトの名無しさん
2007/11/23(金) 23:21:140231デフォルトの名無しさん
2007/11/24(土) 00:20:460232デフォルトの名無しさん
2007/11/24(土) 01:07:52試してみたらfor(int i=0;i<array.Length;i++)で回すより速いね
どういう実装になってるんだろう
0233デフォルトの名無しさん
2007/11/24(土) 01:29:090234デフォルトの名無しさん
2007/11/24(土) 01:36:25System名前空間のよく使う順(親階層が同じなら揃える)
その他外部のライブラリの名前空間
自分で作った名前空間
俺はこんな感じ
0235デフォルトの名無しさん
2007/11/24(土) 01:39:300236デフォルトの名無しさん
2007/11/24(土) 01:40:410237デフォルトの名無しさん
2007/11/24(土) 02:35:50よう俺。
0238デフォルトの名無しさん
2007/11/24(土) 02:37:010239デフォルトの名無しさん
2007/11/24(土) 08:29:13そんな機能付いたっけ
0240デフォルトの名無しさん
2007/11/24(土) 08:59:080241デフォルトの名無しさん
2007/11/24(土) 12:26:120242デフォルトの名無しさん
2007/11/24(土) 12:31:490243デフォルトの名無しさん
2007/11/24(土) 12:39:300244デフォルトの名無しさん
2007/11/24(土) 12:49:490245デフォルトの名無しさん
2007/11/24(土) 12:52:190246デフォルトの名無しさん
2007/11/24(土) 12:53:54これからしばらくの間、このスレでしょっちゅう見かけるに違いない
0247デフォルトの名無しさん
2007/11/24(土) 12:58:06生産性あがるうううううう
0248デフォルトの名無しさん
2007/11/24(土) 15:05:49nameの意味を調べればこの違和感に気づくだろうが
0249デフォルトの名無しさん
2007/11/24(土) 15:10:180250デフォルトの名無しさん
2007/11/24(土) 15:50:550251デフォルトの名無しさん
2007/11/24(土) 16:58:120252デフォルトの名無しさん
2007/11/24(土) 17:52:15LINQ以外は大体C#3.0の機能が使えます!
日本語版は開発完了が年内予定か
個人で買うには高いんだよなー…一応買うつもりだけど
■ このスレッドは過去ログ倉庫に格納されています