• 締切済み

VB.NET2003とVB.NET2005の処理速度について

お世話になります。VB.NET2003,2005の処理速度・処理方法について分かる方がいましたら、教えていただきたく質問します。 もともとVB.NET2003で作成されていたプログラムをVB.NET2005に変換して実行した所、ある処理が元の10倍ぐらい遅くなってしまいました。 コードはRadioボタンを動的に作成してPanelにAddして表示する簡単な物です。 以下にコードを乗せます。 For i as integer = 0 to 99 Dim redio As New System.Window.Forms.RadioButton redio.Size = New System.Drawing.Size(120, 40) redio.Top = 8 + (57 * x) redio.Left = 8 + (137 * y) redio.Appearance = Appearance.Button redio.AutoCheck = False 'フォント関連の設定 redio.TextAlign = ContentAlignment.MiddleCenter redio.Font = New System.Drawing.Font(redio.Font.FontFamily, 17.25!, FontStyle.Bold) redio.BackColor = System.Drawing.SystemColors.Control redio.Name = "Check-" & i redio.Text = i.ToString() redio.Visible = True AddHandler redio.Click, AddressOf RadioButton_Click ’※※↓の処理が遅くなった Me.PanelRackControl.Controls.Add(redio) redio = Nothing If y = 4 Then x += 1 y = 0 Else y += 1 End If Next 2003から2005で遅くなるものなのか、処理が悪いのか分かる方がいらっしゃいましたらご教授下さい。 宜しくお願いします。

みんなの回答

回答No.1

お世話になります。 うーん。 コード事態に指摘するほどの問題はないと思います。 上記のコードだけだとビルドできませんでしたので Dim x As Integer = 4 Dim y As Integer = 4 この 2 行を先頭に追加して検証しました。 ワタシの環境でも(WinXPSP2 PentiumD 3.00GHz・2.99GHz 1.00GB RAM)で実行してみましたが、 結果的にはやはり遅くなります。 といってもミリ秒の世界なのであまり違いが解らなかったので 以下のコードを仕込んで、両方で計測しました。 Dim start As Integer = System.Environment.TickCount Console.WriteLine(start) 上記、質問者さんのコード Dim endtime As Integer = System.Environment.TickCount Console.WriteLine(endtime) Console.WriteLine("かかった時間:" & (endtime - start).ToString() & "ミリ秒") ■結果 VS2003:63ミリ秒 VS2005:360ミリ秒 VS2005 のほうが VS2003 に比較して 6 倍近く時間がかかっています。 VS2005 において、対象となっているプロジェクトのプロパティで アプリケーションタブの「XP Visual Style を有効にする」のチェックをはずして実行すると、本当に若干ですが早くなりました。 これはワタシの推測なのですが、 1.1 から 2.0 になったときに、オブジェクト自体も拡張されて 保持している情報量が増えたことが起因しているのではなかろうかと思います。

関連するQ&A

  • VB.NETにおける二値化処理の高速化

    いつも参考にさせて頂いております。 現在、VB.NET(VS2003/.NET Framework1.1)を使用して画像の二値化処理のプログラムを作成しております。 処理する事は簡単で、ビットマップファイルのRED要素を取り出し、閾値内なら白に変換して二値化するプログラムです。 以下がそのプログラムです。 ----- '変換する前の画像をファイルから読み込む Dim img1 As System.Drawing.Bitmap = New System.Drawing.Bitmap(filepath) '変換後のビットマップ Dim img2 As System.Drawing.Bitmap = New System.Drawing.Bitmap(img1.Width, img2.Height) '二値化処理 Dim b As Byte For i = 0 To img1.Width - 1 For j = 0 To img1.Height - 1 b = img1.GetPixel(i, j).R If b >= 閾値下限 And b <= 閾値上限 Then img2.SetPixel(i, j, Color.White) Else img2.SetPixel(i, j, Color.Black) End If Next Next PictureBox1.Image = img ----- これで処理は出来るのですが、ファイルが大きい場合は、非常に時間が掛かってしまいます。処理速度はCPUの速度にもよると思うのですが、できるだけ高速化したのですが、何かよい知恵があればご教授頂けると助かります。よろしくお願いいたします。 XP Pro SP2/VS2003/VB.NET/.NET Framework1.1

  • VB6とVB.NETでは同じフォントでも違う文字になる?

    VB6とVB.NETでは同じフォントでも違う文字になる? VB.NETで文字を印刷しているのですが、VB6で印刷したものと、VB.NETで印刷したものは 同じフォントを指定しているのに、明らかに文字が違います。 このようなことはあるのでしょうか。 あるいはロジックに問題があるのでしょうか。 VB6 Printer.FontName = "MS ゴシック" Printer.CurrentY = YY Printer.CurrentX = XX Printer.FontSize = 10 Printer.Print(TITLE) VB.NET Dim PrtFont1 As New Font("MS ゴジック", 10) e.Graphics.DrawString(TITLE, PrtFont1, Brushes.Black, XX,YY) Windows XP VisualBasic 6.0, Visualbasic2010 Express

  • VB.netで印刷

    プリンターにA4サイズより5mm内側に四角形を書いて印刷したいのですが ずれてしまいます。おそらく余白の設定ではないかとおもうのですが 用紙を横向き、余白0,指定はどう指定すればよいでしょうか あるいは、参考になるサイトをお教えください。 Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim f As New Font("MS 明朝", 64, FontStyle.Bold) e.Graphics.PageUnit = GraphicsUnit.Millimeter e.Graphics.DrawRectangle(New Pen(Color.Red), 5, 5, 287, 200) End Sub

  • VB.NETでのデータベース書き込みについて

    リストレビューに表示されているデータをデータベースに書き込む処理を追加したいのですが、データセットにメモリ上のテーブルを作成してデータベースへ書き込む方が良いのでしょうか? それとも直接データベースに書き込む方が良いのでしょうか? 前者のテーブル作成のコードは書きの通りです。 Public Function AddDataSetTable(ByVal kojo_cd() As String, ByVal kojo_name() As String, ByVal kojo_date() As String)   Dim dtSet As New DataSet("DataSetTable")   Dim dtTable As New DataTable("CalDatTable")   Dim fmain As New FrmMain   Dim i As Integer   'テーブルに列を追加    With dtTable.Columns     .Add("コード")     .Add("名称")     .Add("日にち")    End With   'テーブルに行を追加   With dtTable.Rows    For i = 0 To UBound(kojo_cd)     .Add(New Object() {kojo_cd(i), kojo_name(i), kojo_date(i)})    Next i   End With   'データセットにテーブルを追加   dtSet.Tables.Add(dtTable) End Function

  • VB.NETで同一処理を実行させたい

    VB.NETでプログラム組んでいます。 下のように、あるフォームの中でメニューを設定して、メニューを選択すると処理を実行するようにしています。 Private Sub OpenMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenMenu.Click (オープンメニュークリック時の処理) End Sub このとき、同一フォームの中にツールバーを下のように設定して 上の(オープンメニュークリック時の処理)を実行させるには、 次の???の記述はどのようにすればよいのでしょう?。 (オープンメニュークリック時の処理)はかなり長い処理(関数(Private Sub Function)も含む)になってしまっているので、コピーして記述するのも嫌なのです。 普通に 「OpenMenu_Click()」 でよいのかと思っていましたが、引数(eでしょうか?)を設定しないとだめのようで、。 どのようにすればよいのかわかりません。すみませんが、ご教示ください。 Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick   ??? End Sub

  • VB.NETでExcelの数式バーの処理をさせたい

    Excelのセルにいろいろな数式が入っていて、 この数式を書き出したテキストファイルを読み込ませて、 VB.NETで処理をしたいのですが、 VB.NETで、Excelの文字列関数を含んだ式を処理するには どのように記述すればよいでしょうか。 単なる計算式であれば  Dim xlApp As New Excel.Application  Dim str1 As String  Dim x As Integer  a = "3600 / 60 + 5000"  x = xlApp.Evaluate(a) でできるのですが文字列だとうまくいきません。 例えば、ExcelのシートのA1セルを選択して 数式バーに =MID("ABCDE",2,3) と入力すると その結果のBCDがA1セルに得られますが VB.NETで、 =MID("ABCDE",2,3) から BCD を得るにはどのようにすればよいでしょうか。 なお、=MID("ABCDE",2,3) の式は一例であって、 以下のように、この式をVB.NETで記述する 仕方を知りたいのではありません。  Dim str1, str2 As String  str1 = "ABCDE"  str2 = str1.Substring(2, 3) よろしくお願いします。 (VisualStudio2010 , Excel2003 , WindowsXP SP3)

  • 【VB2005】コントロールを配列に。

    下記のコードを変更して、コントロールの値を配列に代入して、 その値をもとに、ボタンを複製して追加したいと思っています。 Public Class frmStart Dim btnNewButton1 As New Button Private Sub frmStart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load NewButton1.Text = "処理1" btnNewButton1.ForeColor = Color.DimGray btnNewButton1.Location = New Point(10, 100) btnNewButton1.Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton1) end sub End Class やりたいことは、Dim btnNewButton() As New Button のようにデータを配列にして、 btnNewButton(0).ForeColor = Color.DimGray btnNewButton(0).Location = New Point(10, 100) btnNewButton(0).Size = New Size(180, 30) btnNewButton(1).ForeColor = Color.DimGray btnNewButton(1).Location = New Point(380, 100) btnNewButton(1).Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton(0))     Me.Controls.Add(btnNewButton(1)) という事をしたいのですが、方法が解らなくて困ってます。 お知恵を貸してください。

  • VB2008 Form間の計算について

    VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上

  • システムにインストールされているフォント名の取得

    VB.NETですが、システムにインストールされているフォント名を取得するために下記のコードを書きました。 Private Sub GetSystemFonts(ByRef SysFontString As String) Dim SystemFont As New System.Drawing.Text.InstalledFontCollection SysFontString = "" For Each sf As System.Drawing.FontFamily In SystemFont.Families If SysFontString = "" Then SysFontString = sf.Name Else SysFontString = SysFontString & "," & sf.Name End If Next End Sub しかし、このコードだとTrueTypeFontしか取れないようで、OutLineFontなどは取得できないようです。 フォントの種類に関わらず、インストールされている全てのフォント名を取得する方法はないでしょうか? よろしくお願いします。

  • VB2008で定数に色の設定をしたいです。(初心者)

    VB2008で定数に色の設定をしたいです。(初心者) VB2008初心者です。 定数に色の設定をしたいのですがなかなか上手く設定出来ません。 変数に設定は出来るのですが、 Dim COLOR As System.Drawing.Color = COLOR.Red 定数にした場合エラーになります。 Public Const COLOR As System.Drawing.Color = COLOR.AliceBlue 色々他も試してみたのですが・・初歩的な質問で申し訳ありません。 設定は「System.Drawing.Color」でなくても良いのですが、 どなかたかご教授頂きたく宜しくお願い致します。

専門家に質問してみよう