Several years ago, I had written my own little hashcode for my web search spider. I checked the performance on my 64 bit system, and to put it mildly, it was horrible. I was talking to Dave Wanta this week and he reminded me of the Hashing support in .NET. I had completely forgotten about it. I yanked out my hash code and used the hasing in .NET. I got better performance using the hashcode in .NET when inserting into the database. I believe that my code did not provide a good spread to effectively use the database indexes that I had setup. By going to the .NET hash support, I think I was able to get a better spread for my indexing system and was able to get rid of a database hotspot. Right now, I am trying to see how many records it will support.
I put my Web Spider code onto my x64 system. Everything is managed code. I was able to just start running the code. The lesson seems to be that if you right 100% managed code, your code will run, your code has a pretty good change of running in 32 bits or 64 bits. I always hate to say something will run a 100% of the time, but my guess is that it has a good chance of running. Perhaps someone from MS can post a comment about the pitfalls of 32 vs. 64 bits in .NET 2.0.
I made some changes to my spider to only search specific sites as oppossed to just going out there and searching the Web Graph. It was fairly simple. All I had to do was change a couple of stored procs.
Wally
It looks like Skype 2.0 is out. It has Video Calling in it. I downloaded and installed it last night. http://www.skype.com.
More info on this after I do a test run with someone.
Update: The video feature is in beta.
Wally
I listened to CNBC the other day. It seems that many analysts are just falling all over themselves with this Web 2.0 hysteria. Have we not been down this path before? "Have we not heard the chimes at midnight" and haven't they learned their lessons from the dot-COM bubble burst? It seems to me this "irrational exuberance" will only lead to a similar result.
My business partner and I were discussing this yesterday and then I spotted Rob's post with similar thoughts on Google.
There is an old business proverb that more must come in than go out. Until these companies can prove that they can make this happen, I really question the "Web 2.0" exuberance from the standpoint of viable business opportunities. Will all of these "Web 2.0" companies and services fail? Absolutely not, but just don't jump straight into this financially without understand risk-reward.
Wally
PS. How many times do you get Shakespeare and Greenspan in the same post?
I was just working with the UpdatePanel in Atlas. I was thinking that it would be nice if there was some type of IDE support the UpdatePanel and the EventTriggers. Well, there is. Check out this little jewel. When you click on <control>, you get a list of the current controls on the page. Very nice. When you click on the event, you get a list of events. Very nice indeed.

Original URL: http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2006/01/10/71.aspx
ASP.NET Podcast – Show #33
Subscribe
Download
Show Notes:
Welcome to the First Show of 2006.
More Wally in your life.
Got my MVP Award for 2006. I go off on a tangent about what an MVP is.
I got a really cool laptop bag as a present.
The “Beginning AJAX with ASP.NET” book is coming along. Paul, Scott, and I are hard at work.
Who is Bruce Dickenson and why does he send me strange emails? Do you know why?
What do words mean in IT?
- Strategic.
- Tactical.
- Opportunity.
- “Stepping up to the plate.”
- “Stepping into one”/”Taking one for the team.”
MSMQ
Class:
[Serializable()]
public class cSearchResults
{
public string Url = String.Empty;
public string ServerName = String.Empty;
public long Id = 0;
public string UrlText = String.Empty;
public DateTime DateSearched;
}
Sending a Message:
Simple:
public static void StoreSearchUrl( string pstrCn, string pstrUrl )
{
MessageQueue mq = new MessageQueue(gstrQueueForSearchUrl);
mq.Send(pstrUrl);
mq.Dispose();
mq = null;
}
Class:
MessageQueue mq = new MessageQueue(gstrQueueForSearchResults);
cSearchResults objRes = new cSearchResults();
try
{
objRes.UrlText = pText;
objRes.Url = pstrUrl;
objRes.Id = plngUrl;
objRes.DateSearched = DateTime.Now;
mq.Send(objRes);
}
finally
{
mq.Dispose();
mq = null;
}
Receiving a Message:
Simple:
gMQSearchUrl = new MessageQueue();
gMQSearchUrl.Path = gstrQueueForSearchUrl;
gMQSearchUrl.Formatter = new XmlMessageFormatter(new string[] { "System.String, mscorlib" });
gMQSearchUrl.ReceiveCompleted += new ReceiveCompletedEventHandler(this.MQ_ReceiveCompleted_ForSearchUrl);
gMQSearchUrl.BeginReceive();
...............
private void MQ_ReceiveCompleted_ForSearchUrl(object sender, ReceiveCompletedEventArgs e)
{
// Add code here to respond to message.
//new XmlMessageFormatter(new String(){"System.String, mscorlib"});
System.Messaging.Message msg = gMQSearchUrl.EndReceive(e.AsyncResult);
msg.Formatter = new XmlMessageFormatter(new String[]{"System.String, mscorlib"});
string strBody = (string)msg.Body;
try
{
StoreUrlInSearchUrl(strBody);
}
//Exception handling code
finally
{
if ( this.gblRunStatus == true )
{
gMQSearchUrl.BeginReceive();
}
msg.Dispose();
msg = null;
}
Class:
gMQSearchResults = new MessageQueue();
gMQSearchResults.Path = gstrQueueForSearchResults;
gMQSearchResults.Formatter = new XmlMessageFormatter(new Type[] { typeof(WebSearch.cSearchResults) });
gMQSearchResults.ReceiveCompleted += new ReceiveCompletedEventHandler(this.MQ_ReceiveCompleted_ForSearchResults);
gMQSearchResults.BeginReceive();
........................
private void MQ_ReceiveCompleted_ForSearchResults(object sender, ReceiveCompletedEventArgs e)
{
// Add code here to respond to message.
System.Messaging.Message msg = gMQSearchResults.EndReceive(e.AsyncResult);
WebSearch.cSearchResults cSearchRes;
try
{
msg.Formatter = new XmlMessageFormatter(new Type[] {typeof(WebSearch.cSearchResults)}); //= new XmlMessageFormatter(new Type() {GetType(WebSearchSupport.cSearchResults)}); //new XmlMessageFormatter(new String(){"System.String, mscorlib"});
cSearchRes = (WebSearch.cSearchResults)msg.Body;
StoreUrlInSearchResults(cSearchRes);
}
//Exception handling code
finally
{
msg.Dispose();
msg = null;
if ( this.gblRunStatus == true )
{
gMQSearchResults.BeginReceive();
}
}
}