我有一个日志类,需要从应用程序的几乎所有地方调用.
但是,它需要在应用程序的开头设置"写入哪条路径","日志级别"以及是否"启用".
我不想每次都给这个参数或者将Logging类作为参数传递给我的应用程序中的每个对象,所以我使用单例模式进行日志记录.
最近我从紧密耦合的课程中遭受了很多痛苦,我不想再犯同样的错误,但在考虑这个之后听起来这是唯一的好解决方案.
更新:
我真的不关心记录我关心的解决类似设计问题的事情,我对另一个需要从这么多类中使用的全局设置对象遇到了同样的困境.但是将它注入到它们的每一个中只会产生可怕的开销和不太可读的代码.
您对此实施有何看法?当您遇到类似的设计决策时,您会怎么做?
PS请不要建议像"使用Log4X库"等.
我有2个ASP页面.
我向Firefox的第一页请求(在服务器端需要30秒才能处理),在30秒执行期间,我从Firefox到第二页请求另一个请求(服务器端不到1秒) ),但它确实在31秒后出现.因为它等待第一次完成请求.
当我从Firefox请求第一页然后从IE请求第二页时,它就是即时的.
所以基本上ASP-IIS 6以某种方式将每个客户端限制为一次一个请求(长处理请求).我需要在我的.NET客户端应用程序中解决这个问题.
这在3个不同的系统中进行了测试.如果要测试,可以在最后尝试ASP脚本.
在长SQL执行中或仅在耗时的ASP操作中,此行为相同.
注意:
有没有办法解决这个问题?
示例ASP代码:
第一个ASP:
<%
Set cnn = Server.CreateObject("Adodb.Connection")
cnn.Open "Provider=sqloledb;Data Source=.;Initial Catalog=master;User Id=sa;Password=;"
cnn.Execute("WAITFOR DELAY '0:0:30'")
cnn.Close
%>
Run Code Online (Sandbox Code Playgroud)
第二个ASP:
<%
Response.Write "bla bla"
%>
Run Code Online (Sandbox Code Playgroud) 我找不到问题的好标题,这就是我想要做的:
最好的方法是什么?
更新:
在一个大的解决方案中,我们有大约100个项目,目标都是3.5,目前在VS.NET 2010中.
现在我们想将它升级到.NET 4.0,我是否必须一个接一个地改变它们的目标?或者有没有办法自动化这个过程?
他们是否矛盾?
解耦是很棒的,很难实现.然而,在大多数应用程序中,我们并不真正需要它,因此我可以设计高度耦合的应用程序,除了明显的副作用之外,它几乎不会改变任何东西,例如"你不能分离组件","单元测试是痛苦的屁股"等
你怎么看?你总是试图解耦和处理开销吗?
我在一个存储大约15-100K数据的类中使用了SortedList().
最近我的要求发生了变化,数据不应再存储为已排序,所以我切换到了List().
但是在这种情况下,我注意到List()消耗大约20%以上的内存.
9K物品:
15K物品:
在我开发的环境中,记忆非常重要.而不是List()我可以使用什么来避免这种额外的内存消耗,仍然有一个非排序列表?
PS我使用HashSet(Of String)来提供唯一性检查,同时使用List(Of)来模拟SortedList.ContainsKey(),尽管我认为它不会带来这样的内存开销.
PS 2:我的应用程序在启动时有大约80 MB的基本内存分配.因此数字应为105-80 = 25,125-80 = 45,依此类推
结果
感谢所有答案,最终结果如下:
一些Bencmarks: 500个字符,250000个插入
名单(OF STring)(50000)
274毫秒 - 226 MB
SortedList(Of String,String)(50000)
34868毫秒 - 230 Mb
HashSet的
420毫秒 - 232 MB
字典(OF String,Object)
486毫秒 - 234 MB
虽然当我将减少的数量改为25时,然后:
Hashset为600.000次迭代300 Mb,其中List()为286 Mb
另外的Hashset左右的内存使用情况:http://blog.mischel.com/2008/04/09/hashset-limitations/词典(字符串,对象)是在我的测试没有太大的孰优孰劣.
如何指定要在SSL连接中使用的密码套件?
我知道Mentalis Seclib得到了这个功能,但他们没有维护项目(并且该库中存在x64操作系统的问题),因为他们说.NET Framework 2.0引入了这些功能,但是我找不到这样做的方法在.NET Framework 3.5中.
更具体地说,我想通过使用NULL密码连接HTTPS服务,我将使用以下命令对OpenSSL执行相同的操作:
openssl s_client -connect www.example.com:443 -cipher NULL
Run Code Online (Sandbox Code Playgroud)
我怎么能在.NET中这样做?
此外,欢迎商业或商业友好的许可图书馆建议.
DSN可以返回多个IP地址,而不是在我的请求之后使用DNS解析来获取IP地址我希望获得我的HttpWebRequest连接到的IP.
反正在.NET 3.5中有没有这样做?
例如,当我向www.microsoft.com做一个简单的Web请求时,我想了解它连接的哪个IP地址发送HTTP请求,我想以编程方式(而不是通过Wireshark等)
我有一个.NET 3.5应用程序
当我对应用程序进行概要分析时,我可以确认这些字符串存储在LOH中,但稍后它们也会被GC回收,因此在给定时间内,只有最多10个字符串在LOH中(10个线程正在运行).
我的理解是,这些大字符串位于LOH,然后由GC回收,但不知何故由于它们的分配位置(并且在LOH中因此没有被压缩)这导致碎片化.尽管操作中没有内存泄漏,但仍会发生这种情况.
它不会导致~100K次出现问题,但是当它达到1M +时会出现内存异常.
我正在使用ANTS Memory Profiler,这是我在早期执行中得到的结果:
.NET Using 70MB of 210MB total private bytes allocated in to the application
Number of Fragments: 59
Number of Large Fragments : 48 (99.6% of free memory)
Largest Fragment: 9MB
Free Space: 52% of total memory (37MB)
Unmanaged Memory: 66% of total private memory (160MB)
Run Code Online (Sandbox Code Playgroud)
据我所知,WebRequest.PreAuthenticate几乎总是好的.
如果我启用它,即使没有凭据也不会尝试进行身份验证,如果有凭据则会.那么有任何正当理由将其设置为False吗?或者即使没有凭据也可以将其设置为True?
并且因为它非常有用,为什么它没有像许多其他HTTP功能一样默认启用?
.net ×8
c# ×2
memory ×2
performance ×2
.net-3.5 ×1
.net-4.0 ×1
asp-classic ×1
collections ×1
coupling ×1
decoupling ×1
dns ×1
global ×1
http ×1
iis-6 ×1
ip ×1
memory-leaks ×1
scope ×1
settings ×1
singleton ×1
ssl ×1
storage ×1
tcp ×1
upgrade ×1
webrequest ×1
yagni ×1