伙计们,
如果我在一个长时间运行的方法中设置一个大对象.net为null(不一定是CPU密集型...只是长时间运行)它是垃圾收集的立即游戏还是该方法需要在对象之前完成准备垃圾收集?
我运行了以下代码,随着时间的推移(一两个小时),我注意到迭代项目需要更长时间.我正在做的事情导致这种情况发生吗?如果是这样我该怎么办呢?
int totalProcessed = 0;
int totalRecords = MyList.Count();
Parallel.ForEach(Partitioner.Create(0, totalRecords), (range, loopState) =>
{
for (int index = range.Item1; index < range.Item2; index++)
{
DoStuff(MyList.ElementAt(index));
Interlocked.Increment(ref totalImported);
if (totalImported % 1000 == 0)
Log(String.Format("Processed {0} of {1} records",totalProcessed, totalRecords));
}
});
public void DoStuff(IEntity entity)
{
foreach (var client in Clients)
{
// Add entity to a db using EF
client.Add(entity);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
如果运行unden CLR 4.0,为CLR 2.0编译的.NET程序运行速度会更快吗?
的app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0,Profile=Client" />
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用任务并行库.我有一个任务(让我们称之为"DoSomething")可能被取消.无论任务是故障,取消还是成功完成,我都会继续执行该任务,执行一些清理工作.
在启动此任务的代码中,我想返回一个Task对象,其状态(出错,取消,运行完成)反映了DoSomething任务的状态,但重要的是我返回的这个任务不会反映这个状态,直到继续任务执行.
这是一个例子:
public Task Start(CancellationToken token)
{
var doSomethingTask = Task.Factory.StartNew(DoSomething
, token);
var continuationTask = doSomethingTask.ContinueWith
(
(antecedent) =>
{
if (antecedent.IsFaulted || antecedent.IsCanceled)
{
//Do failure-specific cleanup
}
//Do general cleanup without regard to failure or success
}
);
//TODO: How do I return a Task obj which Status reflect the status of doSomethingTask,
//but will not transition to that status until continuationTask completes?
}
Run Code Online (Sandbox Code Playgroud)
我可以使用TaskCompletionSource,但这看起来很糟糕.还有其他想法吗?
如何将Sql Server CE Db连接到C#DotNet 4.0我听说过System.Data.SqlServerCe NameSpace用于连接本地数据库,但我无法在.Net 4.0中找到它
有没有替代班级?
我听说在Visual Studio 2010中使用其URL路由引擎为URL重写提供了内置功能.
我使用类似intelligencia urlrewrite的插件在早期版本的visual studio中进行了URL重写.
任何人都可以解释我或指导我理解吗?
想在我的网站上实现动态和自定义网址重写.
我在我的应用程序中的调度程序项目(类库)中使用quartz.NET,这是因为我希望其他项目与实际实现无关.在将来,如果我想更改Castle Scheduler或Windows Scheduler或wathever的石英...我将有灵活性来更改它.
我需要在Quartz.NET项目上对每周触发器进行单元测试,我开始研究并发现目前似乎是一个很酷的解决方案MOLES这个扩展基本上允许我更改DateTime.Now并转到未来!
在这种情况下,从现在开始一周,当触发器被安排发射时,但在等待一段时间后发现我的触发器没有被激活的悲伤,即使在改变时间和Thread.Sleeping几分钟......
我想要展望未来的原因是因为在应用程序中我正在为每种请求使用不同的方法/触发器EG Weekly,Weekly with recurrence,Monthly,Yearly
有没有其他人单位测试过这种情况?
有什么东西我路过吗?
MOLES可以吗?
我有四个级别的数据结构定义如下:
Dictionary<Type1, Dictionary<Type2, Dictionary<Type3, List<Type4>>>>
Run Code Online (Sandbox Code Playgroud)
整个事情被封装在一个同样保持线程安全的类中.目前它只是在读取/操作数据时锁定整个集合(读取比写入更常见).
我正在考虑更换Dictionary
with ConcurrentDictionary
和List
with ConcurrentBag
(它的项目不必订购).
如果我这样做,我可以消除锁定并确保并发集合能够正常工作吗?
什么是.net 2.0中AesCryptoServiceProvider(存在于system.Core -.net 4-中)的替代品?
我知道还有另外一个问题要求同样的事情,但它现在几个月没有得到任何关注:https://stackoverflow.com/questions/3786088/how-to-force-ajax-control-toolkit-scripts-loading -从-CDN
我已将我的网站升级到.NET4,现在我正在使用scriptManager的EnableCDN ="true"标记.我的Ajax脚本正在从Microsoft CDN中引用我的预期,但我似乎无法从CDN加载我的AjaxControlToolkit脚本.相反,它们都通过ScriptResource.axd在本地加载.
我知道CDN文件的位置,我知道每次使用控件时我都可以引用这些文件,但是我有很多遗留代码可以从scriptmanager中自行加载,只需要拉出ScriptResource.axd文件.
有关如何从CDN加载控件工具包脚本的任何建议吗?我已经有了标准的WebForms.js等.
让我知道如果有什么我可以清理,这是我正在使用的脚本管理器:(我已经尝试过toolkitscriptmanager)
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"
EnableCdn="true" EnableScriptLocalization="false"
LoadScriptsBeforeUI="false" EnableViewState="false" />
Run Code Online (Sandbox Code Playgroud) .net-4.0 ×10
c# ×8
.net ×4
.net-2.0 ×2
asp.net ×2
ajax ×1
c#-4.0 ×1
cdn ×1
clr ×1
concurrency ×1
moles ×1
quartz.net ×1
unit-testing ×1