如何处理性能问题?

2 人关注

我们正在开发一个客户端-服务器桌面应用程序(winforms与sql server 2008,使用LINQ-SQL)。我们现在发现许多与性能有关的问题。这些问题涉及到用LINQ查询太多的数据,糟糕的数据库设计,没有太多的缓存等。你建议,我们应该做什么--如何去解决这些性能问题?我正在做的一件事是做sql profiling,并试图修复一些查询。就缓存而言,我们有静态列表。但是,如何保持它们的更新,我们没有任何服务器端的实现。

performance
linq-to-sql
sql-server-2008
jess
jess
发布于 2010-05-24
4 个回答
Flory
Flory
发布于 2010-05-24
0 人赞同

没有工具的性能分析是没有结果的,使用错误的工具是令人沮丧的。 SQL Profiler是一个错误的工具,不应该依赖你正在看的东西。 我认为它最多只能给你一个提示,告诉你哪里出了问题。

你需要使用代码分析器来确定为什么/什么时候执行这些查询。 你应该可以通过谷歌找到一个,并运行它的X天试用。

关键问题是。

  • 在根本没有理由的情况下,查询是否被多次运行? 数据是否已经在内存中(即使不是静态存储)。 这种情况经常发生,数据已经被检索到了,但由于代码上的一些操作,它又被加载了。 类的属性是这里的一个大罪魁祸首。

  • 某些数据应该在整个应用程序中静态存储吗? 这些数据的不稳定性如何? 你能负担得起显示陈旧的数据吗?

  • 决定#2的唯一方法是有硬数据来检查特定事务的成本。 例如,如果我知道创建一张新的发票需要1983毫秒,那么在我开始缓存数据之后会是多少。 缓存之后,这种节省是否显著。 但是,在你知道创建一张发票需要1983毫秒之前,承认你无法回答这个问题。

    当我对一个应用程序的交易进行剖析时,我把重点放在大的贡献者身上,并试图确定它为什么这么大。 我寻找速度慢的个别方法和频繁执行的任何代码。 往往是后者,即千刀万剐,才会让你明白。

    我还想补充一点,知道何时停止在性能问题上的工作也是非常重要的。

    Russ Clarke
    Russ Clarke
    发布于 2010-05-24
    0 人赞同

    我发现杰夫-阿特伍德在这方面的文章相当有趣。

    编撰或失败

    所有的抽象都是现场抽象

    hgulyan
    hgulyan
    发布于 2010-05-24
    0 人赞同

    为了更新,你可以创建一个表。我把它叫做 ListVersions

    只需存储列表ID、名称和版本

    当你对一个列表做一些改变时,只需增加其版本。在你的应用程序中,你只需要比较版本,只有当它发生变化时才更新。更新那些有版本递增的列表,而不是所有的。

    我在对这个问题的回答中已经描述了它

    当数据发生变化时,刷新组合框的首选方法是什么?

    Taneli Waltari
    Taneli Waltari
    发布于 2010-05-24
    0 人赞同

    性能问题的一般秘诀。

  • 测量(挂钟时间、CPU时间、内存消耗等)。
  • 设计并实现一个你认为可以比当前代码更快的算法。
  •