基本上我有一个程序,当它开始加载文件列表(as FileInfo)时,对于列表中的每个文件,它加载一个XML文档(如XDocument).
然后程序将数据从其中读取到容器类(存储为IEnumerables),此时XDocument超出范围.
然后程序将数据从容器类导出到数据库.导出后容器类超出范围,然而,垃圾收集器没有清理容器类,因为它的存储IEnumerable,似乎导致XDocument留在内存中(不确定这是否是原因,但任务经理正在显示XDocument未被释放的记忆.
当程序循环遍历多个文件时,程序最终会抛出一个内存不足的异常.为了减轻这种情况,我最终使用了
System.GC.Collect();
Run Code Online (Sandbox Code Playgroud)
在容器超出范围后强制垃圾收集器运行.这是有效的,但我的问题是:
XDocument内存?谢谢.
编辑:代码示例:
集装箱类:
public IEnumerable<CustomClassOne> CustomClassOne { get; set; }
public IEnumerable<CustomClassTwo> CustomClassTwo { get; set; }
public IEnumerable<CustomClassThree> CustomClassThree { get; set; }
...
public IEnumerable<CustomClassNine> CustomClassNine { get; set; }
Run Code Online (Sandbox Code Playgroud)自定义类:
public long VariableOne { get; set; }
public int VariableTwo { get; set; }
public DateTime VariableThree { get; set; } …Run Code Online (Sandbox Code Playgroud)基本上我有一个SQL Server 2008 R2数据库.该数据库有一个名为Node和Link的表.链接包含与节点中的Id相关的StartNodeId和EndNodeId.数据库还需要节点和链接之间的链接表,以便更快地检查说明,此节点是否与此链接相关或哪些节点与此链接相关.Link表包含Identity密钥,NodeId和LinkId.我的问题是当我正在进行插入操作时,我正在尝试使用合并语句,这些语句似乎无法完成我正在尝试的操作
当我尝试
MERGE INTO [RoadRoutingDatabase].[dbo].[NodeToLink] AS TARGET
USING (SELECT Id, StartNodeId, EndNodeId FROM [RoadRoutingDatabase].[dbo].[Link]) AS SOURCE
ON (TARGET.LinkId = SOURCE.Id)
WHEN MATCHED AND TARGET.NodeId = Source.StartNodeId THEN
UPDATE SET TARGET.NodeId = SOURCE.StartNodeId,
TARGET.LinkId = SOURCE.Id
WHEN MATCHED AND TARGET.NodeId = Source.EndNodeId THEN
UPDATE SET TARGET.NodeId = SOURCE.EndNodeId,
TARGET.LinkId = SOURCE.Id
WHEN NOT MATCHED BY TARGET AND TARGET.NodeId = Source.StartNodeId THEN
INSERT (LinkId, NodeId)
VALUES (SOURCE.Id, SOURCE.StartNodeId)
WHEN NOT MATCHED BY TARGET AND TARGET.NodeId = Source.EndNodeId THEN
INSERT …Run Code Online (Sandbox Code Playgroud) 检查对象上的空引用的最有效方法是什么?我看过各种代码示例,它们有不同的检查方式,以便最有效或者被认为是最佳实践使用的方法如下:
Object.ReferenceEquals(item, null)
item == null
item != null
Object.Equals(item, null)
Run Code Online (Sandbox Code Playgroud)
谢谢
我们有一个已部署到各种客户端的数据库.我们目前正在引入一个可选的新功能,该功能将要求希望该功能的客户将新表添加到现有数据库中.
正在我们推出一款新软件,无论是否有新表,都必须与数据库版本进行交互(因为我们不希望有2个版本用于拥有新表的客户和一个用于不是)我们想知道是否有可能以编程方式确定(使用实体框架)数据库中是否存在表(我可以尝试访问该表并让它抛出异常但是想知道是否有内置函数去做这个)
谢谢
编辑:鉴于人们告诉我我应该使用配置文件不检查EF,任何人都可以指导我如何检查配置文件,例如,mvc控制器的自定义数据注释.就像是:
[Boolean(Properties.Settings.Default.TableExists)]
public class NamedController : Controller
Run Code Online (Sandbox Code Playgroud)
如果错误,会抛出未找到的页面?
编辑2:根据人们给出的建议使用配置设置,我最终得到了以下解决方案
用于设置表是否存在的应用程序设置
<appSettings>
<add key="tableExists" value="True"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
自定义数据注释,以说明是否允许访问控制器
[AuthoriseIfTableExistsIsTrue]
public class NamedController : Controller
Run Code Online (Sandbox Code Playgroud)
自定义授权的代码
public class AuthoriseIfTableExistsIsTrue : AuthorizeAttribute
{
private readonly bool _tableExists;
public AuthoriseIfTableExistsIsTrue()
{
_tableExists = string.Equals(bool.TrueString, ConfigurationManager.AppSettings["tableExists"], StringComparison.InvariantCultureIgnoreCase);
}
public AuthoriseIfTableExistsIsTrue(bool authorise)
{
_tableExists = authorise;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (_tableExists)
return base.AuthorizeCore(httpContext);
else
throw new HttpException(404, "HTTP/1.1 404 Not Found");
}
}
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助,并告诉我不要使用EF,而是使用配置设置
有人可以帮我找到这个C函数中的错误吗?
char* f(int i) {
int i;
char buffer[20];
switch ( i ) {
1: strcpy( buffer, "string1");
2: strcpy( buffer, "string2");
3: strcpy( buffer, "string3");
default:
strcpy(buffer, "defaultstring");
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
我认为这与类型转换有关.我的编译器发出警告'int i的声明阴影参数'.
基本上我有一个实现IEquatable的容器(示例如下所示)
public class ContainerClass : IEquatable<ContainerClass>
{
public IEnumerable<CustomClass> CustomClass { get; set; }
public override bool Equals(object obj) { ... }
public bool Equals(ContainerClass other) { ... }
public static bool operator ==(ContainerClass cc1, ContainerClass cc2) { ... }
public static bool operator !=(ContainerClass cc1, ContainerClass cc2) { ... }
public override int GetHashCode() { ... }
}
Run Code Online (Sandbox Code Playgroud)
以及一个也实现IEquatable的CustomClass
public class CustomClass : IEquatable<CustomClass>
{
public string stringone { get; set; }
public string stringtwo { get; set; } …Run Code Online (Sandbox Code Playgroud) 我怎么拉
最近12个(月)记录按ServiceId过滤,按最近排序
使用linq给出这个db表数据:
- Date ServiceId Views Clicks
- 2009-03-01 3 88107 244223
- 2009-03-01 5 41563 94770
- 2009-03-01 7 24165 45378
- 2009-03-01 8 16415 24311
- 2009-03-01 4 50341 127114
- 2009-04-01 3 70646 211999
- 2009-04-01 5 40380 102241
- 2009-04-01 7 23905 40768
- 2009-04-01 8 18996 29220
- 2009-04-01 4 45685 112635
- 2009-05-01 3 81044 215753
- 2009-05-01 5 46273 121343
- 2009-05-01 7 25744 41578
- 2009-05-01 8 21122 32607
- 2009-05-01 …Run Code Online (Sandbox Code Playgroud) 我几乎完成了这个项目,涉及在Celsius,Fahrenheit和Kelvin之间转换,我最后需要的是找出克隆方法.任务是"clone,它不接受任何形式参数,并返回对新创建的Temperature对象的引用,该对象具有与其作为克隆的对象相同的值和比例".我的代码编译,但在客户端程序中运行时,我在Temperature.clone(Temperature.java:134)收到java.lang.StackOverflowError的错误
public class Temperature {
private double value;
private String scale;
public Temperature() { // default constructor
this.value = 0;
this.scale = "C";
}
public Temperature(double value, String scale) {
this.value = value;
this.scale = scale;
}
public double getValue() {
return this.value;
}
public String getScale() {
return this.scale;
}
public double getCelsius() {
if (scale.equalsIgnoreCase("C")) {
return this.value;
} else if (scale.equalsIgnoreCase("F")) {
double faren = ((this.value - 32) * (5 / …Run Code Online (Sandbox Code Playgroud) 所以我在c#4.0 WPF应用程序中工作并使用并行foreach循环使用我创建的数据库存储库将数据导出到数据库.我已经使用进度条使用并行foreach进行导出,但是希望能够提供更多深入的进度细节,例如导出第25项的第5项.我遇到的问题很明显,因为它正在运行与此同时,计数器不起作用,即总数会说出类似的结果
exporting 0 of 25
exporting 0 of 25
...
exporting 5 of 25
exporting 5 of 25
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导如何在这样的并行循环中使行为工作:
int runningTotal = 0;
Parallel.ForEach(source, x =>
{
Repository.Commit(x);
runningTotal++;
progressReporter.ReportProgress(() =>
{
//Progress bar update
this.progressFile.Value++;
this.lblProgress.Text = String
.Format("Exporting Source {0} of {1}", runningTotal, source.Count)
});
});
Run Code Online (Sandbox Code Playgroud)
希望这表明我希望实现的目标.
谢谢
我有代码:
<%: Html.DropDownListFor(
model => model.CompanyName,
new SelectList(ViewData["ActiveCompanies"] as IEnumerable,
"Id", "Name"))
%>
Run Code Online (Sandbox Code Playgroud)
正在使用名称等填充列表,但所选项目名称未绑定到Model.CompanyName(如果解决方案返回id,那么我可以使用类似的东西
<%: Html.DropDownListFor(
model => model.CompanyID,
new SelectList(ViewData["ActiveCompanies"] as IEnumerable,
"Id", "Name"))
%>
Run Code Online (Sandbox Code Playgroud)
事实上,这对我的目的来说会更好,但如果我能找出数据未被约束的原因,那将会非常有用.
当我按下STime等于的JOptionPane.showInputDialog窗口上的取消按钮时,如何在此代码中阻止NullPointerException?(它位于'>>'标志)
我的代码:
insertTableF.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e)
{
int wayPoint1 = 0;
int wayPoint2 = 0;
int PassTime = 0;
Statement statementR;
if (loggedIn == 1)
{
while(passedR ==0)
{
try
{
if (wayPoint1==0)
{
sTagR =JOptionPane.showInputDialog("Please enter the Rhino Tag number:");
iTagR = Integer.parseInt(sTagR);
wayPoint1 =1;
}
if (wayPoint2==0)
{
sGPSX = JOptionPane.showInputDialog("Please enter the horizontal GPS Grid Numbers(eg.3123):");
iGPS = Integer.parseInt(sGPSX);
wayPoint2 = 1;
}
sGPSY = JOptionPane.showInputDialog("Please enter the vertical GPS Grid Letters(eg.XXYY:");
while …Run Code Online (Sandbox Code Playgroud) c# ×6
linq ×5
asp.net-mvc ×2
java ×2
sql ×2
asp.net ×1
c ×1
database ×1
formatting ×1
iequatable ×1
linq-to-xml ×1
merge ×1
performance ×1
sql-server ×1
t-sql ×1
wpf ×1