我正在寻找一个清晰,简洁和准确的答案.
理想情况下,作为实际答案,虽然欢迎链接到良好的解释.
这也适用于VB.Net,但关键字是不同的 - ByRef
和ByVal
.
场景:
存在用户拥有的电影数据库,电影显示在称为"我的电影"的页面上,电影可以按照用户期望的顺序显示.例如位置#1中的"搏击俱乐部",位置#3中的"驱动器",依此类推.
显而易见的解决方案是为每个项目存储一个位置,例如:
movieid,userid,position
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
然后在输出数据时按位置排序.此方法适用于输出,但在更新时存在问题:项目的位置需要更新所有其他位置,因为位置是相对的.如果电影#3现在位于第2位,则电影#3现在需要更新到位置#2.如果数据库包含10,000部电影,并且电影从位置#1移动到位置#9999,则需要更新近10,000行!
我唯一的解决方案是单独存储定位,而不是每个项目位置都有一个单独的字段,它只是一个大的数据转储位置,在运行时采取并与每个项目相关联(json,xml,无论如何),但感觉..效率低下因为数据库无法进行排序.
我总结的问题:在一个对提取和更新友好的列表中存储项目位置的最有效方法是什么?
我的报告在32位机器上工作正常,但不会在64位上打开.需要64位,因为在其中一个屏幕上加载数据会导致内存问题 - 因此无法在32位上运行.
编辑#1
编辑#2
显示报告的源代码是
CrystalDecisions.CrystalReports.Engine.ReportClass c = new
CrystalDecisions.CrystalReports.Engine.ReportClass();
c.FileName = System.IO.Path.Combine(Root_Path,
"Reports", "Prod", mFileName);
c.Load();
c.SetDataSource(dt); // dt => DataTable
c.SetParameterValue("prmSystemDate", Current_Date);
frmReportViewer v = new frmReportViewer();
v.ReportClass = c;
v.Show();
Run Code Online (Sandbox Code Playgroud)
而frmReportViewer FormLoad是
private void frmReportViewer_Load(object sender, EventArgs e)
{
CRViewer.ReportSource = ReportClass;
//CRViewer =>
//CrystalDecisions.Windows.Forms.CrystalReportViewer
}
Run Code Online (Sandbox Code Playgroud)
我某处出错了吗?
编辑#3
x86和x64上的DataTable是相同的.(将数据表保存在xml中,两个文件完全相同).
Process Monitor显示我的程序CreateFile
对以下文件执行操作
C:\ WINDOWS\Microsoft.Net\assembly\GAC_64\CrystalDecisions.Web\v4.0_13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll C:\ WINDOWS\Microsoft.Net\assembly\GAC_MSIL\CrystalDecisions.Web\v4.0_13 .0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll C:\ …
如何在序列图中显示静态类或调用静态函数?根据我的理解,生命线属于类的实例/对象.本文说可以使用元类刻板印象.
OLD说,一台机器有MSVBVM60.dll版本6.0.97.82.其他机器有MSVBVM60.dll版本6.0.98.15,说新.从NEW机器上创建的exe new ADODB.Connection
在OLD机器上的行崩溃时发出以下错误
运行时错误'430':类不支持自动化或不支持预期的接口
如何摆脱这个?我的主要目标是在新机器上创建时在OLD机器上运行exe.为了避免干扰NEW机器的配置,我尝试取消注册旧版本并在OLD机器上注册更新版本但没有成功.是否有任何其他dll(s)使用ADODB.Connection
或我需要做一些完全不同的东西来摆脱这个?
NullReferenceException
被抛出在所有相关对象都有效的行上.StackTrace
显示#行是432.
代码是
在这里,Flags
并且tempFlags
都是数据表.两个数据表的列的数据类型都是原始的(十进制,日期时间,短).该应用程序是一个多线程应用程序,代码片段属于线程函数.Flags
在实例级别被decalred,即tempFlags
在线程函数内声明时共享给所有线程.
这个特定的时间实例Flags
包含1946个记录并tempFlags
包含1.那么,为什么这个NullReferenceException?
编辑#1
ex.InnerException
null
ex.StackTrace
at System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
at System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID)
at System.Data.DataTable.MergeRow(DataRow row, DataRow targetRow, Boolean preserveChanges, Index idxSearch)
at System.Data.Merger.MergeTable(DataTable src, DataTable dst)
at System.Data.Merger.MergeTableData(DataTable src)
at System.Data.Merger.MergeTable(DataTable src)
at System.Data.DataTable.Merge(DataTable table, Boolean preserveChanges, MissingSchemaAction missingSchemaAction)
at System.Data.DataTable.Merge(DataTable table)
at [...].cs:line 432"
ex.Data
{System.Collections.ListDictionaryInternal}
[System.Collections.ListDictionaryInternal]: {System.Collections.ListDictionaryInternal}
IsFixedSize: false …
Run Code Online (Sandbox Code Playgroud) 我已经了解了PE文件如何映射到内存中?,这不是我要求的.
我想知道PE文件的哪些部分(数据,文本,代码......)总是被加载器完全加载到内存中,无论条件是什么?
根据我的理解,没有任何部分(代码,数据,资源,文本......)总是完全加载,它们在需要时逐页加载.如果几页代码(中间或末尾)不需要处理用户的请求,那么这些页面将不会总是被加载.
我已经尝试使用大量带有/不带资源的代码制作exe文件,这两种资源都没有被使用,但是,每次exe加载到内存中时,它需要的内存比文件大小多.(我可能一直在查看任务管理器中错误的内存列)
Matt Pietrek在这里写道
值得注意的是,PE文件不仅仅作为单个内存映射文件映射到内存中.相反,Windows加载程序查看PE文件并确定要映射的文件的哪些部分.
和
内存中的模块表示进程所需的可执行文件中的所有代码,数据和资源.可以读取PE文件的其他部分,但不映射(例如,重定位).某些部分可能根本没有映射,例如,当调试信息放在文件末尾时.
简而言之,
1-有一个大小为1 MB的exe,可用内存(物理+虚拟)小于1 MB,加载器总是拒绝加载是否一致,因为可用内存小于文件大小?
2-如果大小为1 MB的exe在加载时开始运行2 MB内存(开始运行第一行用户代码),而可用内存(物理+虚拟)为1.5 MB,则加载程序始终拒绝加载是否一致,因为没有足够的记忆?
3-有一个大小为50 MB的exe(大量的代码,数据和资源),但它需要500 KB来运行第一行用户代码,如果可用内存,这个exe将始终运行第一行代码是一致的(物理+虚拟)至少是500 KB?
AFAIK,Memcached不支持与数据库同步(至少SQL Server和Oracle).我们计划在我们的OLTP数据库中使用Memcached(它是免费的).
在一些业务流程中,我们做了一些繁重的验证,需要来自数据库的大量数据,我们不能保留这些数据的静态副本,因为我们不知道数据是否已被修改,因此我们每次都会获取数据,这会减慢进程的速度.
一种可能的解决方案是
FileSystemWatcher
和监视此文件更改并使密钥到期(表-PK1-PK2-PK3-column)以获取更新的数据问题:大约有100,000名用户在10小时内使用任何数据组合.所以我们最终会有很多文件,例如categ1-subcateg5-subcateg-78-data100,categ1-subcateg5-subcateg-78-data250,categ2-subcateg5-subcateg-78-data100,categ1-subcateg5-subcateg-33-data100等
我期待至少500万个文件.现在它看起来很可怜的解决方案:(
其他可能性
仍然听起来很可悲,不是吗?
请任何聪明的建议
请考虑下表及其记录
create table dbo.test
(
id numeric(4),
vals nvarchar(1000)
);
insert into dbo.test values (1,'1,2,3,4,5');
insert into dbo.test values (2,'6,7,8,9,0');
insert into dbo.test values (3,'11,54,76,23');
Run Code Online (Sandbox Code Playgroud)
我将使用以下函数来分割CSV,您可以使用任何方法来帮助select
语法
CREATE FUNCTION [aml].[Split](@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0) …
Run Code Online (Sandbox Code Playgroud) 我的视图包含以下代码
@{
List<string> list = new List<string>();
list.Add("1001");
list.Add("1002");
list.Add("1003");
var g = new WebGrid(source:list);
g.GetHtml();
}
Run Code Online (Sandbox Code Playgroud)
除此之外什么都没有,但网格没有显示,我可以看到网格的html输入Immediate Window
并且它是正确的但是网格根本没有显示.为什么?