Stuart McLachlan
stuart at lexacorp.com.pg
Wed Sep 23 01:19:21 CDT 2009
Sorry,
I was under the impression that we were talking about selecting rows from JC's "Database
>From Hell", not just manipulating bit arrays which we have somehow magically populated
without pulling data from SQL Server.
--
Stuart
On 23 Sep 2009 at 10:06, Shamil Salakhetdinov wrote:
> Hi Stuart,
>
> We're talking C#/VB.NET here? - try test code in P.S -
>
> ===========
> one billion
> ===========
>
> of bitwise AND operations for
>
> ============================
> two 400 bits long bit arrays
> ============================
>
> takes about
>
> ====================================
> 1 minute 4 seconds 260 milliseconds
> ====================================
>
> on my "mere mortals PC" - two years old Dual Core Pentium.
>
> Please correct me if you or anybody else here will find mistakes in my
> coding/testing results.
>
> Thank you.
>
> --
> Shamil
>
> P.S.
>
>
> static void test1()
> {
> const long CYCLES_QTY = 1000000000; // 1 billion
> bool[] values1 = (bool[])Array.CreateInstance(typeof(bool), 400);
> bool[] values2 = (bool[])Array.CreateInstance(typeof(bool), 400);
> values1[0] = true;
> values1[225] = true;
> values1[399] = true;
> values2[225] = true;
> values2[399] = true;
>
> System.Collections.BitArray bitTest1 =
> new System.Collections.BitArray(values1);
> System.Collections.BitArray bitTest2 =
> new System.Collections.BitArray(values2);
>
> Console.WriteLine("{0:HH:mm:ss.fff}", DateTime.Now);
> for (long l = 1; l < CYCLES_QTY; l++)
> bitTest1.And(bitTest2);
> Console.WriteLine("{0:HH:mm:ss.fff}", DateTime.Now);
>
> foreach (bool bit in bitTest1)
> Console.Write("{0}", bit ? "1" : "0");
>
> Console.WriteLine();
>
> //09:54:40.993
> //09:55:44.733
> //00000000000000000000000000000000000000000000000000000000000000000000000000
> 000000
> //00000000000000000000000000000000000000000000000000000000000000000000000000
> 000000
> //00000000000000000000000000000000000000000000000000000000000000000100000000
> 000000
> //00000000000000000000000000000000000000000000000000000000000000000000000000
> 000000
> //00000000000000000000000000000000000000000000000000000000000000000000000000
> 000001
>
> }
>
> static void test2()
> {
> const long CYCLES_QTY = 1000000000; // 1 billion
> bool[] values1 = { true, false, false, true };
> bool[] values2 = { false, true, false, true };
>
> System.Collections.BitArray bitTest1 =
> new System.Collections.BitArray(values1);
> System.Collections.BitArray bitTest2 =
> new System.Collections.BitArray(values2);
>
> Console.WriteLine("{0:HH:mm:ss.fff}", DateTime.Now);
> for (long l = 1; l < CYCLES_QTY; l++)
> bitTest1.And(bitTest2);
> Console.WriteLine("{0:HH:mm:ss.fff}", DateTime.Now);
>
> foreach (bool bit in bitTest1)
> Console.Write("{0}", bit ? "1" : "0");
>
> Console.WriteLine();
> //09:52:32.604
> //09:52:46.785
> //0001
> }
>
>
> -----Original Message-----
> From: dba-vb-bounces at databaseadvisors.com
> [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan
> Sent: Wednesday, September 23, 2009 1:48 AM
> To: Discussion concerning Visual Basic and related programming issues.
> Subject: Re: [dba-VB] Merge rows
>
> The data storage requirements may be smaller, but the time required to
> perform multiple
> bitwise operation functions on every one of those 50 milllion rows is going
> to be a lot slower
> than using simple selection criteria on fields.
>
> --
> Stuart
>
>
> On 23 Sep 2009 at 0:15, Shamil Salakhetdinov wrote:
>
> > OK, so you can "pack" 400 boolean fields into 50 bytes long binary field -
> > that will be BINARY(50) in T-SQL.
> > Although I'm not currently sure you can implement bitwise logical
> operations
> > solely using T-SQL: but I suppose you can get subset of data using
> > non-Boolean where clause, and then scan it in C#/VB.NET and filter using
> > bitwise C# operations/functions over bit arrays.
> >
> > Something like that should work I suppose.
> >
> > Please correct me if I'm wrong.
> >
> > --
> > Shamil
> <<< snip>>>
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus signature
> database 4448 (20090922) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.esetnod32.ru
>
>
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>