トップページ⇒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あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0409デフォルトの名無しさん2006/11/19(日) 15:24:10
XPとVista両方に.Net製のシェルエクステンションを仕込んでるけど、
XPはログオンに時間がかかるがVistaは確かにかなり速い。
0410デフォルトの名無しさん2006/11/19(日) 15:38:06
Vistaはリソース食い過ぎ('A`)


そういえば、Vista対応のために、XPからの変更点のまとめってありませんか?
システムフォルダがお引っ越しor内部で勝手にリンクするというのは聞いたんですが。
0411デフォルトの名無しさん2006/11/19(日) 15:38:58
Vista1/31リリースだっけか・・・
3年後位には主流になるのかねぇ・・・

0412デフォルトの名無しさん2006/11/19(日) 16:26:05
馬鹿発見>>408
0413デフォルトの名無しさん2006/11/19(日) 21:04:14
>>405
SuperFetchが効いてるんじゃね?重量級のアプリにはかなり
効くようだ。VSとか。
メモリたくさんつまないと駄目だけど。
04144052006/11/19(日) 21:23:29
>>413
メモリ2GB積んでる。
無駄にオーバースペックなもの買ってみた。

要するに、JIT が早いのは単にプロセッサ性能、
動作が速いのは .NET Framework のコンポーネントが
SuperFetch であらかじめメモリ上にロードされてるから
ってことでいいのかな?
0415デフォルトの名無しさん2006/11/19(日) 21:48:04
意外と知らないで遅い遅いと.NET使ってる奴が多いってことか
なんだかね
0416デフォルトの名無しさん2006/11/19(日) 23:28:29
>>415
パソコンを使っている人の大半はあなたみたいなヲタクではありません。
大半の人に使っていただくためには屁理屈こねて遅くないんだよなんていってて・・・
0417デフォルトの名無しさん2006/11/19(日) 23:33:11
>>416
415じゃないけど、開発者する人間なら…
04184172006/11/19(日) 23:33:49
× 開発者する人間
○ 開発する人間
0419デフォルトの名無しさん2006/11/19(日) 23:36:37
C#で開発?
0420デフォルトの名無しさん2006/11/19(日) 23:57:28
初心者と勘違いPGが紛れ込んでますねw
0421デフォルトの名無しさん2006/11/20(月) 00:13:35
ヲタクばっかですねw
04223952006/11/20(月) 08:42:22
ベンチマークです。

pentium4 1.7GHz
C#(JIT):16593.75ms
C(SSE2):19250ms
C(SSE):15031.25ms
C(FPU):20125ms

athlon64 2.4GHz
C#(JIT):4296.875ms
C(SSE2):3640.625ms
C(SSE):3796.875ms
C(FPU):6859.375ms
0423デフォルトの名無しさん2006/11/20(月) 10:33:07
>376
もう遅いかもしれないけど、そのセルを編集中かどうかで変わってくる。
編集中はセルのEditingControlがイベントを受け取るので、
そっちで処理しないといけない。
0424デフォルトの名無しさん2006/11/20(月) 10:43:03
>>415
普通のプログラマなら、遅いのが、
・不適切なアルゴリズム選択による遅さなのか (ex. クイックソートとバブルソート、ハッシュ探索と線形探索)
・設計のまずさに起因する遅さなのか
・他のサブシステムに起因する遅さなのか (ネットワーク、ウィンドウシステム、ディスクI/O、など)
・本当に、言語による遅さなのか
などを、経験なり、思考なり、プロファイラ使うなりして判断できるが、
ヘボプログラマ程、遅さの原因を考えることなく、言語のせいにする。
ましてや、自分のアルゴリズム選択ミスだなんて考えもしない。
最終的には、CPUが遅い、とかぬかしだす。
0425デフォルトの名無しさん2006/11/20(月) 11:04:14
MFCでいうところの SetRedraw(BOOL) ってありますか?

Form上のLabelなどの表示を切り替える際に、一度Labelをクリアしてから値代入してるのですが
04264252006/11/20(月) 11:04:56
それだと2回描画してしまうので、描画を抑えたいのです


途中で送信してしまいました・・・
0427デフォルトの名無しさん2006/11/20(月) 11:08:42
コンテナをSuspendLayout/ResumeLayout()したらどう?
0428デフォルトの名無しさん2006/11/20(月) 11:12:00
WM_SETREDRAWを送れば
04294252006/11/20(月) 12:06:26
>>427 ありがとうございました (≧∇≦)b
0430デフォルトの名無しさん2006/11/20(月) 13:42:37
ファイルハッシュを取得する関数ってありますでしょうか?
MsiGetFileHash のような関数を探しているのですが、見つけられなくて…(´д`;
0431デフォルトの名無しさん2006/11/20(月) 15:03:37
>>430
using System.Security.Cryptography;
かな?
0432デフォルトの名無しさん2006/11/20(月) 15:04:57
PInvokeするか
MD5CryptoServiceProviderにFileStreamくわせるか、かな?
04334302006/11/20(月) 15:35:35
>>431-432
ありがとうございます、試してみますm(__)m
0434デフォルトの名無しさん2006/11/20(月) 21:39:41
初めまして。
現在既に起動しているIE6.0のWindowハンドルを取得し、その上に線の描画を行おうとしています。
IEのWindowハンドルは取得できたのですが、そこから線を描画する方法が分かりません。
どの様な解決方法があるでしょうか?
どなたかご教授下さい。
0435デフォルトの名無しさん2006/11/20(月) 21:52:13
多分全部 Win32API / GDI でやった方が早いな。
GetDC / CreatePen / SelectObject / LineTo 辺りか?
ただし 434 が望んでる結果になるとは限らない。
0436デフォルトの名無しさん2006/11/20(月) 22:00:29
再描画とか考えたら面倒くさそうだな。
0437デフォルトの名無しさん2006/11/20(月) 22:04:10
hdcからGraphicsオブジェクトとって描画なら簡単だけど、
>>436の言う通り、再描画が発生したら消えるね
0438デフォルトの名無しさん2006/11/20(月) 22:36:26
>434です。
透明なFormWindowを作成してそこに線を描画し、IEのWindowの上に被せるという
方法も考えたんですけども。。。

>>435 さんと >>437 さんの方法は同じ方法なんでしょうか?
0439デフォルトの名無しさん2006/11/20(月) 22:41:03
[DllImport( "user32.dll" )]
private static extern IntPtr GetWindowDC( IntPtr handle );
[DllImport( "user32.dll" )]
private static extern IntPtr ReleaseDC( IntPtr hWnd, IntPtr hDC );

private void button1_Click( object sender, EventArgs e )
{
    IntPtr hWnd = IEのウインドウハンドル
    IntPtr hDC = GetWindowDC( hWnd );// またはGetDC
    Graphics g = Graphics.FromHdc( hDC );

    //好きに描画
    g.FillRectangle( SystemBrushes.ControlText, new Rectangle( 0, 0, 100, 100 ) );

    g.Dispose();
    ReleaseDC( hWnd, hDC );
}
0440デフォルトの名無しさん2006/11/20(月) 23:34:21
>>434です。

>>439さん。有難う御座います。
この方法でIEのWindowに描画することが出来ました。
ここから線の再描画をする方法を採ってみようと思います。
0441デフォルトの名無しさん2006/11/21(火) 00:00:33
(^^)イイエ、ドウイタシマシテ
0442デフォルトの名無しさん2006/11/21(火) 00:13:41
>>441は>>439じゃないと俺の直感が騒ぐ
0443デフォルトの名無しさん2006/11/21(火) 00:35:50
DivXのCodecがインストールされている環境で
動画ファイルをDivXで圧縮するツールを
作りたいと思うのですが、.NET1.1 + C#では
どのようにしたらいいのか、どなたかヒントを
いただけませんか。

やりたいことは
 複数のデジカメ動画を検索し
 DivXで圧縮し
 あるルールでファイル名を付け
 タイムスタンプを変換元ファイルに合わせる
という感じです。

「DivXで圧縮し」以外の部分はできています。

よろしくお願いします。
0444デフォルトの名無しさん2006/11/21(火) 00:51:42
コマンドラインでaviutilを起動する
0445デフォルトの名無しさん2006/11/21(火) 01:07:45
>>443
DirectShow叩けばいいんじゃないか?
0446デフォルトの名無しさん2006/11/21(火) 08:09:55
>>444,445
どっちがやりやすいか調べて試してみます。
ありがとうございました。
0447デフォルトの名無しさん2006/11/21(火) 15:59:46
文字列のリストに対して、リスト内の個々の要素の文字列の編集を行う処理を考えています。
更に、全てのリスト内の文字列の編集処理後、メインの関数を抜けたいと考えています。
リストにしているのは文字列の順番を記憶したいからです。

以下のThreadMethodように引数を持つスレッドを作成したい場合、
ThreadPoolを使うと良いそうなのですが、joinのような待ちの実現方法が分かりませんでした。

ThreadPoolでの待ちの実現について、また、ThreadPoolを使わなくてもできるよ。そもそもリストじゃなくてこうすれば効率が良い!など、アドバイスいただければと思います。

public bool MainMethod( .... )
{
 ArrayList arrayList = new ArrayList(); // (仮)
 
 // arrayListの個々の要素に文字列を生成する処理

 WaitCallback waitCallback = new WaitCallback(ThreadMethod);// コールバック作成
 
 // arrayList要素数分ループ
 for(int i = 0;i < arrayList.Count; i++)
 {
  // スレッドでarrayListの文字を更に改変する処理
  ThreadPool.QueueUserWorkItem(waitCallback, arrayList[i]);
 }
 
 // 待ち
 return true;
}

public void ThreadMethod(object aStr)
{
 // aStrの編集
}
0448デフォルトの名無しさん2006/11/21(火) 16:35:54
ThreadPoolは使ったことないが、なんで別スレッドにする必要があるの?
joinするんだったらメインスレッドがブロックされるから別スレッドにする意味がないのでは?
0449デフォルトの名無しさん2006/11/21(火) 16:37:11
まず、リストのアイテム編集ごときになぜ別スレッドを使いたいのか分からない。
だって終わるまで待ちたいんでしょ?

どうしてもスレッド使いたいなら、
Thread.Startで引数にArrayListそのものを渡してそっちでループしたら?
あと、.net2.0ならList<string>使った方がいいんじゃ?
0450デフォルトの名無しさん2006/11/21(火) 17:04:55
ThreadPoolは挙動が信用できないので自分で同じような仕組みを作り、Jobとして渡している。
Jobについては下位Jobを持つことができ親Jobは下位Jobがすべて終わった場合にそのJobが終わったことになる。
0451デフォルトの名無しさん2006/11/21(火) 17:27:51
誰と喋ってるんですか?
04524502006/11/21(火) 21:48:54
独り言、気にするな。
0453デフォルトの名無しさん2006/11/21(火) 21:54:07
>>452
オナニーは別な所でやってください
04544502006/11/21(火) 22:02:40
   ∧∧
   /⌒ヽ) 
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三三
0455デフォルトの名無しさん2006/11/21(火) 23:37:30
SplitContainerでVerticalで使用しています。
通常右の部分は必要ないので左の部分がFormいっぱいに表示されていて
なんらかのトリガでFormの半分づつに左右が表示されるようにするには
どうしたらいいですか?
C#
0456デフォルトの名無しさん2006/11/21(火) 23:41:06
幅を計算して SplitterDistance だったかに代入すればいいじゃん
0457デフォルトの名無しさん2006/11/21(火) 23:41:17
いらんときは左のコントロールを直接フォームに載せとけばいいんじゃね
0458デフォルトの名無しさん2006/11/21(火) 23:42:50
Panel1Collapsedとかなかったか?
0459デフォルトの名無しさん2006/11/21(火) 23:45:30
エクリプスでC#を使えるようにする方法を教えてください
できるとききました
0460デフォルトの名無しさん2006/11/21(火) 23:48:03
言った奴に聞けよ
0461デフォルトの名無しさん2006/11/21(火) 23:50:17
>>459
やめとけ。えくりぷすなんて、java以外で役にややない。
0462デフォルトの名無しさん2006/11/22(水) 00:06:33
>>459
http://www.improve-technologies.com/alpha/esharp/
「eclipse csharp」で見つかったけど。
0463デフォルトの名無しさん2006/11/22(水) 00:10:22
>>462
まりが�d♪
>>461
使いやすいよp使えば使うほどはまるしするめみたいなもんだおp
0464デフォルトの名無しさん2006/11/22(水) 02:38:47
C#つか、マネージコードでLWやMAYA、3DSといったヘビーなCGソフトって作れるの?
動けばイイ程度のものなら俺でも作れるが、数十万、数百万出して購入するユーザを
納得させるのは難しそう
0465デフォルトの名無しさん2006/11/22(水) 07:32:22
何でそういう速度がきわめて重視されるところにマネージコード持ってくるかな(´-`).。oO(・・・・・・・・・)
でも速度以外の面では遜色ないもの作れると思うよ。
0466デフォルトの名無しさん2006/11/22(水) 07:57:36
CPUの速さが現在の2倍になればおk
0467デフォルトの名無しさん2006/11/22(水) 07:59:22
>>401
>>401
>>401
>>401
>>401
0468デフォルトの名無しさん2006/11/22(水) 08:20:09
>>464の質問は、

20年前のプログラマに
「C言語つか、コンパイラで吐き出したコードでファミコンのアクションゲームって作れるの?」
と質問するのと変わらん。


0469デフォルトの名無しさん2006/11/22(水) 09:30:50
いつの時代もソフトがハードを牽引する
0470デフォルトの名無しさん2006/11/22(水) 10:03:42
>>464
BVEはvb.netで作られている
0471デフォルトの名無しさん2006/11/22(水) 10:32:42
>>464-465
いや、本当に速度が必要なところだけC++で書いて、P/Invokeすれば良いだけの
話だろ。
確かに、グラフィックス関係だと、テクスチャのような大量のデータをハンドリングしないといけないので、
それを、マネージドとアンマネージドの間で橋渡しするあたりで、工夫がいると思うけど。
04724472006/11/22(水) 12:15:13
>>448-450
ありがとうございます。
リストの先頭から順番に処理するとかなり時間かかったので、
同時にスタートさせれば多少なり早く処理がおわるかなぁ。とか思ってました。

とりあえずスレッドは意味がないそうなのでやめて、Listでやってみます。
0473デフォルトの名無しさん2006/11/22(水) 12:21:09
>>472
とりあえずコンピュータの仕組みをもうちょっと理解したほうがいいと思う
0474デフォルトの名無しさん2006/11/22(水) 15:20:08
宜しくお願いします。

http://support.microsoft.com/kb/316384/
wordオートメーションを作ろうと思って、
これを実行しました。

そしたら、このようなエラーがでました。
http://kasarfa.com/modules/php/bbs/ubbs/image/1164176285.gif

このエラーを解決するのにいろいろぐぐりましたが、
まったくわからずに、途方にくれております。

よろしくお願い申し上げます。

04754742006/11/22(水) 15:36:25
今までは、こんなバグでなかったのに急にでました。

今日の朝は、ちゃんとオートメーションできてました。
今日の午後から上のバグがでるようになりました。

お昼には、パソコンにインストールされていた
ノートンアンチウィルスをアンインストールしました。

出来事といったら、このくらいです。
word2003を再インストールしてもなおりませんでした。

WindowsXPsp2
Word2003
0476デフォルトの名無しさん2006/11/22(水) 15:51:14
wordへの参照をいっかい削除して、もう一回参照に入れてみては?
0477デフォルトの名無しさん2006/11/22(水) 16:34:13
Rectangle(0, 0, 640, 480) のサイズは641*481ですか?
0478デフォルトの名無しさん2006/11/22(水) 16:36:48
ちがいます
0479デフォルトの名無しさん2006/11/22(水) 16:40:00
それくらい試せよw
0480デフォルトの名無しさん2006/11/22(水) 16:42:23
じゃなくてRectangle(0, 0, 640, 480)の四角は(0, 0)-(639, 479)ですか?
04814742006/11/22(水) 16:44:02
>>476
レスありがとう。
確かにwordへの参照をやり直せばうまくいくような気がしたので、
上で投稿する前に、ご指摘のことは既に試しておりました。
そして、結果は芳しくありませんでした。
0482デフォルトの名無しさん2006/11/22(水) 16:44:42
>>480
>>479
0483デフォルトの名無しさん2006/11/22(水) 19:54:19
.NETアプリ→ネイティブアプリ変換ツールを作成したけど要る?
0484デフォルトの名無しさん2006/11/22(水) 20:00:10
いらない
0485デフォルトの名無しさん2006/11/22(水) 21:00:51
ListViewGroup ってオーナードローできませんか
0486デフォルトの名無しさん2006/11/22(水) 21:29:33
だな
0487デフォルトの名無しさん2006/11/22(水) 21:39:42
>>485
GetDCしてデバコンに自前で描画すればイイだけのことでは?
0488デフォルトの名無しさん2006/11/22(水) 21:55:17
>>485
ListViewGroup ってコントロールじゃないし

ListViewのオーナー泥でアイテムのグループみて自前でやる。
0489デフォルトの名無しさん2006/11/22(水) 22:04:15
DrawItem イベントはあるけど DrawGroup イベントがないのよ
0490デフォルトの名無しさん2006/11/23(木) 10:39:26
ToolStripMenuItem の派生クラスをデザイナで貼り付けるときに
DesignMode プロパティが true にならない現象がおきます

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)]
public class ToolStripMenuItemDerived : ToolStripMenuItem{
  public ToolStripMenuItemDerived() : base(){
    base.Text = "aaa";
    if (base.DesignMode) return;
    base.Text = "bbb";
  }
}

上記の ToolStripMenuItemDerived をデザイナで貼り付けたときには
aaa と表示されずに bbb と表示されてしまいます
仕方がないので
base.Text = "aaa";
#if ! DEBUG
base.Text = "bbb";
#endif
としデザイナを使うときはコンフィギュレーションを Debug にしています
もっとスマートな方法はないものでしょうか
0491デフォルトの名無しさん2006/11/23(木) 10:40:36
>>490
ワロタw
0492デフォルトの名無しさん2006/11/23(木) 10:49:01
>>490
そんなコーディングがまず必要なのかが(ry

ttp://support.microsoft.com/kb/839202/ja
0493デフォルトの名無しさん2006/11/23(木) 13:14:10
必要な場合もあるでしょ。
LicenseManager.CurrentContext.UsageMode == LicenseUsageMode.Designtimeとかでうまくいかない?
0494デフォルトの名無しさん2006/11/24(金) 12:11:23
3.0のスケジュールについて情報ないですか?
0495デフォルトの名無しさん2006/11/24(金) 12:38:22
C#3.0のことだとしてOrcasと一緒に出すとMSは主張
0496デフォルトの名無しさん2006/11/24(金) 12:58:31
ここにかいてるんだからC#3.0のことでしょ。でOrcasいつ?
0497デフォルトの名無しさん2006/11/24(金) 14:32:01
protected TcpListener _tcpListener;


// TCPリスナーを生成する
_tcpListener = new TcpListener(ip, portnb);

// TCPリスナーを開く
_tcpListener.Start();

// 保留中の接続要求があるかどうかを確認する
if (_tcpListener.Pending() == true)
{
// クライアントからの接続要求を受け入れる
_tcpClient = _tcpListener.AcceptTcpClient();

// KeepAliveの設定
_tcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 30000);
}

上記のようにサーバー側でクライアントの接続を受け入れて
TCPにて伝文の送受信を行っています。

中継装置(HUB)を経由して接続している時、クライアントのLANケーブル
が抜けた(切断)されたことを検出する為、KeepAliveの機能を用いる
方向で実装していますが・・・検出できませんでした。
おそらくKeepAliveの使い方が悪いと思うのですが・・・どなたかご存知ないでしょうか?
0498デフォルトの名無しさん2006/11/24(金) 15:19:15
Reflectionをつかうとprivateだろうがinternalだろうが値を設定・取得できるってことでOKですか?
0499デフォルトの名無しさん2006/11/24(金) 18:24:14
>>497です。自己解決しますた。

byte[] inBuffer = new byte[12];

BitConverter.GetBytes(1).CopyTo(inBuffer, 0); // スイッチ
BitConverter.GetBytes(30000).CopyTo(inBuffer, 4); // Interval

_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inBuffer, null);

上記の方法で30秒後に切断を検出できました。
DOS窓のnetstatでもidolになりました。
0500デフォルトの名無しさん2006/11/24(金) 18:43:36
ListやDictionaryなどのGeneric型のタイプを持ってくる場合、FullNameはどのように指定したらいいんでしょう?
0501デフォルトの名無しさん2006/11/24(金) 18:48:33
>>500
typeof(List<>).FullName: System.Collections.Generic.List`1
typeof(Dictionary<,>).FullName: System.Collections.Generic.Dictionary`2
0502デフォルトの名無しさん2006/11/24(金) 19:20:54

DataRowのインスタンスが2つあって、これらが等しいか(各列の値がすべて等しいか)
を調べるにはどうすればよいのでしょう?

DataTableに、DataRowインスタンスを追加するときに、同じ内容のものがあった場合は、
追加しない、という処理を行おうと思ってます。
0503デフォルトの名無しさん2006/11/24(金) 20:34:43
各列の値がすべて等しいか調べればいいんじゃね?
05045022006/11/24(金) 22:02:49
その方法しかないんですかね。。?
とりあえず、Rows[n].ItemArrayを一個一個しらべて
すべて同じだったら等しい
という方法ではできましたけど、
ItemArrayを配列として比較するとダメなんですよね。
RowとRowのオブジェクト同士を比較できる便利な関数とかってないものか。
0505デフォルトの名無しさん2006/11/24(金) 22:13:12
>>501 さんくすこ。
0506デフォルトの名無しさん2006/11/24(金) 22:15:30
どういたしまむこ。
0507デフォルトの名無しさん2006/11/24(金) 22:25:35
>>504
その、「RowとRowのオブジェクト同士を比較できる便利な関数」というのも
結局同じことをするんじゃね?

それとも、Cellの内容が変わるたびに中身を構造体にでも突っ込んで
隠しCellにGetHashCodeでハッシュもっておくとかしたら?
面倒くさそうだけど。
0508デフォルトの名無しさん2006/11/24(金) 23:02:11
DataTable.Constraintsに全列を含んだUniqueConstraintを追加して
Rows.AddしたときにConstraintExceptionをcatchするとか
■ このスレッドは過去ログ倉庫に格納されています