我试图阻止多线程服务器中的数据争用.我的问题如下:有一个List<RServer>,类型RServer是一个有几个字段的类.现在,服务器有几个线程全部同时运行,他们可以修改List(添加更多项)和单个RServer实例(更改字段).
因此,我的策略是readonly object RServerLock = new object( )在每个RServer实例中创建一个并且另外readonly object RServerListLock = new object( )包含所有修改Lista (或RServer实例)的代码lock.这样安全吗?如果一个线程试图锁定一个RServerLock 而另一个锁定它会发生什么?
我有一个我需要二进制序列化的类.该类包含一个字段,如下所示:
private T[,] m_data;
Run Code Online (Sandbox Code Playgroud)
这些多维数组可以相当大(数十万个元素)和任何原始类型.当我在一个对象上尝试标准的.net序列化时,写入磁盘的文件很大,我认为.net存储了很多关于元素类型的重复数据,可能没有那么高效.
我一直在寻找自定义序列化器,但还没有看到任何处理多维通用数组.我已经在内存流的字节数组上尝试了内置的.net压缩,序列化后取得了一些成功,但没有像我希望的那样快速/压缩.
我的问题是,我应该尝试编写一个自定义序列化程序,以便为适当的类型最佳地序列化这个数组(这看起来有点令人生畏),还是应该使用标准的.net序列化并添加压缩?
关于最佳方法的任何建议都是最受欢迎的,或链接到显示如何处理多维通用阵列的序列化的资源 - 正如我所发现的现有示例所提到的不支持这样的结构.
我刚刚开始使用ASP.NET MVC,因为它处于测试阶段.在我的代码中,我正在运行一个简单的LINQ to SQL查询来获取结果列表并将其传递给我的视图.这种事:
var ords = from o in db.Orders
where o.OrderDate == DateTime.Today
select o;
return View(ords);
Run Code Online (Sandbox Code Playgroud)
但是,在我的视图中,我意识到我需要访问每个订单的客户名称.我开始使用,o.Customer.Name但我很确定这是为每个订单执行单独的查询(因为LINQ的延迟加载).
减少查询数量的合理方法是同时选择客户名称.就像是:
var ords = from o in db.Orders
from c in db.Customers
where o.OrderDate == DateTime.Today
and o.CustomerID == c.CustomerID
select new { o.OrderID, /* ... */, c.CustomerName };
return View(ords);
Run Code Online (Sandbox Code Playgroud)
除了现在我的"ords"变量是一个匿名类型的IEnumerable.
是否可以以这样的方式声明ASP.NET MVC视图:它接受IEnumerable作为其视图数据,其中T由从控制器传递的内容定义,或者我是否必须定义从我的查询填充的具体类型?
我有一个由XML数据组成的DataSet,我可以轻松地将其输出到一个文件:
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
ds.Load(reader, LoadOption.PreserveChanges, ds.Tables[0]);
ds.WriteXml("C:\\test.xml");
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是将XML压缩为ZIP或其他类型的压缩文件,然后将此文件保存到磁盘,同时将ZIP文件拆分为1MB块.我真的不想保存未压缩的文件,然后压缩它,然后拆分它.
我特别想要的是:
我为ASP.NET webforms编写了一个很好的小文件上传控件,它使用了IFrame和ASP.NET AJAX.
但是,在大型上传时,浏览器会在完成发布表单之前超时.
有没有办法可以增加这个?
我对替代解决方案并不感兴趣,所以不要建议改变整个问题.它适用于<5 meg上传,我只想把它增加到大约8mb.
编辑:在Page_Load中设置超时似乎没有任何改变.
我很确定stackoverflow.com是用ASP.NET创建的,但无论我在哪里点击,我都看不到地址栏中的.aspx扩展名.它是如何完成的,有什么特别的原因吗?
因此,无论我做什么,我似乎都无法避免由于我在同一项目中的多个源代码文件中包含相同的头文件而使Dev C++发出大量多重定义错误.我非常希望避免将我的所有源代码转储到一个文件中,并且只包含一次标题,因为这将使我的文件很长并且难以管理.
从本质上讲,这是正在发生的事情:
#ifndef _myheader_h
#define _myheader_h
typedef struct MYSTRUCT{
int blah;
int blah2; } MYSTRUCT;
MYSTRUCT Job_Grunt;
MYSTRUCT *Grunt = &Job_Grunt;
MYSTRUCT Job_Uruk;
MYSTRUCT *Uruk = &Job_Grunt;
int Other_data[100];
void load_jobs();
#endif
Run Code Online (Sandbox Code Playgroud)
示例Cpp文件(它们几乎都看起来像这样):
#include "myheader.h"
void load_jobs(){
Grunt->blah = 1;
Grunt->blah2 = 14;
Uruk->blah = 2;
Uruk->blah2 = 15;
return; }
Run Code Online (Sandbox Code Playgroud)
请记住,我有大约5个包含这个标题的cpp文件,每个文件都处理头文件中找到的不同类型的结构.在这个例子中,当实际头文件中有大约4-6个不同的结构,并且有更多的成员时,只有一个结构包含几个成员.我在其中包含的所有文件都遵循您在此示例中看到的相同公式.
现在我明白了标头防护只能阻止每个单独的cpp文件多次包含头文件.似乎正在发生的事情是,当编译器在每个cpp的开头读取include时,它会再次定义头文件,这会导致它吐出以下行和行:
Multiple Definition of Uruk, first defined here
Multiple Definition of Job_Uruk, first defined here
Multiple Definition of Grunt, first defined here
Multiple Definition of Job_Grunt, first …Run Code Online (Sandbox Code Playgroud) 注意:我发现这是"在C#.NET中创建Word文档",但这不是我想要的.
你知道如何创建一个.odt来从C#.NET创建文件吗?
是否有OpenOffice.org库的.NET组件或包装器来执行此操作?
在上一个问题中,我询问了各种ORM库.事实证明Kohana看起来非常干净但功能正常用于ORM.我已经有了一个我正在工作的MVC框架.如果我不想将它作为一个框架运行,那么要包含的正确文件集是什么才能给我DB和ORM基类文件?
更新:
我跳进去开始查看ORM源代码.有一件事让我立刻感到困惑..所有ORM类的类名都附加了_CORE,即ORM_Core ORM_Iterator_Core,但是到处都是代码扩展了ORM类.问题是,我用6种不同的方式搜索了整个代码库,我从来没有见过一个简单的ORM类def,也没有看到ORM接口def或者其他任何东西..有人可以告诉我魔术发生在哪里吗?
有没有一种方法可以将两个主键合并为一个,然后级联更新所有受影响的关系?这是场景:
客户(idCustomer int PK,公司varchar(50)等)
CustomerContacts(idCustomerContact int PK,idCustomer int FK,名称varchar(50)等)
CustomerNotes(idCustomerNote int PK,idCustomer int FK,注释文本等)
有时,客户需要合并为一个。例如,您有一个ID为1的客户,另一个ID为2的客户。您想将两者合并,因此现在2的所有内容都为1。我知道我可以编写一个脚本来更新所有受影响的表一个,但是我想通过使用级联规则使其更适合将来使用,因此我不必在每次添加新关系时都更新脚本。
有任何想法吗?
c# ×4
asp.net ×2
.net ×1
asp.net-mvc ×1
binary ×1
c++ ×1
cascade ×1
compression ×1
dev-c++ ×1
document ×1
file-upload ×1
kohana ×1
locking ×1
orm ×1
php ×1
sql ×1
sql-server ×1
zip ×1