我经常看到多次调用其他函数的函数,而不是一次存储函数的结果.
即(1):
void ExampleFunction()
{
if (TestFunction() > x || TestFunction() < y || TestFunction() == z)
{
a = TestFunction();
return;
}
b = TestFunction();
}
Run Code Online (Sandbox Code Playgroud)
相反,我会这样写,(2):
void ExampleFunction()
{
int test = TestFunction();
if (test > x || test < y || test == z)
{
a = test;
return;
}
b = test;
}
Run Code Online (Sandbox Code Playgroud)
我认为版本2更好阅读,更好地调试.但我想知道为什么人们会像1号那样做?有什么我看不到的吗?绩效问题?当我看到它时,我在最坏的情况下看到数字(1)中的4个函数调用而不是数字(2)中的1个函数调用,因此性能应该在数字(1)中更差,不是吗?
我有一个Json,其中包含一个存储base64编码字符串的数据字段.这个Json被序列化并发送给客户端.
在客户端,newtonsoft json.net反序列化器用于返回Json.但是,如果数据字段变大(~400 MB),则解串器将抛出内存不足异常:数组维度超出支持的范围.我还在Task-Manager中看到,内存消耗确实快速增长.
任何想法为什么会这样?是否有json字段的最大大小?
代码示例(简化):
HttpResponseMessage responseTemp = null;
responseTemp = client.PostAsJsonAsync(client.BaseAddress, message).Result;
string jsonContent = responseTemp.Content.ReadAsStringAsync.Result;
result = JsonConvert.DeserializeObject<Result>(jsonContent);
Run Code Online (Sandbox Code Playgroud)
结果类:
public class Result
{
public string Message { get; set; }
public byte[] Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
更新:
我认为我的问题不是序列化程序,而只是试图在内存中处理这么大的字符串.在我将字符串读入内存时,应用程序的内存消耗会爆炸.该字符串上的每个操作都是相同的.目前,我认为我必须找到一种方法来处理流并立即停止将所有内容读入内存.
我正在使用bootstrap来折叠我网站的部分内容.一切正常.但是当我尝试通过javascript手动控制行为时,它不起作用
例如,当我这样做时:
$(".collapse").collapse('hide');
Run Code Online (Sandbox Code Playgroud)
或者恰恰是这个:
$(".collapse").each(function () {
if (localStorage.getItem(this.id)) {
$(this).collapse('hide');
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.我收到此错误:对象不支持属性或方法'collapse'引导程序.
我在网上看到类似的例子.我究竟做错了什么?谢谢你的帮助.
更新:
问题与我的asp.net mvc项目中的不同jquery版本有关.从_Layout.cshtml中删除这行代码修复了它:
@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码示例:
IEnumerable<Y> myEnumeration = *some linq stuff into a datatable*
If (myEnumeration.Count() > X)
{
foreach(Y bla in myEnumeration)
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致2次枚举吗?伯爵 - 召唤+ foreach?如果是这样,有没有办法避免其中一个枚举?
提前致谢
编辑myEnumeration.Count - > myEnumeration.Count()(扩展方法)
当它运行的系统肯定是64位系统时,从AnyCpu dll引用x64-dll是一个有效的方案吗?
我问,因为我在这里有问题,得到如下例外:
"无法加载文件或程序集'XY'或其依赖项之一.尝试加载格式不正确的程序"
在过去的几年里,我用不同的解决方案多次遇到这个问题.有时它似乎工作,有时不工作.
使用Pushstreamcontent时处理错误的正确方法是什么?我使用Pushstreamcontent将数据直接从数据库流式传输到客户端。在客户端上,我在收到结果时使用HttpCompletionOption.ResponseHeadersRead。
在数据不可用的情况下,我想返回一个 HttpStatusCode 404 (Not Found) 例如。目前我只检测到在执行 lambda ( CopyBinaryValueToResponseStream )期间没有数据。那时我无法再更改 HttpResponeMessage 的状态。
那么处理这种情况的正确方法是什么?我想避免预先对数据库进行额外检查,但现在这似乎是完成它的唯一方法?
[Route("{id}")]
public HttpResponseMessage GetImage(int id)
{
HttpResponseMessage resp = new HttpResponseMessage();
// do I need to check here first if the data is available?
// and return 404 if the data is not available
// resp.StatusCode = HttpStatusCode.NotFound
// or can I handle it later from within the lambda?
resp.Content = new PushStreamContent(async (responseStream, content, context) =>
{
// what …Run Code Online (Sandbox Code Playgroud)我有一个Owin自托管的Web-api服务器,我想知道当下载大量文件时是否需要更改超时设置?我正在使用的客户端使用HttpCompletionOption.ResponseHeadersRead读取响应。
在调试期间,在断点处停顿了一段时间后,尝试读取接收到的流时,客户端出现异常:
无法从传输连接中读取数据:远程主机强行关闭了现有连接。
在调试时,我可以重现此问题。在返回到服务器的Get-Request之后,在断点处等待了大约30秒之后,就会发生这种情况。
这是由于某种空闲超时导致的,因为我处于断点状态,无法在接收到的流上工作吗?还是我的收藏收集速度太慢且时间太长时,我正在从流中读取时也会发生这种情况吗?
我发现我可以通过ComputerInfo.TotalPhysicalMemory属性读取可用的物理内存. http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.devices.computerinfo.totalphysicalmemory.aspx
但有没有办法找出我的应用程序实际可用的内存.所以,例如,如果我的内存不足,我可以做出反应.
那可能吗?或者这只是不好的做法.
提前致谢
在vb.net WebService中查找内存泄漏时,我检测到阻塞的终结器,以及从未发布的几个对象(例如System.Threading.ReaderWriterLock)
Google告诉我这可能是因为STAThread属性是在我的main方法上设置的.我花了很长时间才发现VB.net使用STA作为默认值,而c#使用MTA.
当我将MTAThread-Attribute添加到我的Main方法时,一切正常,对象被释放.因此,如果我理解正确,则在STA模式中阻止Finalizer-Thread.
到目前为止一切顺利,但说实话,我今天第一次听说STA和MTA.可以在没有任何想法的情况下在STA和MTA之间切换吗?
更新 我仍然不确定我是否可以在不破坏我的代码的情况下在MTA和STA之间切换.这是一些更多的想法
根据 MSDN,如果 WCF-Service 的 MaxPendingAccepts 设置为 0,WCF 将为我们配置该值。
这意味着什么?是动态变化的吗?这背后的算法是什么?