|
What would be the fastest way to count the number of set bits in a byte?
I currently use a static array which has the number of bits set for each possible combination of set bits then use the byte value to index into that array.
Are there faster ways to do it?
|
|
|
|
|
|
Is it? Drat! It's where my code spends most of its time - although it is doing it billions of times so I don't suppose I can complain.
Thanks for the reply.
|
|
|
|
|
I have a general rule when it comes to optimization:
- the fastest way to do something is not to do it
i.e. does you code really need to count the bits? is there a way to avoid it?
what are you counting bits for btw?
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
It's a database application which stores the presence or non presence of variable values in bit vectors stored in byte arrays. Counts and analyses can then be run very quickly - for example:
All people who live in England, drive a ford, eat out at restaurants once a week, read the Times and don't have a pet - on a database of 100 million individuals takes half a second.
Counting the bits gives the total number matching the criteria after the logic processing has done its thang.
TBH, it's not too much of a worry that the bit counting is taking a lot of the time as I am happy with half a second on 100 million individuals - and I doubt I will ever put 100 million individuals into a real database, I was just stress testing then seeing where it was spending its time.
|
|
|
|
|
lol strange coincidence...
i used to design direct marketing systems for exactly this kind of thing (CMT/NDL/Claritas)
check you IO and Page faulting...
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
Really? I used to write the software at Dudley Jenkins for their direct marketing "lifestyle" database. I have set up on my own now.
I have got the IO and Page Faulting sorted, I believe. There is certainly very little page faulting when analysing the 100 million and the IO seems to have very little impact. It's been quite a ride getting this thing to work this fast in C# after writing similar software in C++.
|
|
|
|
|
Speed is always difficult do maintain with so many different layers inserted between processor and application.
C# feels good, though. Most of the times
Cheers
Sid
|
|
|
|
|
True, I rather like C# now, I wqasn't to keen at first and I still have to do stuff I would rather not just to get the performance but then that's often the case in most languages - at least C# remains reasonably readable.
|
|
|
|
|
Hi,
Could someone tell me the purpose/good situations where override and new keywords are used in function declaration.
I got the primary idea through versioning sample(given below for your reference). But I am sure,there is more value than what I can I understand through this sample.
Thanks
Vinay.
The sample :
--------------
//Copyright (C) 2000 Microsoft Corporation. All rights reserved.
// versioning.cs
// CS0114 expected
public class MyBase
{
public virtual string Meth1()
{
return "MyBase-Meth1";
}
public virtual string Meth2()
{
return "MyBase-Meth2";
}
public virtual string Meth3()
{
return "MyBase-Meth3";
}
}
class MyDerived : MyBase
{
// Overrides the virtual method Meth1 using the override keyword:
public override string Meth1()
{
return "MyDerived-Meth1";
}
// Explicitly hide the virtual method Meth2 using the new
// keyword:
public new string Meth2()
{
return "MyDerived-Meth2";
}
// Because no keyword is specified in the following declaration
// a warning will be issued to alert the programmer that
// the method hides the inherited member MyBase.Meth3():
public string Meth3()
{
return "MyDerived-Meth3";
}
public static void Main()
{
MyDerived mD = new MyDerived();
MyBase mB = (MyBase) mD;
System.Console.WriteLine(mB.Meth1());
System.Console.WriteLine(mB.Meth2());
System.Console.WriteLine(mB.Meth3());
}
}
|
|
|
|
|
To begin with, both these topics are discussed in the online help, as well as probably hundreds of indy websites around the globe, but I'll try to give a brief reply that might help clarify things:
1. A subclass method marked with "override" indicates that the programmer has a subclass in which he does not desire to (only) use the base class implementation of a particular method. The developer may still choose to execute the base implementation (e.g. base.SomeVirtualMethod() ) but he can choose to completely replace - or "override" - the base implementation if desired.
2. A subclass method marked with "new", or one that bears the same name as a base method which has no "override" modifier on it, "hides" (C#) or "shadows" (VB) the base method. Subclass methods that hide base methods can (like overrides) also completely replace the functionality of the base implementation.
The main difference between "override" and "new", and certainly the one that underscores the danger in using "new" indescriminately, is in regards to execution of the virtual methods.
If you have overridden base methods, it does not matter how your variables are declared - it's the way they are instantiated that matters, so even if an instance is "upcasted" to the base type, the overridden implementation will be called. This is very important - it's part of what makes concepts like polymorphism work.
However, using "new" has some potentially unexpected results.
Assuming we are using your example above, and we write:
MyDerived md = new MyDerived();
string foo = md.Meth2();
We would get the expected result; the derived class' implementation of Meth2, or "MyDerived-Meth2".
However, if we wrote:
MyBase mb = new MyDerived();
string foo = mb.Meth2();
We would actually get the base class implementation of Meth2's return, or "MyBase-Meth2".
Careless or uninformed use of hiding can have very serious implications and confusing results. In general, override should "always" be used. I put "always" in quotes because it's impossible to say "always" and get away with it. There are some possible cases where hiding methods is acceptable. For instance if you had a third party assembly to which you had no source, and one of its types had a method that was non-virtual, and did something that made your life impossible, then *maybe* hiding the base implementation would be okay.
I can't think of a case for hiding a virtual base method, though, except human error.
I hope this helps.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
The textbox is already set to MultiLine = true;
How can I move to a new line in a textbox using code?
Thanks
|
|
|
|
|
myTextBox.Text += "This is a new line" + "\r\n";
This means: The box uses both new-line and carriage-return characters to determine where each line ends.
Cheers
Sid
|
|
|
|
|
You can either append "\r\n" to your Text or append the string returned by Environment.NewLine . Using the Environment.NewLine is preferred for code portability.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I've create my own class and i've instanced an object in this way:
MyClass mObjcet = new MyClass();
...
i use it, now i want release all the memory, how?
|
|
|
|
|
The garbage collector does it for you when there are no longer any references to that object.
|
|
|
|
|
You don't. The Garbage Collector will free the memory whenever it gets around to it (it's pretty lazy), or if the system is running low on memory.
You can force a garbage collection, but don't try it unless you know exactly what you're doing, why, and what the side-effects of doing so are. The GC has it's own built in scheduling and optimization system built in. Forcing collections whenever YOU feel like it needs to be done can actually degrade system performance.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
am developing an application that uploads an image to the database and other users can view this pic, uploading is ok, but the problem in displaying the pic from the database, heres my code.
image = (byte[])this.mData.Tables[0].Rows[x]["Image"];
System.IO.MemoryStream memStream = new System.IO.MemoryStrea(image);
System.Drawing.Image Img = System.Drawing.Image.FromStream(memStream);
the data type of the column "Image" in the database is "image"
everytime i run the code i get Argument Exception "Invalid parameter used." on the line
System.Drawing.Image Img = System.Drawing.Image.FromStream(memStream);<br />
i look everywhere on the net but they r using the same way i think, i dunno where the problem is.
any help ?
thanx
|
|
|
|
|
I use this instead:
OleDbCommand cmd = new OleDbCommand("select Image " +
"from Table where Name=@Name", conn);
OleDbParameter param = new OleDbParameter("@Name", OleDbType.VarChar);
param.Value = textBoxName.Text;
cmd.Parameters.Add(param);
OleDbDataReader reader = cmd.ExecuteReader();
reader.Read();
long length = reader.GetBytes(0, 0, null, 0, 0);
byte[] buffer = new byte[length];
length = reader.GetBytes(0, 0, buffer, 0, (int)length);
if (buffer.Length == length)
{
MemoryStream ms = new MemoryStream(buffer);
mImage = Image.FromStream(ms);
Adapt this code to your and enjoy.
}
|
|
|
|
|
am using dataset instead of the SqlDataReader, so how i retrive the column in byte format, casting ?
so it will be like
byte[] img = (byte[])mData.Tables[0].Rows[0]["image"];<br />
MemoryStream ms = new MemoryStream(img);<br />
System.Drawing.Image myImage = System.Drawing.Image.FromStream(ms);
then, i'll back the same point and to the same exception.
could u explain much more please.
thanx for ur reply
|
|
|
|
|
i also mentioned somethin, that everytime the length of the byte is 13
even if i changed the pic. i mean that this line of code always returns a bytes of length 13
byte[] img = (byte[])mData.Tables[0].Rows[0]["image"];
byte length is always 13
|
|
|
|
|
I have a local Udp port opened by a process. I need to share this port with another process. How Can I do it using UdpClient.
Regards
|
|
|
|
|
Uhhh... AFAIK, you can't! How is either app going to know that the message coming down the pipe is for it and not the other app?
Whoops! My bad! I was thinking TCP, not UDP...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I've been testing a few of my own apps in 2.0, and i'm having trouble with ones that minimise-to-tray
basically, after a lot of digging and hair pulling, i found that if you call this.Visible=false on a form to hide it, and later on call this.Visible=true to reshow it - all comboboxes on that form stop firing SelectedIndexChanged events. they work fine up to the point where you alter the Visible properly on the form that holds them.
does anyone know of a nice workaround I can use for this? (other than disposing the form on minimise and reconstructing a whole new one on the tray icon maximise event - thats just not possible for some of the apps i've got ).
Thanks
Steve
|
|
|
|
|
I am working on A project that needs a dial-up connection to the internet;
i need away to make this connection
this is my e-mail "ahmed_sep_1983@hotmail.com" please any code ,i am a computer Engineering student and this is apart of my graduation project so please help me ;
any one,any thing;
"using C#"
|
|
|
|