VBVistaパソコンのこと日記

VistaにVB6をInstall

1 Mins read

なにを今更、VB6と思いますが(汗)
ビジネスの世界では現役?です:evil:

VistaへVB6をインストールする際に気をつけることは

・CDの自動起動でセットアップを始めない!

・エクスプローラからsetup.exeを右クリックし管理者権限で実行でセットアップ開始
(UACやログイン権限にもよるが・・・念のため)

・再インストールの場合、追加と削除にてアンインストールしても以前の残骸が残っている可能性がある、これがオイタをする可能性があるので旧インストール先のフォルダを調べて完全消去!(C:\Program Files\Microsoft Visual Studio)など

・そのあとSP6aをインストール

So Good!:razz:

Read more
Vistaパソコンのこと日記

Vistaのユーザーアクセス制御 UAC

1 Mins read

Vistaに搭載されたUACですが、Admin権限なのに一々MessageBoxの確認が出てきてめんどくさい:evil:

「開発者の俺にどうしろと言うわけ?」ってことVista君に言っても分からないので
「ユーザーアカウント制御」とコントロールパネル(非クラシック表示)で検索すると
「ユーザーアカウント制御の有効化または無効化」が出てくるので、こいつをポチッとやると止まる・・・

まいったかぁ:roll:

でも最近の悪いソフトみてると一般ユーザーにはこの機能があったほうが良い様な気がする:razz:

Read more
パソコンのこと日記

Unbuffered? Unbuffered ECC?Registered ECC?

1 Mins read

仕事でサーバー君とクライアント君のPCを組むことになったんだけど

最近、作ってなかったから久々に秋葉にいったら時代の流れについていけなかった(汗)
今までも色々PC組んできたけど、復習の意味もかねて覚書!

メモリーには以下の機能がある

1.Unbuffered Or Registered (Buffered )
詳しくはRegistered機能とは?

2.ECC Or 非ECC (ノンパリティーチェック)
詳しくはECC機能とは?

上記の法則ではメモリーは以下の4つに分類される

1.Unbuffered 非ECC
  (通常売り場では記載なし Or Unbuffered)
 
2.Unbuffered ECC
  (通常売り場ではUnbuffered ECC Or ECC付き)
 
3.Registered 非ECC
  (???)
 
4.Registered ECC
  (通常売り場ではRegistered ECC Or Registered)

上記の4つに分類されるのだが、3番のReg付きで非ECCメモリーを筆者は見たことがない
なので基本的には3つになると思われる。

どのような環境で使用されるか?

通常クライアントPCなど多くに使用されているメモリは、Unbufferedで非ECCメモリでOKなことが多い
大部分の人はこのメモリーを使用している。
値段は安

ワークステーション向けのXeon対応マザーボードなどでUnbuffered ECCが使用される場合がある
値段は中

サーバー向けのマザーボードではRegistered ECCが良く使われる。
多くのメモリーを搭載する場合にチェック機能がより重要になってくる
値段は高

消費者としては1本化してほしいものである・・・・:roll:

余談・・・Xeon事情
また、最近はFully Buffered DIMMといわれるメモリーも登場し、DDR2以上のメモリー対応をしている
Xeonなどのマザーボードでは使用され始めている。
値段は激高

ちなみにこのメモリーも分類はRegistered(Buffered) ECCで・・・
パリティチェック(Chipkillという)度合いは従来のECCチェック以上:evil:

Read more
.NETASP.NETパソコンのこと日記

Disposeにてアンマネージドコードとマネージドコードの違い

1 Mins read

前回の続きドス:evil:

前回「Dispose」の実装について記述しましたが

  'クラスのリソースを解放するオーバーロードされた Dispose メソッド。
  'このメソッドは基本クラスの Dispose メソッドおよび Finalize メソッドから呼び出す必要があります。
  Protected Overridable Sub Dispose(ByVal disposing As Boolean)
    If Not Me.disposed Then
      If disposing Then
        ' Insert code to free unmanaged resources.
      End If
    ' Insert code to free shared resources.
    End If
    Me.disposed = True
  End Sub

引数にBuooleanの引数があり、内部If文でTrueとFalseで開放の種類を選別できる形になっていますが、
これの意味を解説しますね。

.NETではCLRという中間言語を使用して管理しています。

しかしWin32APIなど旧来のロジックも記述することが出来るので、開放時のタイミングがNew元が開放するのと
GC任せで開放するのではタイミングにずれが生じ、後者の場合CLR以外の記述がある時に問題が発生する可能性があります。

New元が呼び出す「Public Overloads Sub Dispose() Implements IDisposable.Dispose」内では

全ての開放が出来る「Dispose(True)」で呼び出され

いつ呼び出されるか分からない「Protected Overrides Sub Finalize()」内では

CLRが管理するものだけ開放が出来る「Dispose(False)」で呼び出されているのです。

なので特殊対応しているものでない限りIf外に記述することになるでしょうね:razz:

特殊対応は責任を持ってその都度、後処理が必要になるということですな:cool:

Read more
.NETASP.NETパソコンのこと日記

DisposeとFinalize

1 Mins read

ガベージコレクション(以下GC)の話をしましたが、Classの良い所は前処理と後処理が出来るところだと思いますが、
.NETではFinalizeの実装はされていますが、これはGCのせいで、いつ呼び出されるか分かりません。

そのためプログラマは開放処理を狙って行えない!

メモリーの解放はシカトでもファイルのIOやDBのIOなど後処理をしたいClassが沢山ある:evil:
「Finalize」は外部から意図的にCall出来ないので後処理としてはあまり使えません。

VB6の頃はオブジェクトの開放といえば「Set obj = Nothing」でしたが、.NETでは「obj.Dispose」となりました。
しかし、この「Dispose」くんはControlやFormなどには標準でインターフェイスとして付いてますが、
プログラマが独自にClassを作成するときには明示してあげないと使えません・・・・・:sad:

そこで「Implements IDisposable」を実装して以下のようにしてあげます。

Public Class Class1
  Implements IDisposable
 
  'オブジェクトが破棄されたかどうかを追跡するためのフィールド。
  Protected disposed As Boolean = False
 
  Public Sub New()
  End Sub
 
  Protected Overrides Sub Finalize()
    MyBase.Finalize()
    Dispose(False)
  End Sub
 
  Public Overloads Sub Dispose() Implements IDisposable.Dispose
    Dispose(True)
    'GCに対して自分を解放してくれ!と命令!
     GC.SuppressFinalize(Me)
  End Sub
 
  'クラスのリソースを解放するオーバーロードされた Dispose メソッド。
  'このメソッドは基本クラスの Dispose メソッドおよび Finalize メソッドから呼び出す必要があります。
  Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
    If Not Me.disposed Then
      If disposing Then
        ' Insert code to free unmanaged resources.
      End If
    ' Insert code to free shared resources.
    End If
    Me.disposed = True
  End Sub
 
End Class

ここで出てくる「GC.SuppressFinalize(Me)」はGCからメモリ開放してと御願いしているので、
メモリー開放まで行わない方はコメントでも良いでしょう。

まぁ普通は破棄のタイミングも考えて開発しますからあって、良い処理ですな:wink:

そして「Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)」の中に
開放ロジックを書いてあげて、呼び出し元には必ず「obj.Dispose」を呼んで貰うようにすればOK

VB6の場合「Set obj = Nothing」
 
.NETの場合「obj.Dispose」

「Dispose」が無いものは書かなくても良い=後処理無いのでメモリーの解放はGCに任せる!でもOKだが・・・

やっぱり綺麗に書くことが何事にもプラスに働くはず☆

Read more