每当我创建一个表时,我想知道是否有任何性能差异我是否说nvarchar (100)
或nvarchar (1000)
假设实际字符串大小将小于100
.那有吗?
有os.getuid(),它"返回当前进程的用户ID.".但是如何找出任何给定用户的ID?
Came across this code.
var dic = new Dictionary<int, string>();
for(int i=0; i<20000; i++)
{
dic.Add(i, i.ToString());
}
var list = dic.Where(f => f.Value.StartsWith("1")).Select(f => f.Key);//.ToList(); //uncomment for fast results
Console.WriteLine(list.GetType());
var list2 = dic.Where(f => list.Contains(f.Key)).ToList();
Console.WriteLine(list2.Count())
Run Code Online (Sandbox Code Playgroud)
所以当.ToList()被评论时它很慢,当没有时 - 它很快.可再现在这里如何解释?我是否应该始终制作所有ToList()以确保速度(即在哪种情况下IEnumerable会更优选)?注意我只是谈论linq对象,我知道linq对sql laziness和东西.
假设我有setInterval(PostToServer, 1000);
.PostToServer
函数使ajax发布,可能需要超过一秒钟.那么接下来会发生什么:在第一次呼叫未完成或等待呼叫结束之前进行第二次呼叫,然后再制作新呼叫?
首先是negotiate
,ntlm
和kerberos
三种不同的Windows身份验证实现?
IE发送此信息:
Authorization: Negotiate YIIFswYGKwYB ...
Firefox发送此信息:
Authorization: NTLM TlRMTVNTUAADAA ...
他们使用不同的协议吗?如果是这样,如何配置iis 7.0以便只ntlm
使用?
ps iis配置为使用Windows身份验证,但两个浏览器都会抛出登录表单,登录只能成功使用firefox.
我在Windows上有一个应用程序,单声道很好.但是,当我尝试对其进行分析时:
mono --profile = log program.exe
我明白了:
在主可执行文件中找不到'log'分析器,也无法从'mono-profiler-log'加载它.
并且没有创建数据文件(但应用运行正常).单声道3.0.10
有任何想法吗?
我已经安装了V8独立版并执行这样的javascript代码:./d8 source.js
.当我使用setTimeout时,我会收到ReferenceError: setTimeout is not defined
.这是怎么回事?有可能以某种方式包含此功能吗?
所以我在考虑编写在线c#编译器和执行环境.问题#1当然是安全问题.我最终为用户代码创建了一个特权小的appdomain,并在一个新的进程中启动它,该进程受到严密的cpu和内存消耗监控.标准控制台应用程序命名空间可用.所以我的问题是:你能想出以某种方式打破某些事情的方法吗?您可以在现场rundotnet上尝试您的想法.
Edit2如果有人关心代码,现在有这个项目的开源代码:github上的rextester
Edit1作为对其中一条评论的回复,这里有一些代码示例.
基本上你创建一个控制台应用程序.我只会发布一大块:
class Sandboxer : MarshalByRefObject
{
private static object[] parameters = { new string[] { "parameter for the curious" } };
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
string pathToUntrusted = args[0].Replace("|_|", " ");
string untrustedAssembly = args[1];
string entryPointString = args[2];
string[] parts = entryPointString.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
string name_space = parts[0];
string class_name = parts[1];
string method_name = parts[2];
//Setting the AppDomainSetup. It is very important to set …
Run Code Online (Sandbox Code Playgroud) 我正在尝试修改语法树,然后更新语义模型.这是我到目前为止:
var tree = Roslyn.Compilers.CSharp.SyntaxTree.ParseCompilationUnit(code);
var compilation = Roslyn.Compilers.CSharp.Compilation.Create(
"MyCompilation",
syntaxTrees: new[] { tree },
references: new[] { mscorlib });
var semanticModel = compilation.GetSemanticModel(tree);
...
var oldStatementNode = (parent as ExpressionStatementSyntax); //some SyntaxNode in the tree
var oldExpressionNode = oldStatementNode.Expression;
var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
var newRootNode = tree.GetRoot().ReplaceNode(oldExpressionNode, newExpressionNode);
var semanticInfo = semanticModel.GetTypeInfo(newExpressionNode); //throws exception "Syntax node is not within syntax tree"
Run Code Online (Sandbox Code Playgroud)
如果我在调用之前尝试调用semanticModel = compilation.GetSemanticModel(tree);
甚至进行新的编译- 同样的异常.tree
GetTypeInfo()
那么我该如何更新SemanticModel
?(当然,我可以获得修改后的源代码并从头开始做所有事情,但我想有更有效的方法).
我在这里遗漏了一些明显的东西我敢肯定,或许在某处创建了一个新的语法树?
我有这样的事情:
List<object> res = new List<object>();
...
while (...)
{
byte[] val = //get new byte[4]
res.Add(val); //if this is commented memory usage goes from 2Gb to 180Mb
}
return res;
Run Code Online (Sandbox Code Playgroud)
现在val
总是byte [4]并且有大约37000000个元素.所以我认为res
应该是37*10 ^ 6*4字节= 148 MB,但实际内存使用量约为2GB.如果我评论,res.Add(val);
那么内存使用量是100 MB.
那么记忆在哪里?
编辑
EDIT2
好吧,使用uint而不是byte [4] , List<uint>()
而不是List<object>
将内存大约300 MB.