把方法声明为satatic,对程序性能会有影响???

问题描述

今天听别人说的,但我觉得不会呀,因为像petshop,communityserver这些著名的代码都声明了不少static方法,但是我又不确定,请高手给出答案和分析,谢谢

解决方案

解决方案二:
如果不放心,可以自己测试一下。不过真的要考虑静态方法和成员方法的效率差异的程序一定是神写的。
解决方案三:
该回复于2007-12-04 11:20:11被版主删除
解决方案四:
方法调用频繁的话,采用Static性能可能会更加好些.
解决方案五:
采用Static是相对于频繁调用而建立的静态机制,此机制在程序运行开始到结束始终存在于内存当中,若不使用Static则每次需要调用类的时候则需要new一次,但new一次的性能相对于内存较低的用户来说是可行的,则对于程序而言没用任何影响,只是方便程序员进行编码工作。
解决方案六:
跟你说这话的人是蔡鸟,static会降低程序灵活性,多用singleton,interfaceandabstractclass
解决方案七:
恩,顶楼上
解决方案八:
到底会不会影响速度,影响大不?
解决方案九:
中小项目采用静态方法还是不错的。
解决方案十:
我还是很迷糊
解决方案十一:
多用Singleton=================一看就是业余选手。设计模式不是拿来到处撒的。不要为了使用模式而使用模式。采用static可以减少一些函数呼叫的开销,但是多数情况下不是十分要命的一件事情。使用ReSharper之类的IDE插件的话,会自动提示那些方法可以设为static,十分方便。
解决方案十二:
没什么大影响,楼主放心。
解决方案十三:
多用Singleton是相对于使用静态的object来说的,Singleton是离不开static的.lextm知道你是专业选手.
解决方案十四:
测试代码privatestaticvoidStaticProc(){for(inti=0;i<10000;i++);}privatevoidUnstaticProc(){for(inti=0;i<10000;i++);}privatevoidbutton1_Click(objectsender,EventArgse){longvTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);}

测试采样[code=BatchFile]非静态方法耗时:1638812毫秒静态方法耗时:1638890毫秒非静态方法耗时:1638906毫秒静态方法耗时:1638937毫秒非静态方法耗时:1638953毫秒静态方法耗时:1638984毫秒非静态方法耗时:1639000毫秒静态方法耗时:1639031毫秒--------------非静态方法耗时:1778078毫秒静态方法耗时:1778093毫秒非静态方法耗时:1778125毫秒静态方法耗时:1778140毫秒非静态方法耗时:1778156毫秒静态方法耗时:1778187毫秒非静态方法耗时:1778203毫秒静态方法耗时:1778234毫秒[/code]分析[code=BatchFile]估计是内存垃圾原来越多,导致越来越慢可以看到有一组数据只相差6毫秒>静态方法耗时:1638890毫秒>非静态方法耗时:1638906毫秒就是说调用1000次相差6毫秒(这个时间还会受其他因素影响,比如:其他线程正消耗CPU)结论是静态方法和非静态方法的调用时间差小于千分之1毫秒(排除机器的差别,最后也不能确定谁快谁慢)总之对程序的效率影响完全可以忽略[/code]最后:楼主要搞清楚静态方法和非静态方法的区别--静态方法是通过类本身调用,而非静态方法必须通过类实例来调用。可以在非静态元素中访问静态元素但不能在静态元素中访问非静态元素
解决方案十五:
多用Singleton=============whenuseSingleton,ualsoneedstaticmethodorfield...whenuknow'static'meanwhatthenuwillknowwhenushoulduse'static'

时间: 2024-08-01 08:07:06

把方法声明为satatic,对程序性能会有影响???的相关文章

实现ASP.NET程序性能目标的几种方法

asp.net|程序|性能 第一次在这里写BLOG,希望不要被大家取笑!   一. 调整程序代码   1.避免多次读取相同数据   在循环语句中不要包含无端重复执行的代码,如:   while ( dr.read())   {   if(dr.item["lastname"]==Request.params["lastname"])   return true;   else   return false;   }   在上面循环中,对于DataReader返回的每

充分发挥Node.js程序性能的一些方法介绍

  这篇文章主要介绍了充分发挥Node.js程序性能的一些方法介绍,Node.js是把JavaScript用于服务器端的框架,需要的朋友可以参考下 一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意. 因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一个可以并行的Node.JS运用.在这篇博文里,我们就来比较下这些可能的架构. 这篇文章同时也介绍compute-cluster 模块:一个小型的Node

优化iOS程序性能的二十五个方法

1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你管理retain和release的过程,所以你就不必去手动干预了.忘掉代码段结尾的release简直像记得吃饭一样简单.而ARC会自动在底层为你做这些工作.除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存. 现在所有的iOS程序都用ARC了,这条可以忽略. 2. 在

延迟反序列化:一种提升MapReduce程序性能的方法

延迟反序列化:一种提升MapReduce程序性能的方法 黄佳 基于Hadoop提供的MapReduce并行计算框架,用户可以方便地实现并行计算.通常,用户在MapReduce程序中将输入数据解析成为由特定分隔符分隔的字符串,反序列化和序列化的代价过大,同时,计算过程中数据类型的转换也会产生额外的开销.本文通过将一种延迟反序列化技术整合到MapReduce程序中,实现了MapReduce程序计算性能较为明显的提升.该技术的核心在于只在必要的时候才将记录中特定的字段反序列化为相应的Java对象. 延

《多核与GPU编程:工具、方法及实践》----1.5 并行程序性能的预测与测量

1.5 并行程序性能的预测与测量 构建并行程序要比串行程序更具挑战性.并行程序程序员需要解决诸如共享资源访问.负载均衡(即,将计算负载分配到所有计算资源上来最小化执行时间)以及程序终止(即,以协调方式暂停程序)等相关问题. 编写并行程序应该首先确定并行能否提升程序性能,加速问题的解决.并行程序的开发成本决定了程序员不可能简单地实现多个并行版本,通过测试找出最佳和最差版本,来评估项目的可行性.虽然对于最简单的问题,这个方法可能是可行的.但是即使能够这样,如果能够确定一个先验的最佳开发路径,并按照这

一起谈.NET技术,提高ASP.NET应用程序性能的十大方法

一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,

提高ASP.NET应用程序性能的十大方法

一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量. 如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句.是否把业务逻辑写到存储过程中,这个有点争议.但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,

缓冲技术提高JSP程序性能和稳定性

js|程序|性能 一.概述 在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来:有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息.所有这一切都属于复杂信息的例子.在Web页面中加入过多的复杂信息可能导致Web服务器.数据库服务器负荷过重.JSP代码块缓冲为开发者带来了随意地增加各种复杂信息的自由. JSP能够在标记库内封装和运行复杂的Java代码,它使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便.现在已经有许多标记库,它们或者

如何增强ASP程序性能(2) (jaklin摘自Yesky)

程序|性能                    如何增强ASP程序性能(2)               2000-08-11· 编译:甘冀平·Yesky 技巧6:聪明地使用Session对象 Session在繁忙站点上使用时有几个缺陷.繁忙的意思是:站点上每秒有上百的页面被请求,或者同时有上千的访问用户.这个技巧对于那些要求水平扩展强的站点非常重要,也就是指这些站点:它们利用多个服务器完成数据装载或者处理大量容错.对于小型站点,比如内部网Intranet,Session是非常值得提倡的. 再