我们正在开发一个客户端-服务器桌面应用程序(winforms与sql server 2008,使用LINQ-SQL)。我们现在发现许多与性能有关的问题。这些问题涉及到用LINQ查询太多的数据,糟糕的数据库设计,没有太多的缓存等。你建议,我们应该做什么--如何去解决这些性能问题?我正在做的一件事是做sql profiling,并试图修复一些查询。就缓存而言,我们有静态列表。但是,如何保持它们的更新,我们没有任何服务器端的实现。
4
个回答
hgulyan
发布于
2010-05-24
0
人赞同
为了更新,你可以创建一个表。我把它叫做 ListVersions 。
只需存储列表ID、名称和版本 。
当你对一个列表做一些改变时,只需增加其版本。在你的应用程序中,你只需要比较版本,只有当它发生变化时才更新。更新那些有版本递增的列表,而不是所有的。
我在对这个问题的回答中已经描述了它
没有工具的性能分析是没有结果的,使用错误的工具是令人沮丧的。 SQL Profiler是一个错误的工具,不应该依赖你正在看的东西。 我认为它最多只能给你一个提示,告诉你哪里出了问题。
你需要使用代码分析器来确定为什么/什么时候执行这些查询。 你应该可以通过谷歌找到一个,并运行它的X天试用。
关键问题是。
在根本没有理由的情况下,查询是否被多次运行? 数据是否已经在内存中(即使不是静态存储)。 这种情况经常发生,数据已经被检索到了,但由于代码上的一些操作,它又被加载了。 类的属性是这里的一个大罪魁祸首。
某些数据应该在整个应用程序中静态存储吗? 这些数据的不稳定性如何? 你能负担得起显示陈旧的数据吗?
决定#2的唯一方法是有硬数据来检查特定事务的成本。 例如,如果我知道创建一张新的发票需要1983毫秒,那么在我开始缓存数据之后会是多少。 缓存之后,这种节省是否显著。 但是,在你知道创建一张发票需要1983毫秒之前,承认你无法回答这个问题。
当我对一个应用程序的交易进行剖析时,我把重点放在大的贡献者身上,并试图确定它为什么这么大。 我寻找速度慢的个别方法和频繁执行的任何代码。 往往是后者,即千刀万剐,才会让你明白。
我还想补充一点,知道何时停止在性能问题上的工作也是非常重要的。