C♯, C#相談室 Part35
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/03(金) 03:07:45前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0554474
2006/11/26(日) 18:45:24のCLSIDは、↓このようになっております。(一応、うpしてみました。)
http://kasarfa.com/modules/php/bbs/ubbs/image/1164534281.gif
0555474
2006/11/26(日) 18:46:21レスありがとうございます。
えっと、次は何をうpすればよろしいでしょうか。
0556デフォルトの名無しさん
2006/11/26(日) 18:46:340557デフォルトの名無しさん
2006/11/26(日) 18:46:53聞く前に試せよ
0558474
2006/11/26(日) 18:50:34いま、試しています。
WORD2003を完全アンインストールしました。
0559474
2006/11/26(日) 18:51:26WORD2003をアンインストールしたら
このCLSIDは、併せて削除されていました。
0560474
2006/11/26(日) 18:52:52このフォルダにあるテンプレートもバックアップした上で削除しておきました。
それでは、改めてインストールしてみます。
暖かいご支援、ありがとうございmす。
0561デフォルトの名無しさん
2006/11/26(日) 19:51:330562デフォルトの名無しさん
2006/11/26(日) 20:03:000563デフォルトの名無しさん
2006/11/26(日) 20:55:22答えてるっつーかからかってるように見える
0564デフォルトの名無しさん
2006/11/26(日) 22:13:23Dispose()でいいんですか?
Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて
解放されていないようなんですけど。
Disposeした後、解放のタイミングはCLRにおまかせで、
今すぐメモリ解放ということは不可能なんですか?
0565デフォルトの名無しさん
2006/11/26(日) 22:16:43>解放されていないようなんですけど
そういうことはやめましょう。
null代入してほっとけばGCされるのでほっとけ。
0566デフォルトの名無しさん
2006/11/26(日) 22:18:41お前C++使いだな
ふらっとC♯, C#(初心者用) Part10
http://pc8.2ch.net/test/read.cgi/tech/1162193452/
0567デフォルトの名無しさん
2006/11/26(日) 22:25:18http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html
0568474
2006/11/26(日) 22:41:420569デフォルトの名無しさん
2006/11/26(日) 22:45:08メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い
ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
メモリ解放はdisposeと同様に即座にはされないようですけど。
>>566
いや、C#君ですよ。低レベルすぎてスレ違い?
>>567
よんだけどそれ回答になってないでしょ。
ずばり、インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか?
という問いの答えは、マネージドコードでは不可能 なんですかね。
0570デフォルトの名無しさん
2006/11/26(日) 22:47:26nullを代入することに何の意味があるんだ?
0571デフォルトの名無しさん
2006/11/26(日) 22:48:39んなこといってるからC++使いだって言われるんじゃよー
> マネージドコードでは不可能
GC対象メモリであれば強制GCを呼べばいいよ。System.GCだっけ。
でも実際に行われるかどうかは知らない。
メモリ使用量がタスクマネージャのそれだとすれば、不可能だねえ。
ヒープはすぐにコンパクト化されるわけではないし。
0572デフォルトの名無しさん
2006/11/26(日) 22:50:250573デフォルトの名無しさん
2006/11/26(日) 22:50:350574デフォルトの名無しさん
2006/11/26(日) 22:59:06Disposeとメモリ解放は全く関係ありません。
Disposeが解放するのはアンマネージドリソースです。
0575デフォルトの名無しさん
2006/11/26(日) 23:00:37GCは確保したオブジェクトが、どこかから参照されているかどうかで
GC対象かどうか判断してるんじゃなかったっけ?
null代入して参照数をゼロにしないと、プログラム終了まで
インスタンスメモリは確保されっぱなしの可能性がある。
0576デフォルトの名無しさん
2006/11/26(日) 23:02:35>それが単なるメモリ領域なら、使用可能なメモリ容量に余裕がある限り、
>回収されずに放置されるケースがあってもそれほど問題とはならない
0577474
2006/11/26(日) 23:03:280578デフォルトの名無しさん
2006/11/26(日) 23:04:35スコープってしってる?
0579デフォルトの名無しさん
2006/11/26(日) 23:05:24ぐだぐだやってないでOSからクリーンインスコしろ
0580デフォルトの名無しさん
2006/11/26(日) 23:06:02一般的には、弱参照以外の参照を切ってGC.CollectでGC発動
させれば回収される。
Finalizer持っていてかつ、SupressFinalizeされていなければ、
さらにFinalizerの終了を待って、GC.Collectで回収。
ただ、この行為はともにスループットをほぼ確実に落とす。
もっといえば、2.0だとさらに複雑になっていて「正確に」こんな
ところで説明するのは長すぎるかも。「即開放は不可能」というより、
システム側にその権利は譲った(そして最適化の余地を作った)が
正しい。
0581474
2006/11/26(日) 23:07:240582デフォルトの名無しさん
2006/11/26(日) 23:09:44スコープから外れない場合があることを忘れずに…
form
0583デフォルトの名無しさん
2006/11/26(日) 23:14:09vbsとかからはCreateObjectできんの?
0584デフォルトの名無しさん
2006/11/26(日) 23:15:53スルーします。
0585デフォルトの名無しさん
2006/11/26(日) 23:16:22ttp://etc4.2ch.net/test/read.cgi/male/1156204826/
0586デフォルトの名無しさん
2006/11/26(日) 23:17:15思わず吹いた
0587デフォルトの名無しさん
2006/11/26(日) 23:21:16古いけどググレカスでいいのかな?
http://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
0588デフォルトの名無しさん
2006/11/26(日) 23:56:520589デフォルトの名無しさん
2006/11/26(日) 23:57:17>ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
何言ってんだか
0590デフォルトの名無しさん
2006/11/26(日) 23:59:04即開放は必要ないんじゃない?それに即開放が正しいかどうか分からない場合がある。
C++等では開放してはいけないメモリを勝手に開放して困る場合があった。
人間は簡単にへまをする。
GCだとその可能性は低い。
0591デフォルトの名無しさん
2006/11/27(月) 00:01:04上に書いてあるように
>インスタンスのプロパティに普通にアクセスできるし変更できて
とあるじゃないか?
0592デフォルトの名無しさん
2006/11/27(月) 00:03:17デストラクタはObject.Finalizeのオーバーライドにコンパイルされる。
0593474
2006/11/27(月) 00:03:22レス、ありがとう。でも、12時過ぎて電源落とされたんで、タクシーで家に帰ることにしました。明日、朝一でまたクライアントのところへ出張いかないとです…なおんなくって怒られるのが目に見えてて鬱です…。
0594デフォルトの名無しさん
2006/11/27(月) 00:03:26この意味が理解できるか?ってか意味不明
0595デフォルトの名無しさん
2006/11/27(月) 00:14:26マネージドではどのリソースがどこのメモリ空間を占有しているって概念がないのよ。
fixedしないとポインタが使えないのも、勝手に整理されてメモリ上を動いてしまうから。
0596デフォルトの名無しさん
2006/11/27(月) 00:35:530597デフォルトの名無しさん
2006/11/27(月) 00:40:310598デフォルトの名無しさん
2006/11/27(月) 00:43:24ならDispose()しないでいいじゃんってこと?
ばかん♪
0599デフォルトの名無しさん
2006/11/27(月) 00:43:47読解力ないんだよ。
0600デフォルトの名無しさん
2006/11/27(月) 00:45:420601デフォルトの名無しさん
2006/11/27(月) 00:48:15Disposeはオブジェクトの持っているアンマネージドリソースを開放するメソッド
0602デフォルトの名無しさん
2006/11/27(月) 00:49:41そこまで気になるなら勝手にCでも使っててくれよ。
0603デフォルトの名無しさん
2006/11/27(月) 00:50:010604デフォルトの名無しさん
2006/11/27(月) 00:55:100605デフォルトの名無しさん
2006/11/27(月) 00:59:46じゃ意味が通るように説明してみろ。
null代入したら普通はたどれる元がないんだから
そりゃメンバにはアクセスできんだろうが、
「それはあとかたなく開放されたからだ」
とでも言う気かよ。
GC起こるまで消えてないことには何のかわりもない。
なんらかの方法でメンバにアクセスしたら普通にアクセスできるわな。
0606デフォルトの名無しさん
2006/11/27(月) 01:00:58厳密に言えばSystem.Transactionsのような例外も出てきたから
そうではないのだけど、主目的なのは確かだな。
つか一回Disposeが必要なクラス、アンマネージラッパを書いて
みればとてもよくわかるんだけど、それなりに暗黒面なので難しい
のだろうなぁ。
0607デフォルトの名無しさん
2006/11/27(月) 01:01:39それってシュレディンガーの猫っぽいね
0608デフォルトの名無しさん
2006/11/27(月) 01:15:38ふふふ。覚えた言葉をうれしそうに遣いたがる。
0609デフォルトの名無しさん
2006/11/27(月) 01:40:240610デフォルトの名無しさん
2006/11/27(月) 01:56:09オマイの日本語お勉強スレじゃねーんだよ
0611デフォルトの名無しさん
2006/11/27(月) 01:56:43mobileでのwebアプリを作るにあたって、DBから値を引っ張ってきてそれを元にmobilelistitemを作成し、selectionlist.items.add(item)してるんだが、通常はこんなことしないんだろうか?
itemの横にcheckboxをつけてそこを選択してから確認ボタンを押すとチェックのついた項目だけ何か操作を行う、といったことがしたいんだが…。
selectionlistに動的にitemを加える作業をすると確認ボタンを押したときにエラーが起こる。indexが不正だというエラーが出る。なんでだろう?
0612デフォルトの名無しさん
2006/11/27(月) 03:22:03はん、おかしいことにおかしいといったら日本語云々だあ?
たく最近はこんなのばっかだな。
こっちはちゃんと説明してるってのにな。
それともこんな簡単な内容すら理解できん馬鹿だったか。
0613デフォルトの名無しさん
2006/11/27(月) 03:24:16簡潔におながいします
0614デフォルトの名無しさん
2006/11/27(月) 06:29:56まだこんなに煽りに過敏に反応する奴がいるのか。
まだまだ捨てたもんじゃないなwww
0615474
2006/11/27(月) 09:13:010616474
2006/11/27(月) 10:16:59word2003の修復を3回、
word2003の再インストール直後のofficeのアップデート1回
これで直りました。
特に、「word2003の再インストール直後のofficeのアップデート1回
」が決め手だったような気がしました。
みなさんも、僕と同じエラーが出たときには、
決して、OSの再インスコなどせずに、
word2003の再インスコなどを試してみてください。
それじゃ、さようなら、ごきげんよう、へけけのけ。
0617デフォルトの名無しさん
2006/11/27(月) 11:00:43一つ質問だが、>600はintとかstringとかを使ってて
「滅させる処理書かないとと構文的にシンメトリーじゃないじゃん」とか
考えてる?
0618611
2006/11/27(月) 12:39:33要するにmobile用のフォームでチェックボックスが使いたいんです。そこでselectionlistを使おうと思ったんだけど、普通これってすでに中に入るitemが決まってるもんじゃん?例えば男と女を選択させるみたいな。
でも今回はそうじゃなくてDBからとってきたものにチェックボックスをつけて選択させたいのよ。
0619デフォルトの名無しさん
2006/11/27(月) 15:44:02具体的に言えば、リストを二つ並べて、右側のリストをスクロールさせた際に、
左側のリストも連動してスクロールするようなプログラムを作りたいのですが…
WndProcからスクロールイベントを取得する事はできたのですが、そこで行き詰ってしまいましたm(_ _)m
0620デフォルトの名無しさん
2006/11/27(月) 16:37:070621デフォルトの名無しさん
2006/11/27(月) 16:47:20ListView.TopItem
0622デフォルトの名無しさん
2006/11/27(月) 21:38:56インデックス取るだけならLVM_GETTOPINDEX投げるほうが速いかもね。
0623デフォルトの名無しさん
2006/11/27(月) 22:44:35でKeyの長さでソートするようにSortedDictionary<string,int>のコンストラクタに指定したいんですけど
どうすればいいですか?
0624デフォルトの名無しさん
2006/11/27(月) 22:52:12なんてVC++を使っているように思えるが、そんな人にする質問にはとても
思えん
0625デフォルトの名無しさん
2006/11/27(月) 23:13:250626デフォルトの名無しさん
2006/11/28(火) 00:49:030627デフォルトの名無しさん
2006/11/28(火) 01:00:29後は private なインスタンスフィールド辺りだな
0628デフォルトの名無しさん
2006/11/28(火) 01:01:10CLRはフィールドとメソッドの引数が小ラクダ式で、その他は大ラクダ式になってるが。
0629デフォルトの名無しさん
2006/11/28(火) 01:13:500630デフォルトの名無しさん
2006/11/28(火) 01:16:550631デフォルトの名無しさん
2006/11/28(火) 01:27:07http://www.atmarkit.co.jp/fdotnet/special/pdc2005_02/pdc2005_02_02.html
0632デフォルトの名無しさん
2006/11/28(火) 10:22:35>SmtpException
>SMTP サーバーへの接続に失敗しました。
>または
>認証に失敗しました。
>または
>操作がタイムアウトしました。
とあります。
認証失敗等はともかく、このメソッドでタイムアウトが原因でこの例外が発生することはあり得るのでしょうか?
0633デフォルトの名無しさん
2006/11/28(火) 10:41:41別スレッドで起きた冷害はボタン(元スレ)のcatchでは処理できないですよね。
別スレッドの例外をフォーム側で処理したい(メッセージボックスを出すとか)
のですが、どうしたらいいですか?
0634デフォルトの名無しさん
2006/11/28(火) 10:43:35Application.ThreadException
0635デフォルトの名無しさん
2006/11/28(火) 14:26:36これを容易にするコントロールなどは標準で提供されているのでしょうか?
0636デフォルトの名無しさん
2006/11/28(火) 14:31:30なんでもそれで対応出来ると思ってんのか?
0637デフォルトの名無しさん
2006/11/28(火) 14:43:38スレッド内で発生した例外はそのスレッドでcatchする。
必要なら UI スレッド側のフォームのメソッドをinvokeするとかしてユーザに通知する。
処理完了の通知と何ら変わるトコないですよ。
0638デフォルトの名無しさん
2006/11/28(火) 16:09:320639デフォルトの名無しさん
2006/11/28(火) 16:31:39ユーザはtrueを渡して、ランタイムライブラリはfalseを渡すことになっている。
0640デフォルトの名無しさん
2006/11/28(火) 16:43:300641デフォルトの名無しさん
2006/11/28(火) 17:40:35postDataってどーやれば文字列型に変換できますか?
0642デフォルトの名無しさん
2006/11/28(火) 18:03:51if(e.postData != null)
{
s = System.Text.Encoding.ASCII.GetString((byte[])e.postData);
}
てな具合で文字列に変換できる
0643デフォルトの名無しさん
2006/11/28(火) 18:07:07642に加えてmime-encodingかURLEncodeかされてると思うんで、
そいつをdecodeして素のbyte[]にしたうえで、適切なencodingで
GetStringする。
0644デフォルトの名無しさん
2006/11/28(火) 18:11:32641です
ありがとうございます
今のところ、アルファベットと数字だけなので642の方法でうまくいきました
日本語使うようになったら643の方法にトライします
0645デフォルトの名無しさん
2006/11/28(火) 21:36:37文中でカタログの例と言っている彼の論理C#コード(脳内コード)をどなたか補完して頂けないでしょうか。
(できれば次のイベントを使った例まで行きたいのですがここでつまづいています)
ttp://vsug.jp/tabid/63/forumid/51/postid/3057/view/topic/Default.aspx
0646デフォルトの名無しさん
2006/11/28(火) 22:26:11俺はこういう風に理解した。
----
interface IHogeFactory
{
IHoge CreateInstance();
}
static class HogeCatalog
{
private static Dictonary<Type, IHogeFactory> catalog = new Dictonary<Type, IHogeFactory>();
public static IHoge CreateInstance( Type type )
{
return catalog[type].CreateInstance();
}
public static void Regitster( Type type, IHogeFactory factory ) {
catalog[type] = factory;
}
}
class HogeA: IHoge { }
class HogeFactoryA : IHogeFactory
{
public static HogeFactoryA() { HogeCatalog.Register( typeof(HogeA), new HogeFactoryA(); }
public IHoge CreateInstance() { return new HogeA(); }
}
0647デフォルトの名無しさん
2006/11/28(火) 22:40:43ファイナライザでは実行順序が不定のため他のマネージ参照に
触ってはいけないから、ユーザーコードから呼び出されたDisposeと
ファイナライザから呼び出されたDipsoseで処理を分ける必要がある。
C++/CLIでもデストラクタ、ファイナライザはこのパターンを利用して
ILを生成している。雑談だが。
0648デフォルトの名無しさん
2006/11/28(火) 22:41:15一つのFormで2つのBackgroundWorkerをつかっているのですが、
Formでの処理が重ならないように、どこかで同期させたいのですが、
タイミングは手動でとるしかないのでしょうか?
手動でとるにはどのような方法がありますか?
ManualResetEvent などをうまく使うのでしょうか?
どなたか教えてもらえませんか?
0649デフォルトの名無しさん
2006/11/28(火) 22:42:31その程度ならこれくらいでいいんじゃねーかな。
IHoge CreateInstance<T>() where T : IHoge, new()
{
return new T();
}
0650デフォルトの名無しさん
2006/11/28(火) 22:47:01Invokeじゃだめなん?
0651デフォルトの名無しさん
2006/11/28(火) 22:50:36Tをハードコーディングできるなら、直接newするだろ
0652デフォルトの名無しさん
2006/11/28(火) 23:07:57わろた。
newって書くのとかわんねー
ちなみに
Activator.CteateInstance<T>()
てのが標準であるぞw
0653デフォルトの名無しさん
2006/11/28(火) 23:08:35処理はメインスレッドで行われるので同時にってことはあり得ない
■ このスレッドは過去ログ倉庫に格納されています