ListPage

2010年8月17日火曜日

DataSetにXMLを取り込む の続き 2

DataSetにXMLを取り込む の続き 2


このオーバーテクノロジーの超ハイスペックパソコンでは
Oracleからのデータ生成に耐えられない!


ので一旦中止

ちなみに行った

動作環境


Operating System: Windows XP Professional (5.1, Build 2600) Service Pack 3 (2600.xpsp_sp3_gdr.100216-1514)
Language: Japanese (Regional Setting: Japanese)
System Manufacturer: Dell Computer Corporation
System Model: OptiPlex GX270
BIOS: Phoenix ROM BIOS PLUS Version 1.10 A03
Processor: Intel(R) Pentium(R) 4 CPU 2.60GHz
Memory: 510MB RAM
Page File: 1179MB used, 196MB available
Windows Dir: C:\WINDOWS
DirectX Version: DirectX 9.0c (4.09.0000.0904)
DX Setup Parameters: Not found
DxDiag Version: 5.03.2600.5512 32bit Unicode

とりあえずデータの在り方にもよるんだろうけど、1000000件の単純な文字列だったら

BeginLoadData EndLoadData

の顕著な効果は現れないみたい。

不満ダ

2010年8月11日水曜日

DataSetにXMLを取り込む の続き

DataSetにXMLを取り込む の続き


BeginLoadData EndLoadData


1000000件
BeginLoadData EndLoadData有り Time is : 00:00:14.5700241
BeginLoadData EndLoadData無し Time is : 00:00:14.7292566


1000000件のデータを処理してみたけど、まったく効果がなかった・・・。ので!
ちょっと調べてみたら


データを読み込む間、通知、インデックスの維持、および制約をオフにします。

データの読込時に、インデックスや制約をオフにする・・。通知ってなんだ・・。


データを読み込んだ後、通知、インデックスの維持、および制約をオンにします。

だから通知ってなんだ・・・。とりあえず、1000000件ばかしのデータじゃあんまかわらんのか。
xmlの構造がもう少し複雑だと変わるのかもしれないのだけれども作成するのが・・・!!!!
そういえば、でかいデータがあった。

Oracle Databaseは、ネイティブXMLの生成をサポートします。次の場所に格納されたXMLデータを生成または再生成するためのオプションがいくつか提供されています。

というわけで、4000000万件分のデータをoracleからつくr・・・・。

メモリが足りないのか、フリーズする。

このPCじゃさすがに無理なのか。


2010年8月9日月曜日

DataSetにXMLを取り込む

DataSetにXMLを取り込む

XMLを取得


DataSetにXMLファイルを読込んで使う事なんて滅多に業務的に無い為メモ


VB.NET

Using ds As DataSet = New DataSet
 Dim dt As DataTable = New DataTable(tabelname)
        Dim xmlSR As System.IO.StreamReader _
         = New System.IO.StreamReader(filepath & xmlName)

        For Each dt In ds.Tables
         dt.BeginLoadData()
        Next

        ds.ReadXml(xmlSR)
        dt = ds.Tables(0)

        For Each dt In ds.Tables
         dt.EndLoadData()
        Next

End Using

C#

using (DataSet ds = new DataSet()) {
 DataTable dt = new DataTable(tabelname);
 System.IO.StreamReader xmlSR = new System.IO.StreamReader(filepath + xmlName);

 foreach ( dt in ds.Tables) {
  dt.BeginLoadData();
 }

 ds.ReadXml(xmlSR);
 dt = ds.Tables(0);

 foreach ( dt in ds.Tables) {
  dt.EndLoadData();
 }

}

DataSet ビジュアライザで確認

実際に確認してみたらいい感じ。

非常に大きなファイルを読み込む際に ReadXml を呼び出すと、パフォーマンスが低下することがあります。大きなファイルを読み込む場合に、ReadXml のパフォーマンスを最大にするには、DataSet のテーブルごとに BeginLoadData メソッドを呼び出し、その後で ReadXml を呼び出します。最後に、次の例に示すように、DataSet のテーブルごとに EndLoadData を呼び出します。


どんくらいの大量のデータやねんってことで調べた。

とりあえず1000件のデータを作成しstopwatchクラスで時間計測!

BeginLoadData EndLoadData有り Time is : 00:00:00.0227109 はえー・・。
BeginLoadData EndLoadData無し Time is : 00:00:00.0192091 あるぇー・・。

データがたりんのね。

10000件
BeginLoadData EndLoadData有り Time is : 00:00:00.1380896 ?
BeginLoadData EndLoadData無し Time is : 00:00:00.1264850 ?

100000件
BeginLoadData EndLoadData有り Time is : 00:00:01.3964389 ?
BeginLoadData EndLoadData無し Time is : 00:00:01.7707770 ?

び・・微妙な差が・・・。

1000000件 私のエディタの限界。
BeginLoadData EndLoadData有り Time is : 00:00:14.5700241
BeginLoadData EndLoadData無し Time is : 00:00:14.7292566

・・・・あれ・・?

・・・・・・・・


MA SA KA!!!

2010年8月4日水曜日

C# VB.NET LINQメモ

メモ LINQ


配列から特定の条件を指定し抜き出す

VB.NET

Dim PenType As String() = New String() {"えんぴつ","クレヨン","シャープペンシル","ボールペン"}
 Dim result As IEnumerable(Of String) = From Pens In Pentype Where Pens.Length <= 5

C#

string[] PenType = new string[] 
            {
  "えんぴつ",
  "クレヨン",
  "シャープペンシル",
  "ボールペン"
            };

            IEnumerable result = from pens in PenType where pens.Length <= 5 select pens;

SQL

select * from pentype where length(pen.name) <= 5

sql func

create or replace function length(v_invalue in varchar2)
return int_outvalue
is
begin
 return nvl(length(v_invalue),0);
end;
/

VB.NET / C# メモリ内クエリは、えんぴつ クレヨン ボールペン くせがあって相変わらず戸惑うな・・。

特定の条件を付けWindowsのサービスを取得

開始状況がRunningのサービスを全て取得

VB.NET

'dobon.net sample 
        '参照設定 System.ServiceProcess
        Dim scs As System.ServiceProcess.ServiceController()
        scs = System.ServiceProcess.ServiceController.GetServices()

        For Each item As System.ServiceProcess.ServiceController In scs
            Console.WriteLine(String.Format("サービス名{0}  状態{1}", item.DisplayName, item.Status))
        Next

        'linq
        Dim result As IEnumerable(Of String) = From sc In scs _
         Where sc.Status = System.ServiceProcess.ServiceControllerStatus.Running _
         Select sc.DisplayName

C#

///dobon.net sample 
     ///参照設定 System.ServiceProcess
   System.ServiceProcess.ServiceController[] scs;
            scs = System.ServiceProcess.ServiceController.GetServices();

            foreach (System.ServiceProcess.ServiceController item in scs)
            {
                Console.WriteLine(string.Format("サービス名{0}  状態{1}"
                    ,item.DisplayName,item.Status));
            }

     ///linq
            IEnumerable result =
                from sc in scs
                where sc.Status == System.ServiceProcess.ServiceControllerStatus.Running
                select sc.DisplayName;