静态类和单例模式之间存在什么真实(即实际)差异?
两者都可以在没有实例化的情况下调用,两者都只提供一个"实例",它们都不是线程安全的.还有其他区别吗?
注意:我不完全确定这个问题是否真的属于StackOverflow,所以如果您不这样做,请随时投票支持结束.
在西班牙,当我们结束计算机科学学位时,我们必须进行最后的项目.该项目不能是微不足道的,可以涉及从软件工程到计算机体系结构的任何计算机领域,包括代码与否或其他.
问题是我在解决问题方面相当擅长,但完全找不到它们,也就是说,如果有人告诉我"解决这个问题"没问题,但我自己无法想象问题.
我使用专有开发工具做专有软件,很少使用开源组件,所以我认为"好的,对于尚未存在的开源社区有什么用处"......我根本不知道.
有什么建议?什么都欢迎.虽然我更喜欢c#或php,但如果必须,我不会不愿意学习新东西.
由于评论,该大学是:FacultaddeInformática.UniversidadPolitécnicadeMadrid.
谢谢大家的答案.虽然我还没有完全决定(我不想急于进入任何项目)我真的很喜欢ROBOCODE项目的想法,尽管它在传统方式上并没有真正有用,但它听起来像是一个有趣的乐趣.无论如何,我很感谢所有的建议.
我有一种情况,我需要连接几个字符串,以形成一个类的ID.基本上我只是循环一个列表来获取对象的ToString值,然后连接它们.
foreach (MyObject o in myList)
result += o.ToString();
Run Code Online (Sandbox Code Playgroud)
该列表预计不会有超过5个元素(虽然它可以但这是一个非常非常边缘的情况)并且通常会有1到3个元素,通常只有一个或两个元素.
什么会更多的性能,保持连接或使用StringBuilder?
StringBuilder bld = new StringBuilder()
foreach (MyObject o in myList)
bld.Append(o.ToString());
Run Code Online (Sandbox Code Playgroud)
我不确定在最常见的情况下,创建StringBuilder是否会花费比标准串联更多的时间.
这是懒惰的,列表中的项目一旦创建就不会改变,因此在调用时id会被懒惰地构造一次.
作为旁注...我应该使用固定数组而不是List吗?如果我这样做,我会获得任何性能或内存改进吗?(列表仅用作IEnumerable)
问题的一般观点可能是,有多少字符串足以阻止连接并开始构建?
我是否应该费心去测试这种情况呢?
if (myList.Count > 4)
ConcatWithStringBuilder(myList);
Run Code Online (Sandbox Code Playgroud) 我们正在努力使用策略来正确处理应用程序中的异常.这是我们的目标(总结):
我们已经提出了一个涉及通用特定于应用程序特定异常的解决方案,并且在一段代码中就是这样的:
try {
// Do whatever
}
catch(ArgumentNullException ane)
{
// Handle, optinally log and continue
}
catch(AppSpecificException)
{
// Rethrow, don't log, don't do anything else
throw;
}
catch(Exception e)
{
// Log, encapsulate (so that it won't be logged again) and throw
Logger.Log("Really bad thing", e.Message, e);
throw new AppSpecificException(e)
}
Run Code Online (Sandbox Code Playgroud)
记录所有异常,然后转为AppSpecificException,以便不再记录它.最终它将到达最后的手段事件处理程序,如果必须,将处理它.
我对异常处理模式没有太多经验......这是解决我们目标的好方法吗?它有任何重大缺点或大红色警告吗?
注意:这样做的一个缺点是,在第一次捕获之后你将失去处理特定异常的能力(如果你调用一个调用另一个方法的方法而第二个抛出异常则你无法处理它)但是我发现我从来没有这样做过......我只处理一个深度的例外...
阅读这个问题我发现这是(注意引号)"代码"来解决问题(顺便说一下,这是perl).
100,{)..3%!'Fizz'*\5%!'Buzz'*+\or}%n*
Run Code Online (Sandbox Code Playgroud)
显然这是一个没有真实的智力实例(我希望永远不会在我生活中的真实代码中看到它),但是,当你必须做出选择时,你何时牺牲代码的可读性才能获得性能?你是否只是应用常识,你是否总是作为最后的手段?你有什么策略?
编辑:对不起,看到答案我可能已经表达了严重的问题(英语不是我的母语).我不是说你编写代码后的性能与可读性,我在你写之前也会问.有时你可以通过制作一些较暗的设计或提供一些会使你的课程变暗的属性来预见未来的性能提升.您可能决定使用多个线程或仅使用一个线程,因为您期望这些线程可以提供的可伸缩性,即使这会使代码更难以理解.
我有一个包含10-15个应用程序的C++遗留代码库,它们共享多个组件.
在为共享组件和应用程序本身设置单元测试时,我想知道是否有接受/通用文件结构.
因为我的单元测试有几个基类以简化项目/客户特定的测试设置,所以有很多文件对所有测试都是通用的.
对我来说,在这里创建一个包含所有测试相关文件,模拟等的新目录似乎很自然 - 将它全部集中在一起,并且还继续测试主要make文件中的相关定义.
另一方面,我发现将测试文件与他们测试的代码文件一起驻留是很常见的做法.
是否有更多/更少被接受的方式?
有没有办法将.NET程序集编译为本机代码(即x86)输出,即没有MSIL.
根据我的理解,如果你只是将x86指定为架构,这只会改变PE Header以指向JIT,但是程序集仍将包含MSIL并且将根据需要进行JITT.
NGen确实为指定的体系结构生成程序集文件,但它不是编译器,它的目的是提高性能但是你仍然需要原始的DLL,本机映像的存在只能避免JIT编译程序集但你无法获得原生图像并使用它,可以吗?
那么,有没有办法从.NET实际编译到本地机器代码?
该YAGNI "原则"规定,你不应该集中在你需要像以前提供的功能:"你是不是要去需要它"反正.
我通常倾向于使用常识高于任何规则,无论如何,但有时我认为如果你有充分的理由过度设计或将来证明某些东西,即使你可能永远不会使用它.
我现在掌握的实际案例或多或少是这样的:
我有一个应用程序必须运行在一个简单的专有通信协议(OSI级别4).该协议具有一组理想的特性(例如遵循NORM规范),它们为应用程序提供稳健性,但并不是严格要求的(UDP多播可以执行可接受的).
还有一个事实是,该应用程序可能(但不一定)将来会被其他客户使用,而这些客户将无法访问专有解决方案,因此需要另一种解决方案.我知道另一个客户端应用程序的概率很高.
那么,你的想法是什么?我应该只设计专有协议并将重构,接口提取等留给我真正需要的时候,还是应该设计现在考虑(不是到目前为止)的未来?
注意:为了清楚起见,我有兴趣听到对一般问题(何时违反YAGNI)的所有意见,但我真的想对我目前的困境提出一些建议或想法:)
由于今天的代码变得越来越复杂,代码需要设计为可维护 - 意味着易于阅读和易于理解.
话虽这么说,我不禁记得几年前运行过的程序,比如Winamp或者你需要一个高性能程序的游戏,因为你的486 100 Mhz不能用那个漂亮的mp3播放器播放mp3.消耗了所有CPU周期.
现在我运行Media Player(或其他),开始播放mp3,它占据了我的四个核心之一的25-30%.来吧!!如果486可以做到这一点,那么播放如何占用如此多的处理器呢?
我自己就是开发人员,我总是建议:保持代码简单,不要过早地优化性能.似乎我们已经从"试图让它尽可能少地使用CPU"到" 如果它不需要太多的CPU就可以 ".
那么,您是否认为我们通过忽略优化来扼杀性能?
c# ×3
performance ×3
.net ×2
algorithm ×1
c++ ×1
native-code ×1
optimization ×1
singleton ×1
static ×1
string ×1
unit-testing ×1
yagni ×1