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 >