Delphi Technology Solutions - development, websites, computers and networks

Development   |   Computers & Networks   |   Websites   |   Products & Services   |   Client Success   |   News

David's Ramblings on Development

SharePoint, InfoPath, .Net and more




Microsoft CRM 3.0 Performance Hog

Share |
clock October 12, 2006 17:50 by author David Lozzi

So, at my company we're using Microsoft's CRM 3.0 and I must say, I like it. The integration with Outlook is seamless and customization is easy too. We have, however, experienced some significant performance issued with it, specifically when installed as a Laptop Client. We don't have any Desktop Clients installed yet but I'm guessing this isn't issue with the Desktop Client.

If you don't know, the Laptop Client uses MSDE 2000 to store the data offline and synchronizes with the SQL server that CRM is running on. Gotta love SQL, especially desktop edition. MSDE tends to be a bit of a RAM hog and thus CRM becomes the RAM hog. Our database is relativly small, we don't use it for all appointments and tasks yet, there's three users as of now, still in "testing" mode. We have about  80 companies, 130 or so contacts and about 80 opportunities/quotes/orders/invoices etc. Not that big. As I write this, my sqlservr.exe is taking about ...... wait a minute its not too bad right now. That's funny. I just had an episode with this, uninstalled CRM and Office 2003, installed Office 2003 then installed CRM and it appears to be happier now. I swear before sqlservr.exe was taking about 150MB VM and about the same of memory. Also the Microsoft.Crm.Application.Hoster.exe was taking up about the same amount. Now they are both under 100MB, not bad.

It could also be due to some of the changes I made suggested by someone in a msnews newsgroup. I was complaining about how much CRM is a performance hog. My post on 10/9/06:

**********
Howdy,

I've tried running CRM 3.0 on my laptop (ThinkPad Z61p Dual Core 2Ghz, 1GB
RAM, 100GB SATA, Windows XP Pro SP2) but it just bogs it down to no end.
When my computer is idle, CRM is offline, and Outlook 2003 SP2 is set to
Work Offline, outlook.exe utilizes about 40-55% of my processors! When CRM
is online and Outlook is also online and I'm local to the CRM server
(ethernet) it does the same thing.

Its a little bearable for myself because even at half processor
availability, i can get most of my work done, once in a while i'll close
outlook just to get some functions done. My coworkers are on slower
computers and laptops and their outlook will lock up for 2-4 minutes between
opening and closing.

I just reinstalled Outlook 2003 and SP2 and have not installed CRM yet and
everything is quite happy. Processor is idling around 1-5%. I'm going to
install CRM in a few days, once I know Outlook is happy and try it again,
but I know from experience, its going to bog my computer again.

What can be done? Is anyone else experiencing similar issues? Microsoft,
help!
**********

See, I was having issues. Someone replied to my post and I think it actually worked! Their reply was

**********
Try not syncing on startup. Go to CRM -> Options  and the Sync tab.  Uncheck
sync on startup.  

Also try disabling the AutoTagging feature in CRM. 

Start the Microsoft CRM server as a CRM administrator user.
2. Click Settings, click Organization Settings, and then click System
Settings.
3. In the System Settings dialog box, click the Outlook Synchronization tab.
4. In the Check for promoted e-mail every field, type 9999.
5. In the Perform additional checks for promoted e-mails when new e-mail is
received box, click No.
6. Click OK.
7. Restart each Microsoft CRM client.

If the users inbox is rather large it can slow down performance.
***********

So here's what I did. In CRM web interface when logged in as an administrator, I went to Settings, then Organization Settings, then System Settings. On the Outlook Synchronization tab I changed the "Check for promoted e-mail every" from 10 to 9999. I also changed "Performed additional checks for promoted e-mails when new e-mail is received" from Yes to No.  My understanding is that CRM will scan your inbox in the time increment specified to find emails to promote. Also do the same checks when new emails arrive. This may explain the issue when idle Outlook was crunching away. My Inbox consists of about 1500 emails so I'm guessing that's a lot for it to work on.

Then in Outlook, I went to the CRM menu then Options. Then went to the Synchronization tab and unchecked "Synchronize the items in my Outlook folders as startup". So it appears that CRM will synchronize Outlook with itself? There's a lot of checking and synchronizing that CRM does, and I'm not sure if its all needed. Is Microsoft trying to help too much again?

So, since I've made the above changes my laptop has been running great. Outlook has been normal and not crunching away. I passed the tip along to my coworkers but don't know if they've applied it yet. When they do I'll let you know how it goes.





Microsoft's CRM is a BEAST

Share |
clock October 9, 2006 17:50 by author David Lozzi
A breif explanation of my current configuration:
My laptop is a Lenovo/IBM ThinkPad Z61p with Intel DualCore 2Ghz, 1GB RAM, 100GB SATA HDD, Windows XP Pro SP2, Office Professional with SP2
CRM 3.0 Small Business runnning on SBS Premium 2003
 
First off, if Microsoft's CRM wasn't so stink sweet and intuitive and easy to use, I wouldn't bother. I've used SalesLogix by Sage Software, and though that is a great CRM app, I think Microsoft's is by far better. It integrates with Outlook 2003 in such a way that you don't need to access another program to run CRM, its all inclusive in Outlook. Appointments and contacts sync seamlessly between the two so you can sync it from your computer to any PDA. There's a mobile version of CRM for Microsoft Windows Mobile but I havent installed it yet. Have you? Is it worth it?
 
I've been running CRM 3.0 for a few months now and I do really love it, but its a resource hog! The MSDE it installs on takes about 200MB RAM, which isn't bad for my laptop, but my coworkers have lesser laptop and it bogs their systems down a lot. Also, it does chew on the processors a lot without any release (unless I close Outlook).  When my computer is idle, CRM is offline, and Outlook 2003 SP2 is set to Work Offline, outlook.exe utilizes about 40-55% of my processors! What is Outlook thinking about? When this happens, it takes 10-15 seconds to open Word and Excel files and even write an email in offline mode. When CRM is online and Outlook is also online and I'm local to the CRM server (over ethernet) it does the same thing.
 
Its a little bearable for myself because even at half processor availability, i can get most of my work done, once in a while i'll close outlook just to get some functions done. With Outlook closed, Word and Excel open quickly as expected for these hardware specs. My coworkers are on slower computers and laptops and their outlook will lock up for 2-4 minutes between opening and closing.
 
I just reinstalled Outlook 2003 and SP2 and have not installed CRM yet and everything is quite happy. Processor is idling around 1-5%. I'm going to install CRM in a few days, once I know Outlook is happy and try it again, but I know from experience, its going to bog my computer again.

What can be done? Is anyone else experiencing similar issues? Microsoft, help!





UniObjects.Net is not as friendly as I was hoping

Share |
clock October 5, 2006 17:51 by author David Lozzi

But then again, I usually do make unreasonable demands. I've used UniObjects (UO) before it became UniObjects.Net (UO.Net) with Classic ASP. I found it simple to use and understand with files and sub routines in ASP. With the introduction of .Net things got a little more complicated to say the least. I was honetly expecting UO.Net to return my data in a dataset or something the .Net list controls would like, but noooooo. Lists of data is returned from UO.Net as either a DynamicArray (UniDynArray) or XML. When being returned from a subroutine, more times than not its a UniDynArray unless the Universe (UV) developer created it as XML. When dealing with a single file, i.e. selecting a subset of parts, putting it to XML is easy and is effective because a DataSet will consume an XML document quite nicely. So how do I get a UniDynArray into a list control like a listbox, dropdownlist, gridview, datalist, datagrid, etc.? Loop it:

Dim uniSession As UniSession = Nothing
Try
uniSession = UniObjects.OpenSession(UVServerIP, UVUserID, UVPassword, UVAccount, UVService)
Dim uniSub As UniSubroutine = uniSession.CreateUniSubroutine("GETSUBJECTS"
, 6)
uniSub.SetArg(0, common.CompanyCode)
uniSub.Call()

' The subroutine has its own error management
If uniSub.GetArg(1) = "1" Then
  Throw New Exception("Subroutine returned error: " & uniSub.GetArg(2))
End If

Dim uniList As New UniDynArray(uniSession, uniSub.GetArg(3))
Dim arr As New
ArrayList
' And here's the loop
For i As Integer = 1 To
uniList.Count(1)
  arr.Add(New
LeftNavItem(uniList.Extract(1, i, 0).ToString, uniList.Extract(2, i, 0).ToString))
Next

' Then load it into whatever you want
_leftnav = arr

Catch ex As Exception
  _error = ex.ToString
Finally
  UniObjects.CloseSession(uniSession)
End
Try

Surprisingly enough, its not as much of a server performance hog as I was expecting. It took me a long time to figure this out, and since the universe forums are pretty dead most of the time, it was painstakenly slow. My IBM support rep helped a ton and we figured it out.  But as with anything, once you know how to do it it gets easier and easier.

Writing to Universe is even more fun... I'll be posting that soon, as soon as I figure it out!





Writing to UV errors big time

Share |
clock October 5, 2006 17:51 by author David Lozzi

So, in my endeavors of finishing my three week late project for a customer, I ran into a snag, rather a wall. When trying to write to universe (uv) using uniobjects.net (uo) the browser returns the following error:


Server Application Unavailable

The web application you are attempting to access on this web server is currently unavailable.  Please hit the "Refresh" button in your web browser to retry your request.

Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.


 

So I thought, wow this stinks. So I check out the application log and find the following helpful error message


Event ID: 1000
Source: ASP.NET 2.0.5...
Description: aspnet_wp.exe (PID: 7440) stopped unexpectedly.

As always, helpful messages are best! So then I review my code as follows:


Dim uniSession As UniSession = Nothing

uniSession = UniObjects.OpenSession(UVServerIP, UVUserID, UVPassword, UVAccount, UVService)
Dim bill As ShippingAddress = Session("BillingAddress")

Dim uniFile As UniFile = uniSession.CreateUniFile("CM")
uniFile = uniSession.CreateUniFile("CM")
uniFile.Read(bill.ID)

Try
With uniFile
.WriteField(bill.ID, 2, bill.FirstName & "/" & bill.LastName)
.WriteField(bill.ID, 4, bill.Address1)
.WriteField(bill.ID, 3, bill.Address2)
.WriteField(bill.ID, 5, bill.City)
.WriteField(bill.ID, 6, bill.State)
.WriteField(bill.ID, 7, bill.ZipCode)
.WriteField(bill.ID, 18, bill.Phone)
End With

Catch ex As UniFileException
Response.Write(ex.Message)
End Try

uniFile.Close()

UniObjects.CloseSession(uniSession)


My initial guess is that its the UODOTNET.dll file I am using and not my code. If it were the code then the try...catch would catch the error and display the message. Instead ASPNET service just crashes, so its something to do with how that service is handling the dll, i'm guessing. After a lot of research into the Application log error, nothing being associated with this specific DLL, I've set the ASPNET account to be an admin, reinstall .Net 2.0 and a few other things.

Several hours later....

And my assumptions were right! My IBM rep confirmed the bug in the DLL, and thankfully gave me a workaround until the next release. And here is the life saving workaround, which actually appears to be easier than what I was doing any way

unifile.RecordID = bill.id
unifile.WriteField(2, bill.FirstName & "/" & bill.LastName)
unifile.WriteField(fieldNumber,String)
and so on.....

So, I'm starting to like UniObjects again ;)



Looking for a uniobjects developer? Look no further! Contact us at www.delphi-ts.com! As you can see, we've figured out the bugs so you don't have to!




RSSRSS Subscribe

About David Lozzi

I love what I do. I'm not the sketchy type that hides in his basement coding all day. I have a beautiful wife and two great children. I've spent my last 10 years plus in the technology arena. more...

Login