MVC: First Access After Some Minutes Slow, Then Every Following Request Is Fast?
Jul 30, 2010
when I access any page of my ASP.NET MVC website first time, then this first request is slow. It needs about 4-5 seconds to load. But every following request to any page is fast.When I wait some minutes or a hour then every first request is slow again. Every following request is fast.
I think that IIS 7 is compiling the code and keep it in memory. After some time it will delete it from memory so it needs to compile it again.What can I do that every first request is as fast as every following request?
(Without precompiling my source, if possible)
I have made an asp.net web application using VS 2008 to show crystal reports. I have used CrystalReportViewer control to show reports.
The table (sql server 2005 ) from which I have to fetch data has approximately 400000 records. I connect to it using OLEDB ( Microsoft OLEDB provider for sql server )
I know it's not the best practice to do, but unfortunately I created a page with multiple large dropdown lists and have them inside an ajax updatepanel. I found some work arounds using siderite's ajax updatepanel adapter: http://fastlistadapter.codeplex.com/.
The performance is very good while I am debugging on my machine, but when I publish the site and post it to a win 2003 server the performance drops off almost as bad as when the fix isn't there.
I understand that using a 3rd party fix really isn't supported by most, but is there any obvious reason why debug performance would be much better than published site performance on the same exact code?
We recently migrated to v4 of .net. We are running iis 7 in integrated mode. When the site first starts its slow. I get that - it compiles for the first time. The odd thing is then we will go to certain pages and it seems to compile again. The next time i go that page its very fast. Nothing exceptional with the second page - but once that is hit the rest of the site is fast.
Let's say you set maxRequestLength to the max number (2097151) (units are KB) and use the following code for your OnClick event for your submit button:
int int fileSize = FileUpload1.PostedFile.ContentLength;
if (fileSize < 2000000)//units are bytes Label1.Text="too big"; else { FileUpload1.SaveAs(saveItHerePath); Label1.Text = "Upload success."; }
Why when a huge file is attempted does it take a minute to get to the OnClick event on the server? Because if maxRequestLength were set to that value 2000, it would immediately choke if you tried to upload a 500MB file. What is going on here? What are the best practices for using the FileUpload control? Is there a better alternative way of uploading or checking for file size?
Using VisualWebDeveloper 2010 on the development machine. All nice and fast.Using VisualWebDeveloper 2008 on the server. Server runs on Windows Server 2008 and has IIS 7.
It looks like that when 'table', a datatabe filled up in C# code behind, is getting longer, then the server (whether running the website on IIS or on the local host of VIsualWebDeveloper2008) is really slowing down. Checked it in debug mode and traced it down to
Adapter.Update(table);
Are there any know issues? Could it be that there is incompatibility between different version of SQL server or something like that? The update works, it is just awefully slow, but only on the server.
I have two applications(A,B) both are developed in .NET3.5 and used LDAP services.Application-A in one screen we are fetching users with role "project Leads" and it is taking 10 min time
Application-B in login screen we are checking user is authenticated or not and it is taking 20 sec
Both the applications are using the same service then way there is a time span problem. Please suggest me what can I do to improve performance of application A?
I have a web page that performs searching, on very large database about millions and millions of records. The request for this has been sent from an update panel. We know that for this request, the server needs around 1hr to do such a search. And our client even accepts that the server might take such a long time. Till the request is of less than 30 minutes, our search result grid is updated on browser. But if the request is of more than 30mins the update progress keeps on rotating. There is no server timeout of either session, database, iis or the asynchronous post back, that we have defined in script manager.
I have verified my whole web.config and also the machine.config file for any default setting of 30 but haven't got any. Update progress bar keeps rotating for request more than 30 minutes.
I have a very peculiar problem that I've been wrapping my head around and I just can't figure it out. I have an updatepanel. Inside that I have a TabContainer. And inside that I have three TabPanels, each of which has checkboxes. Sometimes (and it happens often enough that I can easily reproduce it, but strangely may not happen with the same exact steps), when I click on different tabs or click on checkboxes inside the tabpanels (basically when I do an AJAX async postback), the request takes about a few minutes, after which the request just stops. Looking at the Firefox error console, I see this popping up after a few minutes...
Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 0 Now, the asyncpostbacktimeout property for the ToolkitScriptManager is set at 360000, which is 6000 minutes, so the problem has nothing to do with that setting. In IE, I never have this problem and the AJAX requests are instantaneous and smooth, no delays. So this isn't a network or database lag issue. Something to do with how AJAX is run in Firefox. Why is it that sometimes, an AJAX request in Firefox takes a few minutes and just stops processing the request? And once again, the steps to reproduce this problem may not be the same every time, it seems random - very strange. Google searches have yielded very little help on this. I've tried things like extending the timeout property (which again has nothing to do with this), setting Response.Cache.SetNoStore() everywhere. Is there a crude workaround I can do (at this point, I'm willing to settle for a workaround). I just don't know anymore.
My basic structure is that I have a table on a page, which I want to reload without refreshing the entire page. So on clicking a button on the page it fires of this:
function RefreshMissionsAjax() { //fade out the old table. $(clientID('MissionsDisplay')).fadeOut(500); //request the new value from the page (calls the GetIncompleteMissions() method in the MissionViewer.aspx.cs page) $.ajax({ type: "POST", url: "MissionViewer.aspx/GetIncompleteMissions", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { $(clientID('MissionsDisplay')).html(msg.d); $(clientID('MissionsDisplay')).fadeIn(500); }, error: function (xhr, ajaxOptions, thrownError) { $(clientID('MissionsDisplay')).html('An error occured while trying to refresh the page data.'); $(clientID('MissionsDisplay')).fadeIn(500); } }); } And I have in the code bedind of an aspx page: [WebMethod] public static string GetIncompleteMissions() { return GetHTMLTable(); }
This method just grabs some data, and creates a html table - nothing too fancy. When the returned table is small (a dozen rows or less) then it works like a charm. But when it gets larger, it takes a long long time. At 100 rows it can take 5 minutes to render the table. At 1000 rows I have left it for 30 minutes and nothing will happen after the fadeout. (NB - it loads fairly quickly on the pageload, before the ajax refresh is used, so it is not the actual server side creation of the table thats the problem).
This is my first real attempt at doing something like this, so I dont know if this is the best way to do it - it was just something i pieced together that worked great when i was testing with small datasets. Now, not so much.
I am currently using the brinkster hosting (Pro Package) but recently they change my hosting to the new one and after that I got an error for sometimes and my session also expired very fast. Below is the feedback from Brinkster.
Thank you for letting us know about your recent experience with your application. From what we are able to find regarding your application problems, they appear to be related to your ms access database. Due to limitations of ms access, you may want to consider updating the database running your website to mysql. A Mysql database is available to your account at no additional charge.
MS access begins to experience issues like database locks (which is what appears to be happening to your application) when there are more than 3 or 4 concurrent connections to the database for reads. MS access is also only able to have one write connection open at any given moment. MS access databases are more susceptible to corruption and data loss than database application built for large application use and Enterprise or corporate use.
When you were hosted on the previous server, your IIS application pool was getting reset many times per day. This action was in effect unlocking your ms access database from its locked state. After we moved you to the new system and raised your memory utilization limit, your application does not receive resets more than one or two times a week. I have lowered your memory utilization from 200 to 100 in an effort to have your application reset more often, unlocking your database if it has began to cause issues.
My question is, do i have a choice to avoid change my database from MS Access to MySQL? Is MS Access database really have such problem as they mension or somethingelse happen on their server?
for the past couple of days i am facing an issue where the first call from my ASP.NET 4 application (VS 2010 Web Site) hosted in IIS 7 to an XML web service is dead-slow. subsequent calls are fast until the AppDomain is restarted.
I have tried all solutions related to pre-generating the serializer assembly but nothing worked. Anyway THEN I was sure it is an IIS-only issue because if i consume the xml web service from a console .net application then all the calls are fast. its even fast from an ASP.NET web site NOT hosted in IIS instead running on the development server. SO clearly the problem is there only when my app is hosted in IIS.
I have a web application that authenticates against AD. On the first login attemt it takes roughly 30 seconds to login. On subsequent requests the login occurs almost immediatly. I've searched all over google and this forums and noticed several people with the problem and everyone seems to have a different solution of which none work for me.
I want to redirect the user after 2 mins if there is inactivity for 2 mins. I am not using ASP.NEt membership. And I dont want to use Sessiontimeout for this. Session timeout will logout the user even if he is working on the system. My objective is like screensaver process.
If there is no action for the specified time, the screensaver runs. Similarly, I want to redirect the user to login page.
note that i have already handled it with the following javascript:
[Code]....
Here what my problem is,
the user is working on the site...ok.. he want to see someother site.he browse someother site and works on....or even he can do some other work in his system...but he is active in his system... What this script does is, it automatically logout the user and redirect him to login page. But it should not do while he is active...IT SHOULD REDIRECT IF HE IS NOT ACTIVE REALLY (Similar to Screensaver process)
im using an access database with less than 50.000 records on a single table, no relations.
ive put the following code inside a two for cycles as per the respective variables (i, j) the connection is opened outside the outer cycle and closed after it, im holding the connection open to save up on open/close time and im using OleDB thinking it would be faster than ODBC. The ds fill operation takes nearly 3 seconds in debug mode, the total process will require almost 4 hours. How is it possible to speed it up?
I'm using the datareader on an access database, and its very slow. The query runs in access in about 1/2 second, when run with a datareader it takes 25 seconds. Code below
I hope this makes sense. I want to pull the largest record from an Access dB if no parameter is passed in a QueryString.
Under normal situations, my query might look like this; http://www.XYZ.com/videos.aspx?id=1
What I would like to do is have the page "http://www.XYZ.com/videos.aspx" load the MAX ID record by default. I tried this, but it won't even load the page portion that is suppose to contain the data and returned no errors;
<asp:AccessDataSource id="AccessDataSource2" runat="server" DataFile="_database/92592_Web.mdb" SelectCommand="SELECT *, (SELECT MAX(ID) FROM myMovies) as Max_IDFROM [myMovies] WHERE ([ID] = ?)" CancelSelectOnNullParameter="False"> <SelectParameters> [code]...
A class in my ASP.NET website needs to access a database table multiple times for every request. The database table should rarely change, if ever. Maybe a couple times a month.
In the static constructor of the class, the table is fetched from the DB and cached in a static local variable. Whenever the class needs to access the table, then, it just uses the cached, static version.
My question concerns the lifespan of this cached, static version of the table.
I understand that it's fetched the first time the class is instantiated or a static method in the class is used. But how often does this occur on the web server? What if the table changes and we want to reset this static version of the table?
Basically, I'm wondering, is this table fetched once and then only refetched each time I restart IIS? What, with regard to the site and IIS, will trigger this static class to reset, causing the static table to be refetched?
Suppose I have a treeview, where each treenode contains an id for a different set of user controls. When the user clicks a node, these controls should be loaded to the page. As I understand the ASP page life cycle, dynamic controls should be added in the initialization stage, and postback events will fire later on.
So if the treeview click event happens after I need to add my controls, how do I dynamically add controls based on user postback events?
Edit: I tried the ArronLS:
What I did was add the node value to the session array, and use that when I do the init to choose which form elements to load to the controls of a placeholder control. On the treeview click event, I update the node in the session array, clear the old form elements in the placeholder, and add the new form elements to the controls. When the page is loaded again, it should now find the node at init time, so viewstate problems would be circumvented.
Now I haven't fully tested this yet, but there was another similar post that talks about the problems that might result with the viewstate. They suggest a solution that polls the Request[] part of the context (in their case the dropbox) within the Init control, manually handling some of the postback functionality.
My new question is how to I access the selected node in the treeview using the Request array?
I have a ASP.NET website that is using an access database. In the website on the pages where the data is fetched from the database sometimes it gives the below error. When I delete the .ldb file the website starts working.
Server Error in '/' Application. Unspecified error Description:
An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
I have built a webform as part of my project that grabs all the data out of a particular table in an Access database on the server. I have allowed the ability to update said table via the DetailsView form however when you change the details and then click on "update" it throws back an error.
No value given for one or more required parameters. Description:
An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.OleDb.OleDbException: No value given for one or more required parameters.
Source Error:
[Code]....
Stack Trace:
[Code]....
I am not sure what has happened but it simply will not allow me to update any data. Here is a copy of the select, update and delete statement.
DeleteCommand="DELETE FROM [tbl_mmstafflist] WHERE [EngID] = ? AND (([EngCode] = ?) OR ([EngCode] IS NULL AND ? IS NULL)) AND (([EngName] = ?) OR ([EngName] IS NULL AND ? IS NULL)) AND (([EmailAddress] = ?) OR ([EmailAddress] IS NULL AND ? IS NULL)) AND (([Ext No] = ?) OR ([Ext No] IS NULL AND ? IS NULL)) AND (([Mobile No] = ?) OR ([Mobile No] IS NULL AND ? IS NULL)) AND (([Home No] = ?) OR ([Home No] IS NULL AND ? IS NULL)) AND (([Address 1] = ?) OR ([Address 1] IS NULL AND ? IS NULL)) AND (([Address 2] = ?) OR ([Address 2] IS NULL AND ? IS NULL)) AND (([Address 3] = ?) OR ([Address 3] IS NULL AND ? IS NULL)) AND (([Town] = ?) OR ([Town] IS NULL AND ? IS NULL)) AND (([County] = ?) OR ([County] IS NULL AND ? IS NULL)) AND (([Postcode] = ?) OR ([Postcode] IS NULL AND ? IS NULL)) AND (([Other email address] = ?) OR ([Other email address] IS NULL AND ? IS NULL)) AND [Visa card] = ? AND [Ex staff] = ? AND (([ExternalDirectDialNumber] = ?) OR ([ExternalDirectDialNumber] IS NULL AND ? IS NULL)) AND (([PayrollNumber] = ?) OR ([PayrollNumber] IS NULL AND ? IS NULL)) AND [NeedstoSeekApproval] = ? AND [IsStockController] = ? AND (([Group] = ?) OR ([Group] IS NULL AND ? IS NULL)) AND (([ContractedWeeklyHours] = ?) OR ([ContractedWeeklyHours] IS NULL AND ? IS NULL)) AND (([Grade] = ?) OR ([Grade] IS NULL AND ? IS NULL)) AND (([IP] = ?) OR ([IP] IS NULL AND ? IS NULL)) AND (([StaffTitle] = ?) OR ([StaffTitle] IS NULL AND ? IS NULL))"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [tbl_mmstafflist] where ([EngID] = @EngID)" UpdateCommand ="UPDATE [tbl_mmstafflist] SET [EngCode] = ?, [EngName] = ?, [EmailAddress] = ?, [Ext No] = ?, [Mobile No] = ?, [Home No] = ?, [Address 1] = ?, [Address 2] = ?, [Address 3] = ?, [Town] = ?, [County] = ?, [Postcode] = ?, [Other email address] = ?, [Visa card] = ?, [Ex staff] = ?, [ExternalDirectDialNumber] = ?, [PayrollNumber] = ?, [NeedstoSeekApproval] = ?, [IsStockController] = ?, [Group] = ?, [ContractedWeeklyHours] = ?, [Grade] = ?, [IP] = ?, [StaffTitle] = ? WHERE [EngID] = ? AND (([EngCode] = ?) OR ([EngCode] IS NULL AND ? IS NULL)) AND (([EngName] = ?) OR ([EngName] IS NULL AND ? IS NULL)) AND (([EmailAddress] = ?) OR ([EmailAddress] IS NULL AND ? IS NULL)) AND (([Ext No] = ?) OR ([Ext No] IS NULL AND ? IS NULL)) AND (([Mobile No] = ?) OR ([Mobile No] IS NULL AND ? IS NULL)) AND (([Home No] = ?) OR ([Home No] IS NULL AND ? IS NULL)) AND (([Address 1] = ?) OR ([Address 1] IS NULL AND ? IS NULL)) AND (([Address 2] = ?) OR ([Address 2] IS NULL AND ? IS NULL)) AND (([Address 3] = ?) OR ([Address 3] IS NULL AND ? IS NULL)) AND (([Town] = ?) OR ([Town] IS NULL AND ? IS NULL)) AND (([County] = ?) OR ([County] IS NULL AND ? IS NULL)) AND (([Postcode] = ?) OR ([Postcode] IS NULL AND ? IS NULL)) AND (([Other email address] = ?) OR ([Other email address] IS NULL AND ? IS NULL)) AND [Visa card] = ? AND [Ex staff] = ? AND (([ExternalDirectDialNumber] = ?) OR ([ExternalDirectDialNumber] IS NULL AND ? IS NULL)) AND (([PayrollNumber] = ?) OR ([PayrollNumber] IS NULL AND ? IS NULL)) AND [NeedstoSeekApproval] = ? AND [IsStockController] = ? AND (([Group] = ?) OR ([Group] IS NULL AND ? IS NULL)) AND (([ContractedWeeklyHours] = ?) OR ([ContractedWeeklyHours] IS NULL AND ? IS NULL)) AND (([Grade] = ?) OR ([Grade] IS NULL AND ? IS NULL)) AND (([IP] = ?) OR ([IP] IS NULL AND ? IS NULL)) AND (([StaffTitle] = ?) OR ([StaffTitle] IS NULL AND ? IS NULL))">
The SelectParameter is used because this page is a details page that is selected from a list. I would appreciate any help that you can offer. Unfortunately Access errors are not forth coming with information.
HttpResponse.End() seems to throw an exception according to msdn.Right now i have the choice of returning a value to say end thread(it only goes 2 functions deep) or i can call end().
I know that throwing exceptions is significantly slower (read the comment for a C#/.NET test) so if i want a fast webapp should i consider not calling it when it is trivially easy to not call it?
-edit- I do have a function call in certain functions and in the constructor in classes to ensure the user is logged in.So i call HttpResponse.End() in enough places although hopefully in regular site usage it doesn't occur too often.