【问题标题】:asp.net and the performanceasp.net 和性能
【发布时间】:2011-04-22 12:32:18
【问题描述】:

问:

在我之前使用 asp.net 的工作中,我所想的只是:如何以任何方式完成所需的任务。我不关心性能 em>,但是现在我想,在我学到了很多关于如何在某种程度上处理这种语言之后,我应该专注于性能问题。

在学习概念和语法时,我的导师告诉我,性能问题并不那么重要,优先事项总是及时完成所需的任务。硬件和网络基础设施的巨大革命将节省您在代码中留下的性能差距!。

现在我想知道一些关于 asp.net 和一般网络中的性能问题的提示(做和不做)。如果有一些关于这个想法的例子,我将不胜感激。

例如:有人告诉我:

int count = dataTable.Rows.Count;
for(int i = 0 ; i<count ; i++)
{
   //Do some thing
} 

性能优于:

for(int i = 0 ; i<dataTable.Rows.Count ; i++)
{
   //Do some thing
} 

【问题讨论】:

  • 你的具体例子很糟糕。第二个选项确实有更好的性能,但不值得一提。
  • “性能问题并不那么重要......硬件和网络基础设施的巨大革命将节省你在代码中留下的性能差距”(facepalm)
  • 好,但还是没有人,告诉我一些具体的技巧

标签: .net asp.net database ajax performance


【解决方案1】:

简单:不要过早优化。在这种情况下,这还为时过早。 提升长度与每次查询长度之间存在细微差别,但在任何理智的情况下,a:我们说的是纳秒如果那样,b:它会改变要看是裸向量、列表、ilist等。不要学一般规律。

但这里更大的问题是:具体示例与整体性能完全无关;你说的是DataTableDataTable 大概是从数据库中填充的,该数据库是进程外的,并且可能在另一台机器上。您将纳秒(可能更少)与网络延迟(在本地 LAN 上通常为 0.3 毫秒)加上查询时间和带宽(取决于查询)进行比较。

您无法更改光速(延迟),但您可以编写一个有效的数据查询,该查询仅访问所需的数据,使用适当的索引和可能的非规范化。哦,还有 N+1 - 这是一个大问题。

同样,即使在内存中 - 大多数瓶颈往往是由于不适当的循环(当基于散列的查找会更好时),或者没有使用适当的缓存来消除不断一遍又一遍地查询数据的需要一遍又一遍。

关于“一般的网络”;缓存、压缩(传输和内容 - 例如 js/css 缩小)、静态内容的无 cookie 域(可能是 CDN)、服务器场、胖管道和适当的 CPU...

【讨论】:

  • 不太明白
  • @just_name 即在您知道性能问题出在哪里之前。花时间在这上面会给人一种温暖的、发光的感觉,就像做某事一样,但对表现没有帮助。相比之下,在我的工作中,我确切地知道(通过实时计时)我页面上的每个操作需要多长时间,精确到亚毫秒级。请参阅我的博客,了解我们如何在 stackoverflow 上执行此操作
【解决方案2】:

第一个版本的性能可能更高,因为您不会在循环的每次迭代中重新评估 dataTable.Rows.Count

如果对dataTable.Rows.Count 的每次调用都很昂贵(并且可能如此),那么第一个版本确实会更好。


关于性能的一般提示:

  • 始终决定性能对您意味着什么(延迟?吞吐量?其他?)
  • 始终弄清楚如何衡量它。
  • 弄清楚你的代码什么时候性能足够(你什么时候完成的)。
  • 分析您的代码以找出性能最差的点。
  • 修复这些问题并重新配置。

【讨论】:

  • 你真的认为这是对原始问题的回答吗?
  • 我是指请求页面时服务器的响应。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多