2011-09-30 66 views
0

我一直在试图让一个基本-64字符数组和无效字符在基地-64串旧无效长度的底部。视图状态无效长度错误

这是一个大的ViewState,因为我存储数据的很大一部分在那里,我不希望从数据库中请求每三秒钟的用户。因为它是如此之大(4兆在某些情况下),我使用gzip,和压倒一切的LoadPageStateFromPersistenceMedium()和SavePageStateToPersistenceMedium(BYVAL pageViewState作为对象),并创建自定义的视图状态。

问题是,每一个现在,然后上述错误正在发生。我试图去的这条底线,并在会议呼吁SavePageStateToPersistenceMedium时使存储初始视图状态的长度,并将其与的LoadPageStateFromPersistenceMedium新的视图状态的长度进行比较。我注意到Viewstate的长度已经被严重削减,我想知道是什么原因造成的。

出现的第二个字符串中我也注意到+字符(我正在采取各的最右边10,以查看是否最初被添加任何东西)。对于一个用户来说,这肯定会发生得比其他用户多得多,这或者表明他处理的数据或者他与系统的物理连接(速度,软件,浏览器等)的问题。

有没有人有任何想法?我们也有一些服务于用户的刀片服务器,所以我想知道它是否可以作为用户从一个服务器推向另一个服务器,但我需要检查这一点。

我也听说过,这可能是与渲染的事,但我想在视图状态加载之前渲染?

+0

你确定这个数据你存储,必须有可在页面呈现?从你的描述中,如果你设置并从代码中获取这些数据,并且不需要渲染控件的页面布局,我想Cache也可以。 ViewState应该很小,只与页面有关。如果每个用户或缓存(如果是每个应用程序),则会将更大的一部分数据存储在Session中。 –

+0

@DavidePiras我在想着完全一样的东西。我认为使用缓存将更快,更清洁。它有避免ViewState问题的巨大副作用。 – JefClaes

+0

是的,但请记住,缓存在应用程序范围内,如果您存储的这些数据对于每个连接的用户都不相同,请使用Session。 –

回答

1

正如我在评论上述建议你应该分析,理解和判断,如果数据的量确实需要在每个页面加载要来回发送;如果它属于该页面,并且被某些用户控件使用,或者仅在某些手工缓存机制的后面的代码中使用它。

我不重复,你可以找到所有在线的替代品的ViewState只在该网页,每个请求相关,会议为每个用户缓存和缓存为每个应用程序的缓存中的数据量小。

阅读这篇文章,了解详情:How to Choose From Viewstate, Session, Application, Cache, and Cookies

+0

缓存和会话仍然存在需要存储的问题。我宁愿看看我是否能够首先处理例外问题的底部,就像我说的那样,页面除了这一点之外表现还是非常好,而且还没有过去。另外,如果我要使用会话,我仍然需要进行压缩,因为数据集的正常大小是4MB。 – user676767

+3

@ user676767:你在这里错了,这很痛苦。没有人,我的意思是没有人会支持在ViewState中存储5MB数据集的想法。这只是简单的坚果。 –

+0

>缓存和会话仍然存在不得不存储的问题<在会话状态下存储少量4Mb的微小开销与通过网络发送5Mb的开销相比微乎其微。尽管您的应用程序似乎在嗡嗡作响,CPU利用率为0%,这是因为您的客户端受I/O限制,正在等待页面加载! –

0

首先,你不应该存储在ViewState中大量的数据。那不是ViewState的是专为,它会杀死页面的性能。

您应尽量限制命中数据库的数量,而不是在一切的代价。您在Web服务器上施加了巨大的压力,迫使其发布并为每个请求提供5MB页面。

如果数据是特定于用户,然后将其存储在会话中。如果数据不是用户特定的,那么它可能非常适合缓存。无论如何,不​​要把它放在ViewState中。将数据移至Session应该可以解决问题。

+0

我已经在上面留下了另一条评论。在回发之前,我正在压缩视图状态。它会减少到几百KB的每个请求。如果我使用Session变量,那么我认为这些变量存储在服务器上?那么请求这与压缩和解压有关的成本是多少? – user676767

+0

你似乎仍然错过了这一点。即使在压缩之后,一个5MB的数据集可能会是3MB,这是乐观的。你的ViewState不应该超过100KB,即使这是推动它。默认的InProc会话存储在服务器的内存中,更适合存储这样的大对象。如果您可以将其存储在缓存中,这将是理想的,但由于数据是用户特定的,因此会话是存储它的最佳位置。 –

+0

压缩率实际上是10X,已检查。然而,截断可能发生在45kb,但是又是不正常的(1500次回传中有1次)。我问上述问题的原因是,我们的6个刀片服务器和一个sqlserver相当紧张。这不仅仅是“适当”的情况,而是确保一切运行良好的一个例子。有很多并发用户,所以如果我要考虑更改会话,我需要知道两种实现的替代成本。如果它意味着99%的速度更好,我可以处理一个不稳定的异常。 – user676767

相关问题