C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
■10688  Re[16]: プログラムの意見交換はいかがですか
□投稿者/ れい -(2007/11/23(Fri) 21:23:38)
    2007/11/23(Fri) 21:32:02 編集(投稿者)

    No10687 (渋木宏明(ひどり) さん) に返信
    > 当初エビス様と同じ仕組みで考えていたので、その辺(=芋虫の向いてる方向とか)後付けなんです。

    エビス様とはなんでしょう?
    通天閣にいる奴というのは知ってますが。

    >>1000x1000にランダムに100匹ぐらい置いてます。
    >
    > 僕のも、内部的には1000x1000のマップにも耐える作りになっていますが、
    > その規模になると芋虫のエントリのUIを入れ替えないと登録がつらいです (^^;
    >
    > 自動配置のロジック考えるのも面倒だったので、僕は「育成(=芋虫ロジック検討)」
    >「対戦(=少数芋虫によるサバイバル)」をメインにした仮想世界を作っていこうと思います。

    はい。
    育成は少しずつやるとなんか育成してる感じですし、
    1対1の対戦も面白いと思います。

    >>こういう感じでDLLだけで戦えると良いですね。
    > ですね ;-)

    で、インタフェースが同じなので、
    同じインタフェースを実装してれば、
    対戦でも10000匹サバイバルでも、おなじDLLで参加できるのはすばらしいと思うのですよ。
    インタフェースの目的に適ってます。

    > 次のリリースに追加しておきます。

    で、私のもせっかく作ったんでまぁどっかで公開するかも知れないんですが、
    微妙にインタフェースが違ってます。
    できればあわせていただけるとラッパー作らなくていいのでうれしいです。

    まず、方向の定義の定数と
    ハッパの状態の定数が少し違います。
    最初のは適当につけただけなので、ちょっと非合理でした。
    自分は真ん中にいるという定義なので、wormの種類は必要ありませんでした。
    また、方向は一般に左回りが+、右回り−がでした。
    IWormは虫の名前を保持したいと思ってます。
    GetNextDirectionの引数はworldではなくsightの方がいいと気づきました。

    たぶん定数はこの方が後々楽になるかと思います。
    虫の名前とか引数の名称は私の好みですが。
    あわせていただけるとありがたいです。

    namespace WormWorld {

    public interface IWorm {
    string Name { get; }
    Direction GetNextDirection( LeafState[] sight );
    }

    public enum LeafState {
    worm = -1,
    leaf = 0,
    hole = 1
    }

    public enum Direction {
    right = -1,
    forward = 0,
    left = 1
    }
    }

    ちなみに、インタフェース以外の中身は驚くほど違います。
    コードを読み解くと同じ結果になるんですが。

    #もちろん私のは手抜きで、ひどりさんのは手を抜いてないのです。
記事No.10626 のレス /過去ログ24より / 関連記事表示
削除チェック/

■11998  Re[7]: VB.NETでBMPからAVIを作成する方法
□投稿者/ moro -(2007/12/26(Wed) 18:05:21)
    > あなたが書いたVBのソースを載せて、どこが悪いのか指摘を受けたほうが有意義だと思いますよ。
    
    よもやまさんに紹介していただいたページをVBに変換しました。
    http://www.adp-gmbh.ch/csharp/avi/write_avi.html
    
    悪い点や誤り等ありましたらご指摘をお願いいたします。
    
    
    以下ソースです。よろしくお願いします。
    ※ToUInt32についてはSystem.Convert.を省略して記載しています。
    
    Imports System
    Imports System.Runtime.InteropServices
    Imports System.Drawing
    Imports System.Drawing.Imaging
    
     _
    
    Public Class AviWriter
    	<StructLayout(LayoutKind.Sequential, Pack:=1)> _
    	Private Structure AVISTREAMINFOW
    		Public fccType, fccHandler, dwFlags, dwCaps As UInt32
    
    		Public wPriority, wLanguage As UInt16
    
    		Public dwScale, dwRate, dwStart, dwLength, dwInitialFrames, dwSuggestedBufferSize, dwQuality, dwSampleSize, rect_left, rect_top, rect_right, rect_bottom, dwEditCount, dwFormatChangeCount As UInt32
    
    		Public szName0, szName1, ..... szName63 As UInt16
    	End Structure 'AVISTREAMINFOW
    	<StructLayout(LayoutKind.Sequential, Pack:=1)> _
    		Private Structure AVICOMPRESSOPTIONS
    		Public fccType As UInt32
    		Public fccHandler As UInt32
    		Public dwKeyFrameEvery As UInt32 ' only used with AVICOMRPESSF_KEYFRAMES
    		Public dwQuality As UInt32
    		Public dwBytesPerSecond As UInt32 ' only used with AVICOMPRESSF_DATARATE
    		Public dwFlags As UInt32
    		Public lpFormat As IntPtr
    		Public cbFormat As UInt32
    		Public lpParms As IntPtr
    		Public cbParms As UInt32
    		Public dwInterleaveEvery As UInt32
    	End Structure 'AVICOMPRESSOPTIONS
    	<StructLayout(LayoutKind.Sequential, Pack:=1)> _
    	 Public Structure BITMAPINFOHEADER
    		Public biSize As UInt32
    		Public biWidth As Int32
    		Public biHeight As Int32
    		Public biPlanes As Int16
    		Public biBitCount As Int16
    		Public biCompression As UInt32
    		Public biSizeImage As UInt32
    		Public biXPelsPerMeter As Int32
    		Public biYPelsPerMeter As Int32
    		Public biClrUsed As UInt32
    		Public biClrImportant As UInt32
    	End Structure 'BITMAPINFOHEADER
    	_
    
    	Public Class AviException
    		Inherits ApplicationException
    
    		Public Sub New(ByVal s As String)
    			MyBase.New(s)
    		End Sub 'New
    
    		Public Sub New(ByVal s As String, ByVal hr As Int32)
    			MyBase.New(s)
    
    			If hr = AVIERR_BADPARAM Then
    				err_msg = "AVIERR_BADPARAM"
    			Else
    				err_msg = "unknown"
    			End If
    		End Sub 'New
    
    
    		Public Function ErrMsg() As String
    			Return err_msg
    		End Function 'ErrMsg
    		Private AVIERR_BADPARAM As Int32 = -2147205018
    		Private err_msg As String
    	End Class 'AviException
    
    	Private Const OF_WRITE As Long = &H1
    	Private Const OF_CREATE As Long = &H1000
    	Private Const OF_SHARE_DENY_NONE As Long = &H40
    	Private Const AVIIF_KEYFRAME As Long = &H10L
    
    	Public Function Open(ByVal fileName As String, ByVal frameRate As UInt32, ByVal width As Integer, ByVal height As Integer) As Bitmap
    		frameRate_ = frameRate
    		width_ = width
    		height_ = height
    		bmp_ = New Bitmap(width, height, PixelFormat.Format24bppRgb)
    		Dim bmpDat As BitmapData = bmp_.LockBits(New Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
    		stride_ = bmpDat.Stride
    		bmp_.UnlockBits(bmpDat)
    		AVIFileInit()
    		Dim hr As Integer = AVIFileOpen(pfile_, fileName, OF_CREATE Or OF_WRITE Or OF_SHARE_DENY_NONE, 0)
    
    		If hr <> 0 Then
    			Throw New AviException("error for AVIFileOpen")
    		End If
    
    		CreateStream()
    		SetOptions()
    
    		Return bmp_
    	End Function 'Open
    
    
    	Public Sub AddFrame()
    
    		Dim bmpDat As BitmapData = bmp_.LockBits(New Rectangle(0, 0, CInt(width_), CInt(height_)), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb)
    
    		Dim hr As Integer = AVIStreamWrite(psCompressed_, count_, 1, bmpDat.Scan0, CType(stride_ * height_, Int32), 0, 0, 0)
    		' pointer to data
    		' 16 = AVIIF_KEYFRAMe
    
    		If hr <> 0 Then
    			Throw New AviException("AVIStreamWrite")
    		End If
    
    		bmp_.UnlockBits(bmpDat)
    
    		count_ += 1
    	End Sub 'AddFrame
    
    
    	Public Sub Close()
    		AVIStreamRelease(ps_)
    		AVIStreamRelease(psCompressed_)
    
    		AVIFileRelease(pfile_)
    		AVIFileExit()
    	End Sub 'Close
    
    
    	Private Sub CreateStream()
    		Dim strhdr As New AVISTREAMINFOW
    		strhdr.fccType = fccType_
    		strhdr.fccHandler = fccHandler_
    		strhdr.dwFlags = ToUInt32(0)
    		strhdr.dwCaps = ToUInt32(0)
    		strhdr.wPriority = ToUInt16(0)
    		strhdr.wLanguage = ToUInt16(0)
    		strhdr.dwScale = ToUInt32(1)
    		strhdr.dwRate = frameRate_ ' Frames per Second
    		strhdr.dwStart = ToUInt32(0)
    		strhdr.dwLength = ToUInt32(0)
    		strhdr.dwInitialFrames = ToUInt32(0)
    		strhdr.dwSuggestedBufferSize = ToUInt32(height_ * stride_)
    		strhdr.dwQuality = ToUInt32(4294967295)
    		strhdr.dwSampleSize = ToUInt32(0)
    		strhdr.rect_top = ToUInt32(0)
    		strhdr.rect_left = ToUInt32(0)
    		strhdr.rect_bottom = ToUInt32(height_)
    		strhdr.rect_right = ToUInt32(width_)
    		strhdr.dwEditCount = ToUInt32(0)
    		strhdr.dwFormatChangeCount = ToUInt32(0)
    		strhdr.szName0 = ToUInt16(0)
    		strhdr.szName1 = ToUInt16(0)
    
    		Dim hr As Integer = AVIFileCreateStream(pfile_, ps_, strhdr)
    
    		If hr <> 0 Then
    			Throw New AviException("AVIFileCreateStream")
    		End If
    	End Sub 'CreateStream
    
    
    	Private Sub SetOptions()
    		Dim opts As New AVICOMPRESSOPTIONS
    		opts.fccType = ToUInt32(0) 'fccType_;
    		opts.fccHandler = ToUInt32(0) 'fccHandler_;
    		opts.dwKeyFrameEvery = ToUInt32(0)
    		opts.dwQuality = ToUInt32(0) ' 0 .. 10000
    		opts.dwFlags = ToUInt32(0) ' AVICOMRPESSF_KEYFRAMES = 4
    		opts.dwBytesPerSecond = ToUInt32(0)
    		opts.lpFormat = New IntPtr(0)
    		opts.cbFormat = ToUInt32(0)
    		opts.lpParms = New IntPtr(0)
    		opts.cbParms = ToUInt32(0)
    		opts.dwInterleaveEvery = ToUInt32(0)
    
    		Dim p As AVICOMPRESSOPTIONS
    		Dim pp As AVICOMPRESSOPTIONS
    
    		Dim x As IntPtr = ps_
    		Dim ptr_ps As IntPtr
    
    		AVISaveOptions(0, ToUInt32(0), 1, ptr_ps, pp)
    
    		' TODO: AVISaveOptionsFree(...)
    		Dim hr As Integer = AVIMakeCompressedStream(psCompressed_, ps_, opts, 0)
    		If hr <> 0 Then
    			Throw New AviException("AVIMakeCompressedStream")
    		End If
    
    		Dim bi As New BITMAPINFOHEADER
    		bi.biSize = ToUInt32(40)
    		bi.biWidth = ToDecimal(width_)
    		bi.biHeight = ToDecimal(height_)
    		bi.biPlanes = 1
    		bi.biBitCount = 24
    		bi.biCompression = ToUInt32(0) ' 0 = BI_RGB
    		bi.biSizeImage = ToUInt32(stride_ * height_)
    		bi.biXPelsPerMeter = 0
    		bi.biYPelsPerMeter = 0
    		bi.biClrUsed = ToUInt32(0)
    		bi.biClrImportant = ToUInt32(0)
    
    		hr = AVIStreamSetFormat(psCompressed_, 0, bi, 40)
    		If hr <> 0 Then
    			Throw New AviException("AVIStreamSetFormat", hr)
    		End If
    	End Sub 'SetOptions
    
    	Private Declare Sub AVIFileInit Lib "avifil32.dll" ()
    
    	Private Declare Sub AVIFileExit Lib "avifil32.dll" ()
    
    	Private Declare Function AVIFileOpen Lib "avifil32.dll" _
    			 (ByRef ptr_pfile As Integer, ByVal fileName As String, _
    			  ByVal flags As Integer, ByRef dummy As Integer) As Integer 'byval
    
    	Private Declare Function AVIFileOpenW Lib "avifil32.dll" _
    			 (ByRef ptr_pfile As Integer, ByVal fileName As String, _
    			  ByVal flags As Integer, ByRef dummy As Integer) As Integer 'byval
    
    	Private Declare Function AVIFileCreateStream Lib "avifil32.dll" _
    			  (ByVal ptr_pfile As Integer, ByRef ptr_ptr_avi As IntPtr, _
    			   ByRef ptr_streaminfo As AVISTREAMINFOW) As Long
    
    	Private Declare Function AVIMakeCompressedStream Lib "avifil32.dll" _
    			   (ByRef ppsCompressed As IntPtr, ByVal aviStream As IntPtr, _
    				ByRef ao As AVICOMPRESSOPTIONS, ByVal dummy As Integer) As Integer
    
    	Private Declare Function AVIStreamSetFormat Lib "avifil32.dll" _
    			   (ByVal aviStream As IntPtr, ByVal lPos As Int32, _
    				ByRef lpFormat As BITMAPINFOHEADER, ByVal cbFormat As Int32) As Integer
    
    	Private Declare Function AVISaveOptions Lib "avifil32.dll" _
    		  (ByVal hwnd As Integer, ByVal flags As UInt32, _
    		   ByVal nStreams As Integer, _
    		   ByRef ptr_ptr_avi As IntPtr, ByRef ao As AVICOMPRESSOPTIONS) As Integer 'byval
    
    	Private Declare Function AVIStreamWrite Lib "avifil32.dll" _
    		 (ByVal aviStream As IntPtr, ByVal lStart As Int32, _
    		  ByVal lSamples As Int32, ByVal lpBuffer As IntPtr, _
    		  ByVal cbBuffer As Int32, ByVal dwFlags As Int32, _
    		  ByRef dummy1 As Int32, ByRef dummy2 As Int32) As Integer 'byval
    
    	Private Declare Function AVIStreamRelease Lib "avifil32.dll" _
    			   (ByVal aviStream As IntPtr) As Integer
    
    	Private Declare Function AVIFileRelease Lib "avifil32.dll" _
    			   (ByVal pfile As Integer) As Integer
    
    	Private pfile_ As Integer = 0
    	Private ps_ As New IntPtr(0)
    	Private psCompressed_ As New IntPtr(0)
    	Private frameRate_ As UInt32 = ToUInt32(0)
    	Private count_ As Integer = 0
    	Private width_ As Integer = 0
    	Private stride_ As Integer = 0
    	Private height_ As Integer = 0
    	Private fccType_ As UInt32 = ToUInt32(1935960438) ' vids
    	Private fccHandler_ As UInt32 = ToUInt32(808810089) ' IV50
    	'1145656899;  // CVID
    	Private bmp_ As Bitmap
    End Class 'AviWriter
    
    
記事No.11957 のレス /過去ログ26より / 関連記事表示
削除チェック/

■13738  Re[5]: フォーム上のTextBoxのクリア処理を共通化したい。
□投稿者/ れい -(2008/02/04(Mon) 00:21:35)
    No13712 (ポンデC# さん) に返信
    > と言うことは、Form1と言うForm内の処理はすべてForm1.cs内のフィールドで
    > コーディングするということですか?
    > とてつもなく長くなる場合などはどうすればよいでしょう?
    > 本などを見ると600行くらいに抑えましょうと書いてありましたが・・

    基本的に、プログラムはきちんと動けばそれでいいのです。
    どんなに汚くても。

    ただ、汚いときちんと動くものを作るのに障害があるので、
    目先の利益に走らずに、きちんと綺麗に書いたほうがいい、といわれているだけです。

    なので、何が綺麗なのか、何行までがいいのか、
    そういうのは個人の価値観・能力などに拠ります。

    質問内容からして自分なりのコーディングスタイルを決定するにはまだ早いように見えます。
    本に書かれている内容、掲示板での回答を参考にして、
    実際にいろいろな手法でコーディングして自分なりのやり方を確立しましょう。

    ちなみに、私は1000行でも10000行でも気にしません。
    はるか昔、エディタで使えるファイルサイズに限界があったときには気にしていましたが。
記事No.13710 のレス /過去ログ29より / 関連記事表示
削除チェック/

■14217  XMLの要素をDeserializeで配列にしたい。
□投稿者/ かぁとぅ -(2008/02/13(Wed) 14:35:19)

    分類:[.NET 全般] 

    XmlSerializerについての質問です。

    1のようなXMLがあり、2のクラスにDesirializeメソッドを使って値を格納したいと考えています。
    chumon要素の配列を取得したいのですが、データが入ってくれず悩んでいます。

    現状、ルート要素のchumonListResponseとchumonListItemには値が入っているのですが、
    chumon要素の配列には値が入ってくれません(Length==0)
    どなたか2のクラスのどこが間違っているか教えていただけませんでしょうか?
    よろしくお願いします。

    1.XML
    <?xml version="1.0" encoding="UTF-8" ?>
    <chumonListResponse>
    <chumonList>
    <chumonListItem>
    <chumonType>6</chumonType>
    <chumon chumonBango="001">
    <hatchuSuryo>10000</hatchuSuryo>
    <hatchuNichiji>2007-05-30 13:17:00</hatchuNichiji>
    <yukoNichiji />
    </chumon>
    <chumon chumonBango="002">
    <hatchuSuryo>10000</hatchuSuryo>
    <hatchuNichiji>2007-05-30 13:17:00</hatchuNichiji>
    <yukoNichiji />
    </chumon>
    <chumon chumonBango="003">
    <hatchuSuryo>10000</hatchuSuryo>
    <hatchuNichiji>2007-05-30 13:17:00</hatchuNichiji>
    <yukoNichiji />
    </chumon>
    </chumonListItem>
    </chumonList>
    <message>発注一覧を取得しました。</message>
    </chumonListResponse>


    2.格納用クラス

    public class chumonListResponse
    {
    public string message;
    [XmlArray("chumonList")]
    [XmlArrayItem("chumonListItem", typeof(chumonListItem))]
    public chumonListItem[] chumonListItem;
    }

    public class chumonListItem
    {
    public string chumonType;
    [XmlArrayItem("chumon", typeof(chumon))] //←ここがどう設定すればよいかわからない。。。
    public chumon[] chumon;
    }

    public class chumon
    {
    [XmlAttributeAttribute()]
    public string chumonBango;
    public string hatchuSuryo;
    public string hatchuNichiji;
    public string yukoNichiji;
    }


    ウォッチで下記の値を確認すると0となってしまいます。
    msgChumonListResponse.chumonListItem[0].chumon.Length
親記事 /過去ログ30より / 関連記事表示
削除チェック/

■14358  Re[4]: Regex.Replaceの不明な動作
□投稿者/ れい -(2008/02/15(Fri) 20:54:55)
    No14351 (men さん) に返信
    > やじゅ さんがおっしゃってるようにRegex.Replaceの不具合だと思います。

    違います。
    不具合ではありません。

    その正規表現では、ほとんど全ての正規表現エンジンで同じ症状を示すはずです。
    もしくは、そもそもマッチングまでいかずにエラーを出します。
    その表現でもすばやく動作するほど最適化された正規表現エンジンを作ることも理論上可能ですが、見たことがありません。

    指定した正規表現が何に一致するのか、
    きちんと理解しないとバグを産みます。
    また、正規表現自体がどう動作しているのか、
    きちんと理解していないと今回のように「おかしい」ように見える場合もあります。

    > 他にも何万件のブログがありますが、この「ではまた...........................................m(__)m」を含むブログ
    > だけがRegex.Replaceをするとおかしな動作を起こしています。

    1000件でうまく動くからOKとか、10000件でうまく動くからOKとか、
    そういう質のコードでいいのでしたら適当でよいと思いますが。

    つい最近も正規表現の有用性が話題になりましたので、
    誰かのために途中まで適当に書いておくと。

    正規表現というのは文字列から状態遷移図を作成し、
    そこに文字列を流し込むという、オートマトンです。
    タイプに応じてNFA、DFA、などがありますが、.Netは基本的にDFAタイプで、様々な拡張をしているようです。

    たかが状態遷移図ですから、高度なことを考えてくれるわけではありません。
    状態遷移図どおりに遷移していくだけです。
    ですから、正規表現から生成される遷移図が複雑であれば時間がかかりますし、
    流し込む文字列によって終状態まで流れる時間も変わります。

    .Netはバックトラックが可能で、単純な表現で非常に複雑な遷移を生成可能です。
    また、DFAをNFAに変換せずDFAのまま流しますので、
    どんなに再帰が深くても正規表現のコンパイルエラーにはなりません。

    今回の正規表現は、より単純化すると
    "(a|a(?=a)){1000}b"
    のようになります。
    この表現から作られる遷移図に
    "aaaaaaaaaaaaaaaaaaaaaaaa"
    みたいな文字列を流し込むと2の文字数乗のオーダーで時間がかかります。
    どうしてそのようになるのかは…余白が足りないので省略です。
    状態遷移図を描いてみるとわかります。
    そして、それはほぼ必至です。

    #「文字数からして絶対足りないじゃないか」と言えるのは我々がNPを解ける頭脳を持ってるからです。

    この問題は"(?="に限りません。
    バックトラックや量指定子、代替演算子などを組み合わせると
    比較的簡単に大変な状態遷移図を作れてしまいます。

    NFAタイプの正規表現エンジンでは、
    正規表現文字列をコンパイルする時点で状態遷移図がメモリに収まらなくなるのでエラーになりますが、
    DFAでは文字列を流し込むまでわかりません。

    ですので、正規表現を扱うのであれば、
    何をどう一致させたいのか、それには正規表現エンジンはどういう振る舞いをしているのか、
    それをきちんと考えなければいけません。

    長い正規表現が嫌われるのも、
    きちんとエスケープされてない正規表現が嫌われるのも、
    正規表現が使えないという人が出るのも、ある程度当然だと思います。

    ですので、正規表現を使うのであれば、綺麗に分かりやすく書く必要があります。
    .Netでは"(#"でコメントが使えますし、
    IgnorePatternWhitespaceを使えば任意の位置に空白を入れられます。
    これらを活用するとよいと思います。
記事No.14328 のレス /過去ログ30より / 関連記事表示
削除チェック/

■15215  Re[17]: std::ofstream とCFileの書き込み速度
□投稿者/ セイン -(2008/03/07(Fri) 10:19:27)
    No15210 (アキラ さん) に返信
    > ■No15209 (セイン さん) に返信
    > 
    >>自分なりにofstreamの中を追いかけてみたところ、
    >>以下の関数を使って書き込みをしていました。
    >>C言語のfputsじゃなかったんですね^^;
    >>basic_streambuf::sputn
    >>basic_streambuf::sputc
    >>
    > 
    > いえ、VC++8.0のofstreamはfwrite, fputcを使ってます
    
    あうぅ。ごめんなさい僕の力不足です。そうなんですね。
    
    以下ソースになるのですが、速度にそれぞれ差が出ました。
    一番下に書いてあるのが、fputcになります。
    ofstreamよりfputcのほうが僕の環境では遅くなります。
    
    
    
    メイン関数側
    	CLogHlp m_Log;
    	m_Log.CreateWriteFile("C:\\tmp.txt");
    
    	CString str;
    	for(int i = 0; i < 100000; i++) {
    		str.Format("%10d\t", i);
    		m_Log.Write(str);
    	}
    
    	m_Log.WirteFileUnload();
    
    
    
    
    ログ書き込みクラス
    #pragma once
    #include <fstream>
    
    class CLogHlp
    {
    public:
    	CLogHlp() 
    	{
    	}
    
    	~CLogHlp() 
    	{
    		try {
    			WirteFileUnload();
    		} catch(...) {}
    	}
    
    	/** ファイル読み込み @return TRUE:オープン成功 FALSE:失敗 */
    	BOOL CreateWriteFile
    	(
    		LPCSTR path					///< [I]ファイルパス
    	)
    	{
    		int ret = TRUE;
    		try{
    			// ファイル作成
    			if(mWriteFile.Open(path, CFile::modeCreate|CFile::modeWrite) != TRUE) {
    				ret = FALSE;
    			}
    		}catch(...) {
    			ret = FALSE;
    		}
    		return ret;
    	}
    
    	/* オープン中のファイルクローズ */
    	void WirteFileUnload()
    	{
    		if(mWriteFile.m_hFile != CFile::hFileNull) {
    			mWriteFile.Close();
    		}
    	}
    
    	/* 書き込み */
    	BOOL Write
    	(
    		CString str					///< [I]保存内容
    	)
    	{
    		int ret = TRUE;
    		try {
    			mWriteFile.Write(str, str.GetLength());
    		}
    		catch(...) {
    			ret = FALSE;
    		}
    		return ret;
    	}
    
    private:
    	// 書き込み用ファイル
    	CFile mWriteFile;
    };
    
    
    
    class CLogHlp
    {
    public:
    	CLogHlp() 
    	{
    	}
    
    	~CLogHlp() 
    	{
    		try {
    			WirteFileUnload();
    		} catch(...) {}
    	}
    
    	/** ファイル読み込み @return TRUE:オープン成功 FALSE:失敗 */
    	BOOL CreateWriteFile
    	(
    		LPCSTR path					///< [I]ファイルパス
    	)
    	{
    		try {
    			setlocale(LC_ALL, "Japanese"); 
    			// ファイルオープン
    			fsm.open(path, std::ios::trunc | std::ios::out);
    			if(fsm.is_open() == false)
    			{
    				// 既にオープン中
    				return FALSE;
    			}
    		}
    		catch(...) {
    			return FALSE;
    		}
    		return TRUE;
    	}
    
    	/* オープン中のファイルクローズ */
    	void WirteFileUnload()
    	{
    		if(fsm.is_open() == true)
    		{				
    			// ファイルのクローズ
    			fsm.close();
    		}
    	}
    
    	/* 書き込み */
    	BOOL Write
    	(
    		CString str					///< [I]保存内容
    	)
    	{
    		int ret = TRUE;
    		try {
    			fsm << (LPCSTR)str;
    		}
    		catch(...) {
    			ret = FALSE;
    		}
    		return ret;
    	}
    
    private:
    	// ファイルストリーム
    	std::ofstream	fsm;
    };
    
    
    
    class CLogHlp
    {
    public:
    	CLogHlp() 
    	{
    	}
    
    	~CLogHlp() 
    	{
    		try {
    			WirteFileUnload();
    		} catch(...) {}
    	}
    
    	/** ファイル読み込み @return TRUE:オープン成功 FALSE:失敗 */
    	BOOL CreateWriteFile
    	(
    		LPCSTR path					///< [I]ファイルパス
    	)
    	{
    		try {
    		  if((fopen_s( &fp, path, "w" )) != 0 ){
    			  return FALSE;
    		  }
    
    		}
    		catch(...) {
    			return FALSE;
    		}
    		return TRUE;
    	}
    
    	/* オープン中のファイルクローズ */
    	void WirteFileUnload()
    	{
    		try {
    			fclose(fp);
    		}
    		catch(...) {
    		}
    	}
    
    	/* 書き込み */
    	BOOL Write
    	(
    		CString str					///< [I]保存内容
    	)
    	{
    		int ret = TRUE;
    		try {
    			fputs(str, fp);
    		}
    		catch(...) {
    			ret = FALSE;
    		}
    		return ret;
    	}
    
    private:
    	// ファイルストリーム
    	FILE *fp;
    };
    
記事No.14968 のレス /過去ログ31より / 関連記事表示
削除チェック/

■15630  Re[5]: IDropTargetのクラスIDの名称
□投稿者/ シャノン -(2008/03/17(Mon) 15:31:02)
記事No.15616 のレス /過去ログ32より / 関連記事表示
削除チェック/

■15551  Re[3]: 画像データの送受信
□投稿者/ 出水 -(2008/03/14(Fri) 21:55:59)
    httpと一緒くたにするのは良くない気が…

    バイナリデータの送信は、終了のデリミタをつけることが出来ないんで
    最初に4バイト、送信サイズを送るという取り決めをすればいいです

    送信はこんな感じ
    var tcp = new System.Net.Sockets.TcpClient();
    var sm = tcp.GetStream();

    var bitmap = new byte[10000];
    var bnum = System.BitConverter.GetBytes(bitmap.Length);
    sm.Write(bnum, 0, bnum.Length);
    sm.Write(bitmap, 0, bitmap.Length);

    で、受信はこんな感じ

    var bary= new byte[4];
    sm.Read(bary, 0, 4);
    int datasize = System.BitConverter.ToInt32(bary, 0);
    int readsize = 0;
    var bitmap = new byte[datasize];
    while(readsize < datasize) readsize += sm.Read(bitmap, readsize, datasize - readsize);
記事No.15537 のレス /過去ログ32より / 関連記事表示
削除チェック/

■16028  Re[4]: Pictureboxに点群データを表示させる
□投稿者/ Pman -(2008/03/27(Thu) 09:16:59)
    みなさん、ご意見ありがとうござます!返事が遅くなってしまいすみません。
    
    ■No15929 (PATIO さん) に返信
    
    >オフスクリーン描画といわれている手法です。
    
    おそらく、Bitmapクラスのsetpixelを使って描画する方法がそれに当たると思い、
    再びトライしてみたところ、裏で描いてる時間は多少かかるものの、
    表示は一瞬で出来るようになりました!
    
    ありがとうございます!
    
    
    >多分、座標計算して描画した方が早いのではないかと思いますが、
    
    描画した画像を回すと、回転後の画像がぼやけてしまったので、座標を計算しなおしてから、描画させてみます!
    
    
    
    
    ■No15959 (組込系の人 さん) に返信
    
    >DirectXについて
    
    一番はじめにDirectXを使ってみたのですが、
    ループ処理によって常に再描画をする、という仕組みから(ここをちゃんと理解していないのかもしれませんが)、
    十万点を再描画させ続けると、全ての点が一度に描画される事がなく、
    常にパラパラと、部分部分だけ表示される状態になってしまったので、
    「やはり十万点は量が多すぎるのか。。」
    とあきらめて、ループ処理ではない、graphicsクラスや、Bitmapクラスを使ってみることにしました。
    
    しかし、今一度、DirectXも学びなおしてみます。
    ご意見ありがとうございます。
    
    
    ■No15960 (Jitta on the way さん) に返信
    
    >ちょっとよくわからないのですが、描画単位をなににしていますか?ケータイからなので調べにくいので調べませんが、ピクセル単位に描画させれば、整数指定で大丈夫だと思います。
    
    描画単位を全く指定していません。(指定の仕方を把握できてません。。)
    Bitmapクラスを使って描画する時には、ピクセル単位だとは思っているのですが、
    Graphicsクラスを使って描画する時には、FillRectangleの第4・5 引数にfloat型が入ったので、
    なるべく小さな四角形にするために、0.5という数字をいれました。ちなみに0.1にすると、表示されませんでした。。
    
    >Matrixというクラス
    
    ネット上でサンプルを見ながら、RotateAtメソッドを使ってみました。
    
    ありがとうございます!
    
    ------------------------------------------------------------
    
    みなさんに、いろいろなご意見を頂くことができ、本当に勉強になります。ありがとうございます。
    一応今現在のソースコードを簡単に載せてみます。
    描画までは良いのですが、回転に関して、一度描画した画像を回すと、回転後の画像がブレたような感じになってしまったので、次は、座標を計算しなおしてから、描画させるという方法をとってみようと思っています。
    
    
    描画部分↓↓
    
    Bitmap bm = new Bitmap(Picturebox1.Width, Picturebox1.Height);
                   
    float xP, yP;
    
    中略(xP,xYに、座標データ:構造体配列ah[100000]から値を代入)
    for (int i = 0; i <= 99999; i++)
                {
                    xP = ah[i].dx;
                    yP = ah[i].dy;
    //裏で描画
                    bm.SetPixel((int)xP, (int)yP, Color.White);
    
            //g.FillRectangle(Brushes.White, xP, yP, (float)0.5, (float)0.5);
            (こちらだと、描画に時間がかかってしまいましたので、今はsetpixelメソッドを。。)  
                }
    //ピクチャボックスに表示
    Picturebox1.Image = bm;
    
    
    回転部分↓↓
                  
    Graphics g = Display1.CreateGraphics();
    
    Matrix mx = new Matrix();
    
    mx.RotateAt(15, new Point(bm.Width / 2, bm.Height));(bm:先ほど作ったBitmapクラスのインスタンス)
    
    g.Transform = mx;
    
    g.DrawImage(bm, new Point(0, 0));
    
    
記事No.15900 のレス /過去ログ32より / 関連記事表示
削除チェック/

■16770  Re[3]: 属性の利用法
□投稿者/ ネタ好き -(2008/04/10(Thu) 13:08:34)
    ああ、あかんネタを言いたくなってきた。
    在ったら嫌な属性(バットノウハウ)

    ・名前がFooAtributoで機能が不明な属性ー名前間違っている上に意味不明な属性
    ・起動するたびにコードの内容をどこかに知らせる属性ースパイ属性
    ・万能すぎて何をしているのか把握しきれない属性ー反UNIX的思想?
    ・間違った情報を出力するログ属性ー開発者に対する嫌がらせ
    ・10000回に1回の確率で何もしない属性ー怠惰属性
    ・たまにMessageBoxを出力する属性ーばやき属性
    ・実行すると社内の女子社員へセクハラメールを送る属性ーセクハラ属性
    ・実行すると妹萌えーと出力する属性ーシスコン属性
    ・適用するとメッセージボックスを2チャンネル風に変えてしまう属性ー毒属性
記事No.16202 のレス /過去ログ34より / 関連記事表示
削除チェック/

■17591  Re[19]: フォルダ内のファイル名を取得する方法
□投稿者/ れい -(2008/04/28(Mon) 01:25:50)
    2008/04/28(Mon) 17:05:03 編集(投稿者)
    2008/04/28(Mon) 03:13:31 編集(投稿者)

    No17587 (ネタ好き さん) に返信
    > 無論ハードウェアでのキャッシュ効果はあると思いますが、
    > 出来るだけハードウェアにアクセスする回数は減らした方がいいと思います。

    むー。その方針は、Windowsでは間違っていると私は思います。

    ファイルの検索は、パフォーマンス、互換性、信頼性、
    どれを優先的に考えても、「GetFiles()やGetDirectories()でマッチングを行うべき」です。

    以下、長くなりますが、論拠といろいろ私の知っていることの列挙です。
    情報のソースはWDK、およびそれに含まれるHelpとFastFatのコード、
    書籍「Windows NT File System Internals」などです。

    まず。
    ・Directory.GetFilesの実装について。

    これは引数に適当な前処理を加えた後、FindXXXFileを呼び出すだけです。
    いろいろチェックをかけていますのでその分は重いですが、
    後述するように、コンテキスト切替に比べて微々たる物です。

    ・FindXXXFileのアトミック性の件。

    > あとちょっと気になるのは、FindFirstFile(), FindNextFile() がアトミックな操作かどうか、ですね。

    FindXXXFileは、
    ディレクトリハンドルを開いて、
    IRP_MJ_DIRECTORY_CONTROLを複数回送信することで
    ファイル列挙を行います。

    初回のIRP_MJ_DIRECTORY_CONTROL時点でスナップショットを作るような
    アトミックな操作であることが「推奨」されていますが、
    通常はアトミックではありません。
    NTFS、FATともにアトミックにはなっていません。
    途中でファイルが削除・生成された際には、
    「列挙されないファイル」や「二重に列挙されるファイル」が出てしまいます。
    (二重に列挙される場合があることはあまり知られていないと思います。)

    アトミックに取得したい場合はNtCreateFileでディレクトリを「排他的に開い」て
    自分でIRP_MJ_DIRECTORY_CONTROLを送信します。

    ・FindFirstFileのマッチングの取り方について。

    > GetFiles()(=実際にはその下請けであるだろう FindFirstFile(), FindNextFile() API)は、内部的に全ファイル列挙してみて、フィルタにマッチするやつを順にかえすだけのような気がします。(ワイルドカードのすべてのパターンにマッチするようなインデックスは作れなさそうな気がするので)

    Windowsのファイルシステムでは、
    ディレクトリ内のファイル列挙を行うときにはかならず
    「カーネルモードでパターンマッチングを行う」ことになっています。

    FindXXXFileはユーザーモードで文字列マッチングを行っていません。
    FindFirstFileに渡した検索文字列はほぼそのままファイルシステムドライバに渡され、
    そこでマッチングにかけられます。
    #全ファイルを取得したいときには、わざわざ「*」を渡さなければいけません。

    このマッチング処理はFsRtlIsNameInExpressionを使っています。
    これはかなり高速です。
    #.Netで同じ処理を作ってみましたが、およそ10〜1000倍ほど違います。

    ・ファイル名の文字に関して。

    >Windows のファイル名では、ABC と abc は同一視されますが、
    >ABCとabcは別物として扱われる事になっていますし。

    これは一番大きい問題だと思います。
    大文字小文字の判断、文字列のマッチングなどは「ファイルシステム依存」です。
    例えば、「あいう」と「アイウ」を同一視するファイルシステムもWindowsはサポートできます。
    #シェルはサポートできない場合もありますが。

    日本語だと皆気にしていませんが、
    修飾文字があるような言語体系では重要です。
    ウムラウトとかエスツェットを考えてください。

    バージョンやリージョンが変われば、変わる可能性もあります。

    なので、ファイル名の一部が与えられたときに、
    その文字列とファイルシステム上で一致するファイルはどれなのか、
    「ファイルシステムにしか判断できません」
    また、それは
    「ファイルシステムが判断すべき事項」
    でもあります。

    ・キャッシュについて。

    > 無論ハードウェアでのキャッシュ効果はあると思いますが

    NTFS/FAT共に、ディレクトリエントリのキャッシュは
    キャッシュマネージャではなく、ファイルシステム自身が管理します。
    これはキャッシュマネージャが管理する他のキャッシュよりはるかに優先的に確保されます。
    ファイルシステムによってはNon-Paged(ページファイルに落とされない)な領域から確保され、
    一度アクセスしたあとはキャッシュから消えません。

    ・速度に関して。

    > Windowsは私の想像以上に最適化しているかもしれませんが、
    > それならば直の事、1回アクセスしてオブジェクトを使いまわすほうが、より最適化されると思います。

    FindXXXFileの実装のところでで述べたように、
    ディレクトリ内のファイル列挙では、
    返されるファイル数に比例したカーネル/ユーザーモード切替、IRP生成が起きます。
    この切替やIRP生成は文字列連結やパス文字列の検査などより「遥かにコストの高い処理」です。

    無論ハードウェアアクセスよりは遅いですが、
    前述のようにディレクトリエントリはかなりの確率で
    キャッシュされていますので、あまり問題になりません。

    膨大な個数のファイルがあるディレクトリを検索してみると差が顕著に現れます。
    100000個とかファイルがあるディレクトリからファイルを一つだけ検索してみてください。
    LinuxやSolarisなどでは下手をするとシェルが落ちます。
    Windowsではマッチするファイル数が小さければ、問題になりません。

    以上のように。

    Windowsのファイルシステムの設計思想は、「多機能」「高性能」で、
    「なるべくファイルシステムに問い合わせる」ように設計されています。

    readdir()ではなくFindXXXFile()が実装されているのはそのせいです。

    これにより、
    ファイルシステムドライバのコードは増大し、実装が難しくなっていますが、
    反面、キャッシュヒット率の向上、アクセス権・排他処理の高性能化、多言語への容易な対応、
    ディレクトリ検索の高速化につながっています。

    ディレクトリ内のファイル数が多少増えても重くならないようにするためにも、
    ファイル名のマッチングを正しく行うためにも、
    ディレクトリ内のファイル検索はなるべく「カーネルモードにやらせるべき」です。

    つまり、「.NetならGetFiles()やGetDirectories()でマッチングを行う」です。
    複数のパターンでファイルを検索したい場合は、
    「パターンごとにGetFilesを呼び出すべき」です。

    全ファイルを取得して、自分でマッチングさせて探すのは、
    多種多様なファイルシステムをサポートできず、
    将来の拡張性も失い、
    且つ、場合によって使えないほど重くなる可能性があります。

    #ミスリーディングだったのでいくつか修正。
記事No.17488 のレス /過去ログ35より / 関連記事表示
削除チェック/

■17959  Re[3]: データベース制約
□投稿者/ れい -(2008/05/06(Tue) 00:12:11)
    No17957 (ネタ好き さん) に返信
    > それと細かいようですが、教示と書いた方がいいです。
    > 教授といわれても困ってしまいます。

    普通の謙譲語です。
    真実や秘伝といった重要で大切なものを教えてもらう、というニュアンスが含まれる点、
    目上や年配の方に尋ねる場合によく使われる点が「教示」と違います。
    ですので、それほど違和感も感じません。

    まぁそんな細かい言い回しよりも、

    No17953 (ロジック さん) に返信
    >全てのカラムに同じ値があるデータをINSERTあるいはUPDATEで作成した場合
    >エラーを出す為には全ての列にプライマリーの設定をする制約をつけるしか

    「全て」がどこにかかっているのか、明確でないことのほうが重要に思えます。
    たとえば3列のカラムがあったとして、

    a a a

    がINSERTされるときにエラーとしたいのでしょうか?
    それとも

    a b c
    b c d

    というデータがあるときに

    a e f

    をエラーとしたいのでしょうか?
    後者ならはつねさんの言うとおり、「UNIQUE制約」を全てのカラムにつけるのがよいと思います。
    前者ならその度にチェックするのがよいと思います。

    まぁ、大切な真実など、この投稿には無いわけですが。
記事No.17953 のレス /過去ログ35より / 関連記事表示
削除チェック/

■18526  Re[1]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ 純@WAS -(2008/05/14(Wed) 17:23:18)
    質問の背景は同じですが、少々手法を変えます。
    上記の手法の場合、どのようにしてもコンテキストアイテムが取得できませんでした。

    そこで、<meta http-equiv="refresh" content="20;url=aaa.aspx"/>の代わりに、
    .aspx.csファイル内で自動更新を行おうとしたので、アドバイス頂ければと思います。

    まず、ページロードに以下のプログラムを入れました。
    Timer tm = new Timer();
    tm.Elapsed += new ElapsedEventHandler(ReloadPage);
    tm.AutoReset = true;
    tm.Enabled = true;
    tm.Interval = 10000;

    これを利用した上で、一定時間ごとにボタンクリックを発生させるようにしたいです。
    対象イベントはButtonReload_Clickです。

    もしくは一定時間ごとに現在のページに対してポストバックを強制的に発生させる方法がございましたらお教え下さい。

    先の投稿で、環境記述に不備があったので、以下に掲載致します。
    ・OS:Windows XP
    ・開発:Visual Studio2005
    ・言語:ASP.NET(C#)
    ・FW:.NetFramework2.0
記事No.17861 のレス /過去ログ36より / 関連記事表示
削除チェック/

■18539  Re[2]: ページリロード後のコンテキストアイテムの保持について
□投稿者/ はつね -(2008/05/14(Wed) 19:02:44)
>
    No18526 (純@WAS さん) に返信
    > まず、ページロードに以下のプログラムを入れました。
    > Timer tm = new Timer();
    > tm.Elapsed += new ElapsedEventHandler(ReloadPage);
    > tm.AutoReset = true;
    > tm.Enabled = true;
    > tm.Interval = 10000;

    無理。AJAX使うべし。
記事No.17861 のレス /過去ログ36より / 関連記事表示
削除チェック/

■19035  Re[2]: 配列の初期化
□投稿者/ れい -(2008/05/19(Mon) 14:30:24)
    私はやりませんが。
    こんなのなら出来なくもないです。
    
    PInvokeでVB、且つByte型限定ですが。
    
    <DllImport("kernel32.dll", EntryPoint:="RtlFillMemory")> _
    Shared Sub FillMemory(<[In](), Out()> ByVal Destination As Byte(), ByVal Length As UInt32, ByVal Fill As Byte)
    End Sub
    
    
    Dim buf As Byte()
    buf = New Byte(100000) {}
    FillMemory(buf, buf.Length, 10)
    
記事No.19028 のレス /過去ログ37より / 関連記事表示
削除チェック/

■19072  Processの標準出力をリアルタイム取得
□投稿者/ 鶏唐揚 -(2008/05/20(Tue) 09:59:01)

    分類:[VB.NET/VB2005] 

    [OS]WinXP
    [VB]2003/2005

    お世話になっております。
    今回は表題の通り、ProcessのStandardOutputを逐次読み取りたいというものです

    わかりやすいとこで言うとPINGコマンド等、処理の間にもプロンプトに
    順次表示されるものを、呼び出し元で奪ってしまおうと思ったのですが
    当初書いた以下のコードでは当然ながら最終的な出力結果がまとめて返ってきます

    Dim proc As Process

    proc = New Process

    With proc.StartInfo
    .FileName = "PING"
    .Argument = "xxx.xxx.xx.xx" 'IPは伏せます
    .RedirectStandardOutput = True
    .WindowStyle = ProcessWindowStyle.Hidden
    .CreateNoWindow = True
    .UseShellExecute = False
    End With

    proc.Start()
    Debug.WriteLine(proc.StandardOutput.ReadToEnd())
    proc.WaitForExit(10000)

    proc.Close()
    proc.Dispose()
    proc = Nothing


    タイマーでReadToEndとも考えたのですが良く考えればStartで固まるので
    意味ありませんでした。
    マルチスレッド使わずに標準出力のリアルタイム取得を実現できる方法があれば
    ご教示願いたいと思います(マルチスレッド使って実現できるかどうかも未確認ですが)
親記事 /過去ログ37より / 関連記事表示
削除チェック/

■19537  Re[3]: 抽出データの多い時
□投稿者/ はつね -(2008/05/24(Sat) 23:04:52)
    No19533 (みちる さん) に返信
    >>実際に取得する前にSELECT COUNT(*)で件数を数えて判断。
    >
    > ごめんなさい、そのカウントを取る処理は件数が多くてもパフォーマンス的問題は
    > ないのでしょうか

    何に比べてでしょうか?
    取得していって、1000件超えたらエラーとかするのであれば、
    COUNT(*)で数えてしまった方が断然早いです。


    > あとご確認ですが検索結果からトップの100件のみ取り出す場合と
    > 検索結果全てを取り出す場合、やはり速度的違いが断然あるもの

    検索に10秒、100件取り出すごとに1秒かかると仮定してみましょう。
    100件だけとりだすならば、10+1で11秒。
    10000件とりだしたら、10+1*100で110秒。

    それだけじゃなくて、何百万件もあるデータをすべて取り出して、
    すべてWEBアプリで表示しようとしたらブラウザに画面が表示され
    るまでどれくらいまてばいいか想像つきません。

    処理速度の違いを体感したいのならば、計測してみるのが1番ですよ。
    特に何百万件もあるデータが手元にあるのならば、計測も楽ちんかと。
記事No.19529 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19576  Re[4]: 抽出データの多い時
□投稿者/ Algol -(2008/05/26(Mon) 11:51:46)
    2008/05/26(Mon) 11:58:12 編集(投稿者)

    No19537 (はつね さん) に返信
    > ■No19533 (みちる さん) に返信
    > >>実際に取得する前にSELECT COUNT(*)で件数を数えて判断。
    >>
    >>ごめんなさい、そのカウントを取る処理は件数が多くてもパフォーマンス的問題は
    >>ないのでしょうか
    >
    > 何に比べてでしょうか?
    > 取得していって、1000件超えたらエラーとかするのであれば、
    > COUNT(*)で数えてしまった方が断然早いです。
    >
    >
    >>あとご確認ですが検索結果からトップの100件のみ取り出す場合と
    >>検索結果全てを取り出す場合、やはり速度的違いが断然あるもの
    >
    > 検索に10秒、100件取り出すごとに1秒かかると仮定してみましょう。
    > 100件だけとりだすならば、10+1で11秒。
    > 10000件とりだしたら、10+1*100で110秒。
    >
    > それだけじゃなくて、何百万件もあるデータをすべて取り出して、
    > すべてWEBアプリで表示しようとしたらブラウザに画面が表示され
    > るまでどれくらいまてばいいか想像つきません。
    >
    > 処理速度の違いを体感したいのならば、計測してみるのが1番ですよ。
    > 特に何百万件もあるデータが手元にあるのならば、計測も楽ちんかと。
    >

    テーブルの件数を調べるだけなら、where に rownum <= 1001 とすると多少早くなるかと思います。

    select count(*) from test where rownum <= 1001

    こうすると1001件までしかサンプリングしません

    # 5万件のテーブルの件数取得で 0.1秒くらいの差ってとこでした…(汗
    # 5万件取得 0.156秒 / 1001件取得 0.047秒
記事No.19529 のレス /過去ログ38より / 関連記事表示
削除チェック/

■19961  Re[1]: for文を抜けない。。
□投稿者/ Algol -(2008/06/03(Tue) 09:30:08)
    2008/06/03(Tue) 11:00:32 編集(投稿者)
    2008/06/03(Tue) 09:40:28 編集(投稿者)

    前投函を盛大に勘違いしてたお詫びにサンプルを作って計測してみました。
    参考になれば…

    ・計測内容
    1. 1,000,000件x30文字の配列を作成
    2. string.Join メソッドを使った連結
    3. StringBuilderクラスを使った連結(キャパ指定なし)
    4. StringBuilderクラスを使った連結(キャパ指定あり)
    5. += を使った文字列の連結

    ・計測結果
    1. 15ms
    2. 141ms
    3. 430ms
    4. 137ms
    5. 時間がかかりすぎ最後まで到達しなかったので1,000件毎10,000件までの計測
    1000 : 120ms
    2000 : 336ms
    3000 : 697ms
    4000 : 1291ms
    5000 : 2349ms
    6000 : 3679ms
    7000 : 5131ms
    8000 : 6877ms
    9000 : 8848ms
    10000 : 11109ms

    ・結論
    お手軽 = string.Joinメソッド
    速さ = StringBuilderクラス(キャパ指定あり)

    ・サンプルソース

    //配列作成
    string[] testArray = new string[1000000];
    //受け取り用文字列
    string resultString = "";

    //計測
    Stopwatch testTime = new Stopwatch();

    //配列作成
    testTime.Start();
    for (int count = 0; count <= testArray.Length - 1; count++)
    {
    testArray[count] = "123456789012345678901234567890";
    }

    testTime.Stop();
    Debug.WriteLine(string.Format("1.[{0}ms]", testTime.ElapsedMilliseconds));
    testTime.Reset();

    //単純にJoinで
    testTime.Start();
    resultString = string.Join("", testArray);

    testTime.Stop();
    Debug.WriteLine(string.Format("2.[{0}ms]", testTime.ElapsedMilliseconds));
    testTime.Reset();
    resultString = "";

    //キャパ指定なし
    StringBuilder stringBuilder = new StringBuilder();

    testTime.Start();
    for (int count = 0; count <= testArray.Length - 1; count++)
    {
    stringBuilder.Append(testArray[count]);
    }
    resultString = stringBuilder.ToString();

    testTime.Stop();
    Debug.WriteLine(string.Format("3.[{0}ms]", testTime.ElapsedMilliseconds));
    testTime.Reset();
    resultString = "";

    //キャパ指定あり
    stringBuilder = new StringBuilder(30000000);

    testTime.Start();
    for (int count = 0; count <= testArray.Length - 1; count++)
    {
    stringBuilder.Append(testArray[count]);
    }
    resultString = stringBuilder.ToString();

    testTime.Stop();
    Debug.WriteLine(string.Format("4.[{0}ms]", testTime.ElapsedMilliseconds));
    testTime.Reset();
    resultString = "";
    stringBuilder = null;

    //+=の場合
    testTime.Start();
    for (int count = 0; count <= testArray.Length - 1; count++)
    {
    if((count % 1000) == 0)
    Debug.WriteLine(string.Format("{0} : [{1}ms]", count, testTime.ElapsedMilliseconds));

    //リミッタ
    if (count >= 10000) break;

    resultString += testArray[count];
    }

    testTime.Stop();
    Debug.WriteLine("End");
記事No.19950 のレス /過去ログ38より / 関連記事表示
削除チェック/

■20497  Re[7]: OS XP Professional インストール 異常
□投稿者/ ぽぴ王子 -(2008/06/11(Wed) 10:56:21)
>
    No20485 (ooo さん) に返信

    > ただし、サウンドドライバがないため、警告音などをミュートに出来ない上、音が出ない状態です。
    > こちらについても、昨日調べまくったのですが、見つからずじまいでした。
    > リカバリディスクを紛失した以上、自分で探すしか道はないように思われます。
    > どなたか情報をお持ちでしたら、宜しくお願いいたします。
    > たびたび、申し訳ありません。

    「調べまくった」というのは、どの辺を、どの程度、どうやって、調べました?
    言うのは簡単ですけども、その過程を示していただくとよりよいと思います。
    情報を出した後で「それはやりましたが」と言われるとどっと疲れるので。

    前にも書きましたが、自分であれば

    > ・機種名からスペックを割り出す
    > ・使用されているチップから、チップメーカーあるいは同じチップを使っている他社PCのドライバを捜す
    > なんてことをします。

    しかないです。手元に現物があるわけではないので、これ以上はちょっと調べられません。
    # シャープのページにもサウンドチップの情報は書いていないので

    このあたりのソフトを利用してチップを調べて、そこから探すしかないんじゃないでしょうか。

    EVEREST Home Edition
    http://www.altech-ads.com/product/10000755.htm

    ところで、仕事で使用しているPCですか?
    仕事であれば音が出なくてもかまわないんじゃないかと思ったので。



    っと思ったらεπιστημηさんが書かれてました〜
    > PC-MV1-VC1 のaudio-chip は VIA: VT8233 が使われてるみたい。
    ProSavageDDR KN266というところから考えるとソレなのですが…
    別のPCの話ですが
    http://windowsxp_sharp.pasokoma.jp/a_330315.html
    この機種の場合は別途RealTekのチップが載っているようなので、ちょっと心配かな?と。
記事No.20412 のレス /過去ログ39より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>

ヒット件数が多いので過去ログ1〜103 までの検索結果 / 過去ログ104からさらに検索→

パスワード/

- Child Tree -