Tuesday, March 29, 2005

MCMS Manager 1.2

I've updated MCMS Manager with new Features. Check it out.

Features (Two tools and Statistics Generator),

1. Convertor - Converts IIS log to IIS-MCMS log.
2. Statistics can be generated for each and every channel with created IIS-MCMS log files (1). Also it can be saved.
3. LogViewer - Saved statistics (2) can be viewed using this tool.

Feedback is appreciated.

Sunday, March 20, 2005

MCMS Manager 1.1

Again, I've added some more features to MCMS Manager. Added Features,

1. Search for postings using

  • Guid of the posting
  • Name of the posting
  • Posting placeholder content
  • Posting state
  • Created date
  • Author of the posting

As in Text Searching in Bugzilla, search type can be specified before searching.

2. Find and Replace while editting the posting.

I'm sure that these features will increase the use of MCMS Manager.

Monday, March 14, 2005

MCMS Manager 1.0

I've worked on the previous release of MCMS Manager and added some new features to that. It can be downloaded from CodeProject as well as from Sourceforge. Now it includes
  1. Posting Editor
  2. Custom Property Editor
  3. And UI related features.

Please check it and give me your feedbacks.

Thursday, March 10, 2005

Test for Creating scalable applications using the CmsApplicationContext

Stefan Goßner have done a test for 'Creating scalable applications using the CmsApplicationContext' in a server which has a very big MCMS database. The result as follows...

Node cache = 40000 nodes

i) Recursion, no dispose, no GC
1. 180 sec 451 MB
2. 143 sec 498 MB
3. 146 sec 468 MB
4. 146 sec 485 MB
5. 148 sec 495 MB

ii) no recursion, no dispose, no GC
1. 116 sec 460 MB
2. 140 sec 477 MB
3. 142 sec 509 MB
4. 146 sec 492 MB
5. 145 sec 511 MB

iii) no recursion, dispose, no GC
1. 653 sec 71 MB
2. 672 sec 91 MB
3. 683 sec 126 MB
4. 683 sec 133 MB
5. 692 sec 161 MB

iv) no recursion, dispose, GC
1. 739 sec 64 MB
2. 909 sec 78 MB
3. 1053 sec 100 MB
4. 1026 sec 116 MB

So as I stated in my previous post, if we are only looking for a better memory solution than anything else, as Stefan said test (iv) is ok. But still I think the better solution is (iii) one. It has good balance between everything. Thanks alot for testing it Stefan.

Tuesday, March 08, 2005

Creating scalable applications using the CmsApplicationContext By Stefan Goßner

Stefan Goßner has written a great article on Creating scalable applications using the CmsApplicationContext. I thought of doing a small testing on that (I was not very much happy of System.GC.Collect(); which I found in his code). So I've created three windows applications :

1. Same one which is given by Stefan with GC
2. Without GC
3. Another Application which uses the same CmsApplicationContext throughout its process and Dispose is called when it finishes its work (Without GC call).

I did the testing on four different machines which has different MCMS servers. I did two things.. Checked the memory usage as well as time taken(even though it is not important in Stefan's context) to run the application. The results are given bellow.

Results

Application-------Runs*--------Memory(kb)--------Time(s)
1--------------------1--------------12248----------------3.90
1--------------------2--------------588------------------1.34
1--------------------3--------------552------------------1.42
1--------------------4--------------504------------------1.52
2--------------------1--------------12668----------------3.50
2--------------------2--------------692------------------0.59
2--------------------3--------------596------------------0.58
2--------------------4--------------612------------------0.58
3--------------------1--------------12920----------------2.63
3--------------------2--------------644------------------1.47
3--------------------3--------------264------------------1.41
3--------------------4--------------284------------------1.44

* - Ran the same application without restarting (But the CMSA.Context was disposed at least after each and every run).

From this I felt that, better if we don't use GC. If the application is going for a long run and as Stefan said if we only care about memory then the good choice may be the first one. But if we think about the memory and time then the best choice seems to be the 2nd one.

Another important think I noticed is that in the 3rd application, it took less time on the first run and also after one or two runs it took very less memory than any other which I couldn't understand the reason!

N.B:
3rd Application Code :

static private void CollectChannel(CmsApplicationContext cmsContext)
{
while (StackItemsChannel.Count > 0)
{
string channelGuid = (string)StackItemsChannel.Pop();
Channel channel = cmsContext.Searches.GetByGuid(channelGuid) as Channel;
foreach (Posting po in channel.Postings)
{
//do something with posting
}
foreach (Channel ch in channel.Channels)
{
StackItemsChannel.Push(ch.Guid);
}
}
}

private static Stack StackItemsChannel = new Stack();

[STAThread]
static void Main(string[] args)
{
CmsApplicationContext cmsContext = new CmsApplicationContext();
cmsContext.AuthenticateAsCurrentUser(PublishingMode.Unpublished);
string channelGuid = cmsContext.RootChannel.Guid;
StackItemsChannel.Push(channelGuid);
CollectChannel(cmsContext);
cmsContext.Dispose();
}

Monday, March 07, 2005

MCMS Manager

This is my first blog... I thought of starting blog hobby few months before, but b'cos of my work-busy time I had, I couldn't find time to do so...

I'm working with MCMS for some time now (more than 10 months I think) and I really felt that Site Manager ( Which comes with MCMS) lacks in few places. So thought of writing a small tool which can be used with site manager to get the features which site manager doesn't provide. If any of you have time, check it and give me your feedback so that I can improve my tool.