C# - What's The Most Important Effect On Performance In A Database - Backed Web Application
Feb 11, 2010
I was recently asked to speed up a C#/ASP.NET/SQL Server business app website. Since I just started, I don't know too much about the internals. So where do I start? Sight unseen, what is the single most important thing affecting performance on a system like this? Database tuning? Hardware? Individual page optimization? What is the first thing you'd look at? EDIT: After I actually do the work, I'll come back and post the answer. ;)
EDIT again: "Profile" is currently the most-voted answer, and I agree that that is clearly what one should do. But I was looking for guesses/experience as to what the profiling results would show, so I don't think that answer counts...
Is there any deficiency performance if import a lot of name space in Web.config or in every single cs file while it's not necessary to be in all classes ?
I already have ASP.NET hosting, but I'm not sure how to run my application off Neo4j, since it requires a Java stack.
It seems my only options are:
Get separate Java/Linux hosting, and install Neo4J there, utilizing it as a database server. Get Neo4J-as-a-service, (akin to what MongoHQ does for MongoDB users) but I haven't had any luck finding providers. Move my whole application to Mono and then put it all on Java/Linux hosting and install Neo4j.
I am not sure if this is the right forum. I can not find a forum for LINQ.
I am working on an application using LINQ. Application performance is not up to par and my tests show that it is LINQ queries that are slow. I was wondering if anybody can recommend where I can find an article about optimizing LINQ performance maybe by compilation or other methods.
I have a site in development with several web services (ASMX) that post important data to my database. When I navigate to the ASMX file in my browser, I can fill in the form with the parameters and post to the DB. If someone finds the URL to my WS, they can severely alter my database. I want to prevent people from being able to post to my WS publicly. So far, I've thought of two things that may but I'd like to know if there are any other ways:
Check to see if the HTTP Referrer to the WS method is the domain the WS is on Add an additional parameter called Key to all important WS methods and have this be an encrypted "password." Then encrypt my stored password on the WS side and compare if the keys match.
In one of the application i am developing on ASP.Net. In this application we have been using lots of AppSettings. In the initial development we used ConfigurationManager.AppSettings[""]. but as development progressed we created a utility class in which we would define a static property for each AppSettings. Then issues started to come. Now when application is deployed on testing server and we change any settings on AppSettings it does not have any effect unless we restart the IIS. here is the following code snippet i am using to create static property of AppSettings.
public static class AppSettingsUtil { public static string Log4Net { get { return ConfigurationManager.AppSettings["Log4Net"]; } } }
I could use in order to create a forum type effect wherein a user can append to the notes that he see's and then the next time he will view it the notes he appended would appear also, like a history?
Maybe it's been a long day but I'm having trouble persisting a collection backed by the ASP.NET ViewState in a CompositeControl. Here's a simplified version:
public class MyControl : CompositeControl { public Collection<MyObject> MyObjectCollection { get { return (Collection<MyObject>)ViewState["coll"] == null ? new Collection<MyObject>() : (Collection<MyObject>)ViewState["coll"]; } set { ViewState["coll"] = value; } } } public partial class TestPage : System.Web.UI.Page { protected void btn_Click(object sender, EventArgs e) { myControl1.MyObjectCollection.Add(new MyObject()); } }
When the button is clicked, the event hander btn_Click executes fine, but the setter for MyObjectCollection never gets called, hence the new MyObject() never gets persisted.
I have a strange situation on a production server. Connection for asp.net get queued but the CPU is only at 40%. Also the database runs fine at 30% CPU.
Some more history as requested in the comments:
In the peak hours the sites gets around 20,000 visitors an hour. The site is an asp.net webforms application with a lot of AJAX/POSTs The site uses a lot of User generated content We measure the performance of the site with a testpage which does hit the database and the webservices used by the site. This page get served within a second on normal load. Whe define the application as slow when the request takes more than 4 seconds. From the measurements we can see that the connectiontime is fast, but the processing time is large. We can't pinpoint the slowresponse the a single request, the site runs fine during normal hours but gets slow during peak hours We had a problem that the site was CPU bound (aka running at 100%), we fixed that We also had problems with exceptions maken the appdomain restart, we fixed that do During peak hours I take a look at the asp.net performance counters. We can see behaviour that we have 600 current connections with 500 queued connections. At peak times the CPU is around 40% (which makes me the think that it is not CPU bound) Physical memory is around 60% used At peak times the DatabaseServer CPU is around 30% (which makes me think it is not Database bound)
My conclusion is that something else is stopping the server from handling the requests faster. Possible suspects:
Deadlocks (!syncblk only gives one lock) Disk I/O (checked via sysinternals procesexplorer: 3.5 mB/s) Garbage collection (10~15% during peaks) Network I/O (connect time still low)
To find out what the proces is doing I created to minidumps.
I managed to create two MemoryDumps 20 seconds apart. This is the output of the first:
!threadpool CPU utilization 6% Worker Thread: Total: 95 Running: 72 Idle: 23 MaxLimit: 200 MinLimit: 100 Work Request in Queue: 1 Number of Timers: 64
and the output of the second:
!threadpool CPU utilization 9% Worker Thread: Total: 111 Running: 111 Idle: 0 MaxLimit: 200 MinLimit: 100 Work Request in Queue: 1589
Web forms .NET application, is starting to meet 64 bits Windows servers and we have a 32bit DLL from one of our component vendors (its a hardware key, actually). I checked the instructions here "compiling a .net application with either a 32-bit or 64-bit dll". It is also what our vendor sugested. question: is there a performance impact on compiling a web application to run on x86 mode ?Please don't flame me for using a hardware key
I have a ASP.NET web application (.NET 2008) using MS SQL server 2005, I want to increase the performance of the web site, If anyone have an article contains steps to do that, step by step , In SQL(Indexes, ..... etc.) and in the code.
There's a web app I've been assigned to, which is running very slow. It is a site that sells products so it is database driven, however even pages that do not query the database are loading very slow. The pages use master pages, and the code is in VB.NETI checked with fiddler and the time it takes to load basic (non database driven) pages are about 5.5 seconds on average.
What are some tools that can help me determine the cause of the slow speeds, and any recommendations as to how to speed it up, or potential issues that could cause it?UpdateSo I messed around with the code piece by piece as I wasn't getting anywhere with these tools. As soon as I remove master pages, and I include the same code that's on the master pages in the .aspx page itself, the speed improves drastically (approximately 5 times faster load times).What might cause the master pages to cause load times to slow down so much?
I am working on AJAX-ASP.NET site. This site is taking 25-30 sec to load the contents. I want to improve this site performance. Is there any settings required in IIS? How to check IIS log files?
I want to test asp.net application for stress, load and performance. Please guide me what free tools should be used for this ? Is there any tool which particularly can be used to analyse individual components, functions and scripts and resources they use ?
Looking to implement a solution on a web application but don't know if it is possible. If clicked the menu would take you to the full page with slide(Left to right / right to left). slide looks like iPhone Application.
I am a .Net Developer and I develop using C#. I am always but all business logic at separat Class Library project , and then use it with my project, But I want to know if it will improve the performance of application , or I can but the Business logic class within the main project without effect at the application performance?