在Go中清除切片的适当方法是什么?
以下是我在go论坛中发现的内容:
// test.go
package main
import (
"fmt"
)
func main() {
letters := []string{"a", "b", "c", "d"}
fmt.Println(cap(letters))
fmt.Println(len(letters))
// clear the slice
letters = letters[:0]
fmt.Println(cap(letters))
fmt.Println(len(letters))
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?
为了澄清,缓冲区被清除,因此可以重复使用.
一个例子是bytes包中的Buffer.Truncate函数.
请注意,Reset只调用Truncate(0).所以看来在这种情况下,第70行会评估:b.buf = b.buf [0:0]
http://golang.org/src/pkg/bytes/buffer.go
// Truncate discards all but the first n unread bytes from the buffer.
60 // It panics if n is negative or greater than the length of the buffer.
61 func (b *Buffer) Truncate(n int) {
62 …Run Code Online (Sandbox Code Playgroud) 当IP范围写为aaa.bbb.ccc.ddd/netmask(CIDR表示法)时,我需要使用C#计算此范围内的第一个和最后一个包含的IP地址.
例:
输入: 192.168.0.1/25
结果: 192.168.0.1 - 192.168.0.126
OData由Netflix和Microsoft的许多产品(服务器:CRM,Sharepoint,SQL Server;客户端:Excel)使用.
虽然OData很有趣,但它有自己的一系列好处和权衡取舍.
我设计并构建了一个供内部使用的自定义搜索引擎.许多开发人员使用搜索引擎进行报告和列表,使用此搜索引擎替换每个业务线应用程序中的报告和自定义搜索/过滤功能.
我有一个不错的系统允许在我的搜索引擎中查询/过滤.这是所有网址驱动,因此它易于使用.
此时,我想在URL"命令行"中添加更多功能.OData是一个诱人的选择,因为我们已经使用了很多微软技术.它还具有使用布尔逻辑等的过滤器的标准语言.
是否有任何其他合法的基于标准的REST框架,如OData,我应该看看?
我不确定我需要完整的OData堆栈来完成我正在做的事情.我的基于查询字符串的简单过滤在这一点上非常有效.只是想进行一些尽职调查,以便做出明智的决定.
谢谢.
编辑
我正在寻找的更多是用于创建我的搜索API的框架.Lucene/Solr使用url语法http://lucene.apache.org/solr/tutorial.html和OData一样.Lucene/Solr并不是我想要的,而且对于我的场景来说太复杂了.但是,他们有一个明确定义的url api.
我正在寻找任何其他定义好的基于url的api示例.我希望看到基于url和查询字符串参数定义查询/搜索语法的"现有技术".
我尝试过的大多数.NET内存分析器都允许您拍摄内存快照.
但是,我正在尝试诊断一个问题,即我最终将大量内存分配给.NET,并由ANTS分析器指示为"免费".(我已经与Mem Profiler和CLR分析器等其他分析器确认了这个问题.
ANTS显示我有大量的内存碎片(100%的可用内存,150MB作为最大的块.)堆中所有对象的总大小为180MB.我有553 MB分配给.NET和152分配给"Unmanaged".
但是,大对象堆(LOH)的大小仅为175kb.这是在那里分配的对象的实际大小.我没有永久地分配任何最终在LOH上的对象.
因此,我的问题,一些沿线,我怀疑我以某种方式分配大对象(超过85K的LOH限制),然后处置它们.
我正在从数据库(Oracle,Sql Server)读取大量数据(这里估计数MB),将这些数据复制到内存中的对象数组,并将数据处理成索引(数组,字典等)以便于搜索/滤波/处理.
我的猜测是,数据阅读器暂时分配了大量空间.但是,我没有办法暂停程序并拍摄内存快照.
我想要的是一个分析器,它跟踪LOH上分配的每个对象,这样我就可以弄清楚是什么导致了LOH碎片和过多的内存使用(内存没有返回到操作系统,所以看起来我的进程是占用1GB的内存来存储200MB的已分配对象.)我猜测内存没有返回,因为LOH没有被压缩,所以我在我的进程的生命周期中坚持所有这些内存,这可能是几周(它作为Windows服务运行.)
编辑:我的问题是我的.NET应用程序使用了大量无法跟踪的内存.
Edit1:我使用过Visual Studio内存分析器.虽然它确实告诉我所有实例化的对象,有多少,总字节数等,但我没有给出一个提示,为什么我最终得到这么多的可用内存.我唯一的提示/线索是ANTS告诉我的:"内存碎片限制了可以分配的对象的大小." 我有很多未使用的未分配给.NET的内存.
Edit2:更多分析表明我在LOH上分配了一些短暂的大型对象.但是,在LOH上分配的总金额绝不会超过3到4 MB.然而,在这段时间内,私有字节从屋顶射出,加倍和三倍,而我实际分配的对象(在所有堆上)的大小仅略微增长.例如,所有堆中的字节数为115MB,但我的私有字节数超过512 MB.
ANTS清楚地告诉我,我遇到了内存碎片问题.结果我在LOH上创造了短暂的物体.但是,这些对象永远不会超过3或4 MB.所以这些短暂的大型物体(似乎是?)正在破坏LOH.
回应Eric Lippert和迪士尼乐园的停车场类比(这很棒).
这就像有人在一个地方停留几分钟,然后离开.那个地方然后保留(没有其他人可以停在那里),直到我重新编制停车场!
当Visual Studio警告我内存使用并建议切换到x64时,我首先开始调查此问题.(我忘了警告号码,快速谷歌找不到它).因此,切换到x64可以缓解当前的问题,但不能解决潜在的问题.
这就像我有一辆可容纳1000辆汽车的停车场,但在我放了100辆汽车之后,我的停车服务员大声说它已经满了......
幸运的是,我拥有一个巨大的VMware集群,并且有一个理解管理员.我已经分配了8个CPU和8 GB内存.所以就问题而言,我可以处理它,我只是把资源投入其中.另外,(正如我上面所说的那样)我在一段时间后切换到x64,因为Visual Studio一直在唠叨我的警告然而,我想知道它在LOH上分配的内容,看看我是否能减轻这个堆碎片的影响一些小代码更改.也许这是一个傻瓜的差事,因为我可以把资源投入其中.
应用程序运行正常,偶尔GC暂停时速度很快.但大多数情况下,我可以忍受这种情况,我只想知道造成它的对象是什么.我的怀疑是一些短暂的字典,我还没有找到.
Edit3:http://msdn.microsoft.com/en-us/magazine/cc188781.aspx
ObjectAllocatedByClass不跟踪大对象堆的分配,但ObjectAllocated会跟踪.通过比较两者的通知,一个有进取心的灵魂应该能够弄清楚大对象堆中的内容而不是普通的托管堆.
所以看起来可以做到这一点.然而,我的C++技能是生锈的方式来挖掘这个(如果我有更多的时间,可能在未来的某个时候).我希望分析器可以提供这个开箱即用.
我想在我的Windows窗体应用程序中显示user.config文件的位置,以便用户可以轻松找到它.
我理解如何创建路径,这要归功于:我可以控制.NET用户设置的位置以避免丢失应用程序升级的设置吗?.
但是,如果这种情况发生变化,我宁愿不必在我的应用程序中构建路径,特别是如果有一个简单的方法来获取user.config文件位置.
许多创建html的库都依赖于HtmlTextWriter.在新的corefx中是否有相当于这个类?
以下是一些依赖于HtmlTextWriter的项目:https : //github.com/darthfubumvc/htmltags https://fluenttags.codeplex.com/
另一个问题可能是:"使用dotnet core/corefx生成html的最佳方法是什么?"
让IPython使用IronPython作为Python解释器的过程是什么?
我知道以前存在一些问题: 在ironpython中使用ipython需要什么?
但是现在应该修复这些问题,我该如何解决这个问题呢?
安装不会将IronPython检测为Python解释器的版本,而不是我认为的那样.但我想知道如何做到这一点.
我(理想情况下)喜欢在同一台机器上同时运行CPython和IronPython版本的IPython.
我正在寻找本文的更新版本:提高.NET应用程序性能和可伸缩性.
此页面上的消息指出:
退休内容
此内容已过时,不再维护.它是为仍在使用这些技术的个人提供的.此页面可能包含最初发布时有效的URL,但现在链接到不再存在的网站或页面.
我正在寻找本文的更新或同样重点的文章集.
关于.NET性能和可伸缩性的(最新)书也是可以接受的.
我无法再使用ASP.NET RC1和HttpPlatformHandler创建日志文件.
这是事件日志中的警告:
The description for Event ID 1004 from source HttpPlatformHandler cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
If the event originated on another computer, the display information had to be saved with the event.
The following information was included with the event:
Warning: Could not create stdoutLogFile , ErrorCode = -2147024843.
Run Code Online (Sandbox Code Playgroud)
相关软件版本: …
我正在寻找有关Max time.Time的文档.
其他语言使其明确,例如在C#中:http://msdn.microsoft.com/en-us/library/system.datetime.maxvalue(v = vs.110).aspx
public static readonly DateTime MaxValue
Run Code Online (Sandbox Code Playgroud)
该常数的值相当于23:59:59.9999999,12999年12月31日,恰好在10000点之前的00:00:00之前的一个100纳秒刻度.
Go的最长时间是多长时间?它在某处记录了吗?
c# ×6
.net ×3
go ×2
.net-core ×1
arrays ×1
asp.net ×1
asp.net-core ×1
date ×1
html ×1
iis ×1
ip ×1
ipython ×1
ironpython ×1
memory-leaks ×1
netmask ×1
odata ×1
performance ×1
python ×1
scalability ×1
settings ×1
slice ×1
standards ×1
time ×1
web-services ×1
winforms ×1