トップページ⇒tech
1001コメント308KB

C♯, C#相談室 Part35

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
05584742006/11/26(日) 18:50:34
>>557
いま、試しています。
WORD2003を完全アンインストールしました。
05594742006/11/26(日) 18:51:26
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}

WORD2003をアンインストールしたら
このCLSIDは、併せて削除されていました。
05604742006/11/26(日) 18:52:52
C:\Documents and Settings\Administrator\Application Data\Microsoft

このフォルダにあるテンプレートもバックアップした上で削除しておきました。
それでは、改めてインストールしてみます。
暖かいご支援、ありがとうございmす。
0561デフォルトの名無しさん2006/11/26(日) 19:51:33
何でこんなにスレが汚れてる?
0562デフォルトの名無しさん2006/11/26(日) 20:03:00
明らかにスレ違いな質問に親切に答えちゃってるからだろう。
0563デフォルトの名無しさん2006/11/26(日) 20:55:22
>>562
答えてるっつーかからかってるように見える
0564デフォルトの名無しさん2006/11/26(日) 22:13:23
インスタンス生成して、もういらなくなったからメモリ解放したい場合って
Dispose()でいいんですか?
Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて
解放されていないようなんですけど。
Disposeした後、解放のタイミングはCLRにおまかせで、
今すぐメモリ解放ということは不可能なんですか?
0565デフォルトの名無しさん2006/11/26(日) 22:16:43
>Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて
>解放されていないようなんですけど

そういうことはやめましょう。

null代入してほっとけばGCされるのでほっとけ。
0566デフォルトの名無しさん2006/11/26(日) 22:18:41
>>564
お前C++使いだな

ふらっとC♯, C#(初心者用) Part10
http://pc8.2ch.net/test/read.cgi/tech/1162193452/
0567デフォルトの名無しさん2006/11/26(日) 22:25:18
えーっとググレカスでいいのかな?

http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html
05684742006/11/26(日) 22:41:42
スレチでしょうか…
0569デフォルトの名無しさん2006/11/26(日) 22:45:08
>>565
メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い
ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
メモリ解放はdisposeと同様に即座にはされないようですけど。
>>566
いや、C#君ですよ。低レベルすぎてスレ違い?
>>567
よんだけどそれ回答になってないでしょ。

ずばり、インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか?
という問いの答えは、マネージドコードでは不可能 なんですかね。
0570デフォルトの名無しさん2006/11/26(日) 22:47:26
>>565
nullを代入することに何の意味があるんだ?
0571デフォルトの名無しさん2006/11/26(日) 22:48:39
> インスタンスが使用しているメモリ空間を即解放

んなこといってるからC++使いだって言われるんじゃよー

> マネージドコードでは不可能

GC対象メモリであれば強制GCを呼べばいいよ。System.GCだっけ。
でも実際に行われるかどうかは知らない。

メモリ使用量がタスクマネージャのそれだとすれば、不可能だねえ。
ヒープはすぐにコンパクト化されるわけではないし。
0572デフォルトの名無しさん2006/11/26(日) 22:50:25
頭の中のすべては値型にでもなってるんじゃマイカ?
0573デフォルトの名無しさん2006/11/26(日) 22:50:35
つかなんのための「マネージド」だと思ってんだろ
0574デフォルトの名無しさん2006/11/26(日) 22:59:06
C#では、メモリ管理はGCにまかせましょう。(つまりメモリ解放のタイミングは予測不可。それでいい。)
Disposeとメモリ解放は全く関係ありません。
Disposeが解放するのはアンマネージドリソースです。
0575デフォルトの名無しさん2006/11/26(日) 23:00:37
>>570
GCは確保したオブジェクトが、どこかから参照されているかどうかで
GC対象かどうか判断してるんじゃなかったっけ?
null代入して参照数をゼロにしないと、プログラム終了まで
インスタンスメモリは確保されっぱなしの可能性がある。
0576デフォルトの名無しさん2006/11/26(日) 23:02:35
>>569

>それが単なるメモリ領域なら、使用可能なメモリ容量に余裕がある限り、
>回収されずに放置されるケースがあってもそれほど問題とはならない
05774742006/11/26(日) 23:03:28
誘導お願いします、家に帰れません…
0578デフォルトの名無しさん2006/11/26(日) 23:04:35
>>575
スコープってしってる?
0579デフォルトの名無しさん2006/11/26(日) 23:05:24
>>577
ぐだぐだやってないでOSからクリーンインスコしろ
0580デフォルトの名無しさん2006/11/26(日) 23:06:02
>>596
一般的には、弱参照以外の参照を切ってGC.CollectでGC発動
させれば回収される。
Finalizer持っていてかつ、SupressFinalizeされていなければ、
さらにFinalizerの終了を待って、GC.Collectで回収。
ただ、この行為はともにスループットをほぼ確実に落とす。

もっといえば、2.0だとさらに複雑になっていて「正確に」こんな
ところで説明するのは長すぎるかも。「即開放は不可能」というより、
システム側にその権利は譲った(そして最適化の余地を作った)が
正しい。
05814742006/11/26(日) 23:07:24
誘導お願いします、家に帰れません…
0582デフォルトの名無しさん2006/11/26(日) 23:09:44
>>578
スコープから外れない場合があることを忘れずに…

form
0583デフォルトの名無しさん2006/11/26(日) 23:14:09
>>581
vbsとかからはCreateObjectできんの?
0584デフォルトの名無しさん2006/11/26(日) 23:15:53
環境依存っぽいからこちら側では解答できません。
スルーします。
0585デフォルトの名無しさん2006/11/26(日) 23:16:22
>>474
ttp://etc4.2ch.net/test/read.cgi/male/1156204826/
0586デフォルトの名無しさん2006/11/26(日) 23:17:15
>>585
思わず吹いた
0587デフォルトの名無しさん2006/11/26(日) 23:21:16
>>569
古いけどググレカスでいいのかな?

http://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
0588デフォルトの名無しさん2006/11/26(日) 23:56:52
クラスのデストラクタはなんに使うですか?
0589デフォルトの名無しさん2006/11/26(日) 23:57:17
>メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い
>ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
何言ってんだか
0590デフォルトの名無しさん2006/11/26(日) 23:59:04
>インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか?
即開放は必要ないんじゃない?それに即開放が正しいかどうか分からない場合がある。
C++等では開放してはいけないメモリを勝手に開放して困る場合があった。
人間は簡単にへまをする。
GCだとその可能性は低い。
0591デフォルトの名無しさん2006/11/27(月) 00:01:04
>>589
上に書いてあるように
>インスタンスのプロパティに普通にアクセスできるし変更できて
とあるじゃないか?
0592デフォルトの名無しさん2006/11/27(月) 00:03:17
>>588
デストラクタはObject.Finalizeのオーバーライドにコンパイルされる。
05934742006/11/27(月) 00:03:22
>583
レス、ありがとう。でも、12時過ぎて電源落とされたんで、タクシーで家に帰ることにしました。明日、朝一でまたクライアントのところへ出張いかないとです…なおんなくって怒られるのが目に見えてて鬱です…。
0594デフォルトの名無しさん2006/11/27(月) 00:03:26
その流れで、nullを代入した後だとあとかたもなくなった
この意味が理解できるか?ってか意味不明
0595デフォルトの名無しさん2006/11/27(月) 00:14:26
>>569
マネージドではどのリソースがどこのメモリ空間を占有しているって概念がないのよ。
fixedしないとポインタが使えないのも、勝手に整理されてメモリ上を動いてしまうから。
0596デフォルトの名無しさん2006/11/27(月) 00:35:53
Dispose()したオブジェクトは消滅していないのでしょうか?
0597デフォルトの名無しさん2006/11/27(月) 00:40:31
Dispose だろうがただのメソッドだ
0598デフォルトの名無しさん2006/11/27(月) 00:43:24
>>596
ならDispose()しないでいいじゃんってこと?
ばかん♪
0599デフォルトの名無しさん2006/11/27(月) 00:43:47
>>594
読解力ないんだよ。
0600デフォルトの名無しさん2006/11/27(月) 00:45:42
いやさ消滅させる処理書かないとと構文的にシンメトリーじゃないじゃん?
0601デフォルトの名無しさん2006/11/27(月) 00:48:15
>>596
Disposeはオブジェクトの持っているアンマネージドリソースを開放するメソッド
0602デフォルトの名無しさん2006/11/27(月) 00:49:41
>>600
そこまで気になるなら勝手にCでも使っててくれよ。
0603デフォルトの名無しさん2006/11/27(月) 00:50:01
リセットボタンおせば消滅するよ
0604デフォルトの名無しさん2006/11/27(月) 00:55:10
Cつかってもfreeが必要ないとか言い出すバカがいるわけで
0605デフォルトの名無しさん2006/11/27(月) 00:59:46
>>599
じゃ意味が通るように説明してみろ。

null代入したら普通はたどれる元がないんだから
そりゃメンバにはアクセスできんだろうが、
「それはあとかたなく開放されたからだ」
とでも言う気かよ。
GC起こるまで消えてないことには何のかわりもない。
なんらかの方法でメンバにアクセスしたら普通にアクセスできるわな。
0606デフォルトの名無しさん2006/11/27(月) 01:00:58
>>601
厳密に言えばSystem.Transactionsのような例外も出てきたから
そうではないのだけど、主目的なのは確かだな。

つか一回Disposeが必要なクラス、アンマネージラッパを書いて
みればとてもよくわかるんだけど、それなりに暗黒面なので難しい
のだろうなぁ。
0607デフォルトの名無しさん2006/11/27(月) 01:01:39
>>605
それってシュレディンガーの猫っぽいね
0608デフォルトの名無しさん2006/11/27(月) 01:15:38
>>607
ふふふ。覚えた言葉をうれしそうに遣いたがる。
0609デフォルトの名無しさん2006/11/27(月) 01:40:24
きもいよ
0610デフォルトの名無しさん2006/11/27(月) 01:56:09
>>605
オマイの日本語お勉強スレじゃねーんだよ
0611デフォルトの名無しさん2006/11/27(月) 01:56:43
いきなり横やりスマソ。

mobileでのwebアプリを作るにあたって、DBから値を引っ張ってきてそれを元にmobilelistitemを作成し、selectionlist.items.add(item)してるんだが、通常はこんなことしないんだろうか?

itemの横にcheckboxをつけてそこを選択してから確認ボタンを押すとチェックのついた項目だけ何か操作を行う、といったことがしたいんだが…。
selectionlistに動的にitemを加える作業をすると確認ボタンを押したときにエラーが起こる。indexが不正だというエラーが出る。なんでだろう?
0612デフォルトの名無しさん2006/11/27(月) 03:22:03
>>610
はん、おかしいことにおかしいといったら日本語云々だあ?
たく最近はこんなのばっかだな。
こっちはちゃんと説明してるってのにな。
それともこんな簡単な内容すら理解できん馬鹿だったか。
0613デフォルトの名無しさん2006/11/27(月) 03:24:16
>>611
簡潔におながいします
0614デフォルトの名無しさん2006/11/27(月) 06:29:56
>>612
まだこんなに煽りに過敏に反応する奴がいるのか。
まだまだ捨てたもんじゃないなwww
06154742006/11/27(月) 09:13:01
なおりました。
06164742006/11/27(月) 10:16:59
word2003の再インストールを2回、
word2003の修復を3回、
word2003の再インストール直後のofficeのアップデート1回

これで直りました。
特に、「word2003の再インストール直後のofficeのアップデート1回
」が決め手だったような気がしました。

みなさんも、僕と同じエラーが出たときには、
決して、OSの再インスコなどせずに、
word2003の再インスコなどを試してみてください。

それじゃ、さようなら、ごきげんよう、へけけのけ。
0617デフォルトの名無しさん2006/11/27(月) 11:00:43
>600

一つ質問だが、>600はintとかstringとかを使ってて
「滅させる処理書かないとと構文的にシンメトリーじゃないじゃん」とか
考えてる?
06186112006/11/27(月) 12:39:33
>>613
要するにmobile用のフォームでチェックボックスが使いたいんです。そこでselectionlistを使おうと思ったんだけど、普通これってすでに中に入るitemが決まってるもんじゃん?例えば男と女を選択させるみたいな。

でも今回はそうじゃなくてDBからとってきたものにチェックボックスをつけて選択させたいのよ。
0619デフォルトの名無しさん2006/11/27(月) 15:44:02
Listviewのスクロール位置を取得する事は可能でしょうか?
具体的に言えば、リストを二つ並べて、右側のリストをスクロールさせた際に、
左側のリストも連動してスクロールするようなプログラムを作りたいのですが…
WndProcからスクロールイベントを取得する事はできたのですが、そこで行き詰ってしまいましたm(_ _)m
0620デフォルトの名無しさん2006/11/27(月) 16:37:07
C#3.0は来年末以降らしい(´・ω・`)
0621デフォルトの名無しさん2006/11/27(月) 16:47:20
>>619
ListView.TopItem
0622デフォルトの名無しさん2006/11/27(月) 21:38:56
>>619
インデックス取るだけならLVM_GETTOPINDEX投げるほうが速いかもね。
0623デフォルトの名無しさん2006/11/27(月) 22:44:35
SortedDictionary<string,int> m_dic;
でKeyの長さでソートするようにSortedDictionary<string,int>のコンストラクタに指定したいんですけど
どうすればいいですか?
0624デフォルトの名無しさん2006/11/27(月) 22:52:12
m_
なんてVC++を使っているように思えるが、そんな人にする質問にはとても
思えん
0625デフォルトの名無しさん2006/11/27(月) 23:13:25
IComparer<string> を実装させたクラスを定義すれば良いんだよ
0626デフォルトの名無しさん2006/11/28(火) 00:49:03
ラクダ式ってどうなったの?
0627デフォルトの名無しさん2006/11/28(火) 01:00:29
普通にメソッドのパラメータとかで使われてるぞ
後は private なインスタンスフィールド辺りだな
0628デフォルトの名無しさん2006/11/28(火) 01:01:10
どうなったって訊かれてもなあ。
CLRはフィールドとメソッドの引数が小ラクダ式で、その他は大ラクダ式になってるが。
0629デフォルトの名無しさん2006/11/28(火) 01:13:50
おれマルボロのほうが好きだぜ?
0630デフォルトの名無しさん2006/11/28(火) 01:16:55
俺は巨乳好き
0631デフォルトの名無しさん2006/11/28(火) 01:27:07
>>626
http://www.atmarkit.co.jp/fdotnet/special/pdc2005_02/pdc2005_02_02.html
0632デフォルトの名無しさん2006/11/28(火) 10:22:35
System.Net.Mail.SmtpClientのSendAsyncメソッドなのですが、ヘルプを読むと、
>SmtpException
>SMTP サーバーへの接続に失敗しました。
>または
>認証に失敗しました。
>または
>操作がタイムアウトしました。
とあります。
認証失敗等はともかく、このメソッドでタイムアウトが原因でこの例外が発生することはあり得るのでしょうか?
0633デフォルトの名無しさん2006/11/28(火) 10:41:41
Windows Formsのボタンからバッチ処理を別スレッドで走らせるんですが、
別スレッドで起きた冷害はボタン(元スレ)のcatchでは処理できないですよね。
別スレッドの例外をフォーム側で処理したい(メッセージボックスを出すとか)
のですが、どうしたらいいですか?
0634デフォルトの名無しさん2006/11/28(火) 10:43:35
>>633
Application.ThreadException
0635デフォルトの名無しさん2006/11/28(火) 14:26:36
VisualStudioのようなインテリセンスを持つエディタを実装したいのですが
これを容易にするコントロールなどは標準で提供されているのでしょうか?
0636デフォルトの名無しさん2006/11/28(火) 14:31:30
>>634
なんでもそれで対応出来ると思ってんのか?
0637デフォルトの名無しさん2006/11/28(火) 14:43:38
>>633
スレッド内で発生した例外はそのスレッドでcatchする。
必要なら UI スレッド側のフォームのメソッドをinvokeするとかしてユーザに通知する。
処理完了の通知と何ら変わるトコないですよ。
0638デフォルトの名無しさん2006/11/28(火) 16:09:32
bool受け取るDisposeは不要だと思うのですが
0639デフォルトの名無しさん2006/11/28(火) 16:31:39
>>638
ユーザはtrueを渡して、ランタイムライブラリはfalseを渡すことになっている。
0640デフォルトの名無しさん2006/11/28(火) 16:43:30
Il offre sa confiance et son amour.
0641デフォルトの名無しさん2006/11/28(火) 17:40:35
AxWebBrowserのBeforeNavigate2でpostデータ取得したいんだけど
postDataってどーやれば文字列型に変換できますか?
0642デフォルトの名無しさん2006/11/28(火) 18:03:51
string s = null;
if(e.postData != null)
{
s = System.Text.Encoding.ASCII.GetString((byte[])e.postData);
}
てな具合で文字列に変換できる
0643デフォルトの名無しさん2006/11/28(火) 18:07:07
>>641
642に加えてmime-encodingかURLEncodeかされてると思うんで、
そいつをdecodeして素のbyte[]にしたうえで、適切なencodingで
GetStringする。
0644デフォルトの名無しさん2006/11/28(火) 18:11:32
>>642,643
641です
ありがとうございます
今のところ、アルファベットと数字だけなので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
>>645
俺はこういう風に理解した。
----

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
>>638
ファイナライザでは実行順序が不定のため他のマネージ参照に
触ってはいけないから、ユーザーコードから呼び出されたDisposeと
ファイナライザから呼び出されたDipsoseで処理を分ける必要がある。

C++/CLIでもデストラクタ、ファイナライザはこのパターンを利用して
ILを生成している。雑談だが。
0648デフォルトの名無しさん2006/11/28(火) 22:41:15
最近、C#をはじめたのですが困っています。

一つのFormで2つのBackgroundWorkerをつかっているのですが、
Formでの処理が重ならないように、どこかで同期させたいのですが、
タイミングは手動でとるしかないのでしょうか?

手動でとるにはどのような方法がありますか?
ManualResetEvent などをうまく使うのでしょうか?

どなたか教えてもらえませんか?

0649デフォルトの名無しさん2006/11/28(火) 22:42:31
>>646
その程度ならこれくらいでいいんじゃねーかな。

IHoge CreateInstance<T>() where T : IHoge, new()
{
return new T();
}
0650デフォルトの名無しさん2006/11/28(火) 22:47:01
>>648
Invokeじゃだめなん?
0651デフォルトの名無しさん2006/11/28(火) 22:50:36
>>649
Tをハードコーディングできるなら、直接newするだろ
0652デフォルトの名無しさん2006/11/28(火) 23:07:57
>>649
わろた。
newって書くのとかわんねー
ちなみに
Activator.CteateInstance<T>()
てのが標準であるぞw

0653デフォルトの名無しさん2006/11/28(火) 23:08:35
そもそも BackgroundWorker の(GUI に触れる)イベントでは
処理はメインスレッドで行われるので同時にってことはあり得ない
0654デフォルトの名無しさん2006/11/28(火) 23:16:57
インターフェイスはなんに使うですぅ?
0655デフォルトの名無しさん2006/11/28(火) 23:27:35
インターフェイスに使う
0656デフォルトの名無しさん2006/11/28(火) 23:28:32
C#でメモリマップト(File Mappingモード)は使えますか?
使えるならその方法を教えてください
0657デフォルトの名無しさん2006/11/28(火) 23:30:34
>>654
翡翠石よ

クラスを継承させたりした場合で、必ず呼び出してほしい
メソッドがある場合に、インターフェースを入れると、
コンパイラが警告を入れてくれる。
■ このスレッドは過去ログ倉庫に格納されています